Introduzione: perchè i Modelli Devono Essere Spiegabili
L'Explainable AI (XAI) affronta una delle sfide più urgenti del deep learning: comprendere perchè un modello prende una determinata decisione. I modelli di deep learning sono spesso black box: raggiungono accuratezza eccezionale ma non offrono alcuna spiegazione sul loro ragionamento. Questo e un problema critico quando le decisioni hanno impatto sulla vita delle persone: diagnosi mediche, approvazione di prestiti, sentenze giudiziarie, assunzioni.
Il regolamento europeo GDPR riconosce il diritto alla spiegazione: i cittadini hanno il diritto di sapere come le decisioni automatizzate vengono prese. In questo articolo esploreremo le tecniche principali per rendere i modelli interpretabili: SHAP, LIME, GradCAM e attention visualization.
Cosa Imparerai
- Il problema della black box: perchè l'interpretabilita conta
- Feature importance: quali caratteristiche influenzano le predizioni
- SHAP: valori di Shapley per spiegazioni locali e globali
- LIME: spiegazioni locali model-agnostic
- GradCAM: visualizzare dove "guarda" una CNN
- Attention visualization nei Transformer
- Fairness e bias: rilevare discriminazione nei modelli
- Compliance GDPR e diritto alla spiegazione
Il Problema della Black Box
Un modello di deep learning con milioni di parametri impara rappresentazioni complesse e non lineari dei dati. A differenza di un albero decisionale o di una regressione lineare, non esiste un modo diretto per capire quali feature hanno portato a una specifica predizione e come interagiscono.
Questo crea un paradosso: i modelli più accurati (deep networks) sono anche i meno interpretabili. L'XAI cerca di risolvere questo trade-off fornendo spiegazioni post-hoc delle decisioni, senza sacrificare le performance del modello.
Le spiegazioni possono essere:
- Locali: perchè questa specifica predizione? (es. "il prestito e stato rifiutato perchè il reddito e troppo basso")
- Globali: come funziona il modello in generale? (es. "il reddito e la feature più importante, seguita dal credit score")
Feature Importance: Quali Caratteristiche Contano
La feature importance e il primo passo verso l'interpretabilita: quantifica quanto ogni feature contribuisce alle predizioni del modello. Metodi semplici includono la permutation importance: si permuta casualmente una feature e si misura quanto degrada la performance. Più la performance cala, più la feature e importante.
from sklearn.inspection import permutation_importance
from sklearn.ensemble import RandomForestClassifier
import numpy as np
# Modello addestrato
model = RandomForestClassifier(n_estimators=100)
model.fit(X_train, y_train)
# Permutation importance
result = permutation_importance(model, X_test, y_test,
n_repeats=10, random_state=42)
# Visualizzazione
feature_names = ['eta', 'reddito', 'credit_score', 'debito',
'impiego_anni', 'n_prestiti_attivi']
for name, importance, std in sorted(
zip(feature_names, result.importances_mean, result.importances_std),
key=lambda x: x[1], reverse=True):
print(f"{name:<20}: {importance:.4f} +/- {std:.4f}")
SHAP: Valori di Shapley per Spiegazioni Rigorose
SHAP (SHapley Additive exPlanations) applica la teoria dei giochi cooperativi per calcolare il contributo di ogni feature a una predizione. I valori di Shapley rappresentano il contributo marginale medio di ogni feature, considerando tutte le possibili combinazioni di feature.
SHAP e l'unico metodo che soddisfa simultaneamente tre proprietà desiderabili:
- Local accuracy: la somma dei valori SHAP per una predizione uguale la predizione stessa
- Missingness: feature assenti hanno valore SHAP zero
- Consistency: se una feature contribuisce di più in un modello rispetto a un altro, il suo valore SHAP e più alto
import shap
# TreeSHAP per modelli ad albero (veloce ed esatto)
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X_test)
# Force plot: spiegazione di una singola predizione
shap.force_plot(
explainer.expected_value[1],
shap_values[1][0], # Prima predizione, classe positiva
X_test.iloc[0],
feature_names=feature_names
)
# Summary plot: importanza globale
shap.summary_plot(shap_values[1], X_test,
feature_names=feature_names)
# Dependence plot: come una feature influenza il modello
shap.dependence_plot("reddito", shap_values[1], X_test,
feature_names=feature_names)
# DeepSHAP per reti neurali
deep_explainer = shap.DeepExplainer(neural_model, X_train[:100])
deep_shap_values = deep_explainer.shap_values(X_test[:10])
LIME: Spiegazioni Locali Model-Agnostic
LIME (Local Interpretable Model-agnostic Explanations) spiega singole predizioni approssimando localmente il modello complesso con un modello semplice e interpretabile (tipicamente una regressione lineare). Il processo:
- Genera perturbazioni dell'input originale (variando feature casuali)
- Ottiene le predizioni del modello black-box per ogni perturbazione
- Addestra un modello lineare locale pesato per distanza dall'input originale
- I coefficienti del modello lineare indicano l'importanza locale di ogni feature
import lime
import lime.lime_tabular
# Creare l'explainer
explainer = lime.lime_tabular.LimeTabularExplainer(
X_train.values,
feature_names=feature_names,
class_names=['Rifiutato', 'Approvato'],
mode='classification'
)
# Spiegare una predizione
explanation = explainer.explain_instance(
X_test.iloc[0].values,
model.predict_proba,
num_features=6,
num_samples=5000
)
# Visualizzare
explanation.show_in_notebook()
print("Feature contributions:")
for feature, weight in explanation.as_list():
print(f" {feature}: {weight:+.4f}")
GradCAM: Dove "Guarda" una CNN
GradCAM (Gradient-weighted Class Activation Mapping) visualizza quali regioni di un'immagine sono più importanti per la classificazione. Calcola i gradienti dell'output rispetto alle feature map dell'ultimo layer convoluzionale, creando una mappa di calore che evidenzia le aree dell'immagine che hanno maggiormente contribuito alla predizione. Se la CNN classifica un'immagine come "gatto", GradCAM mostrera che la rete sta effettivamente guardando il gatto e non lo sfondo.
Attention Visualization nei Transformer
I modelli Transformer offrono una forma naturale di interpretabilita: le attention weights. Visualizzando la matrice di attenzione, possiamo vedere quali token il modello "guarda" quando processa ogni parola. Questo rivela pattern sintattici (soggetto-verbo), semantici (coreference) e posizionali.
from transformers import BertTokenizer, BertModel
import torch
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained('bert-base-uncased',
output_attentions=True)
text = "The cat sat on the mat because it was tired"
inputs = tokenizer(text, return_tensors='pt')
with torch.no_grad():
outputs = model(**inputs)
# Attention weights: (layers, heads, seq_len, seq_len)
attentions = outputs.attentions # Tuple di 12 layer
tokens = tokenizer.convert_ids_to_tokens(inputs['input_ids'][0])
# Visualizzare attention del layer 11, head 0
import matplotlib.pyplot as plt
import seaborn as sns
layer, head = 11, 0
attn_matrix = attentions[layer][0, head].numpy()
plt.figure(figsize=(10, 8))
sns.heatmap(attn_matrix, xticklabels=tokens, yticklabels=tokens,
cmap='Blues', annot=False)
plt.title(f"Attention - Layer {layer}, Head {head}")
plt.tight_layout()
plt.savefig('attention_heatmap.png', dpi=150)
Fairness e Bias: Equita nei Modelli
L'XAI e fondamentale per rilevare bias nei modelli. Se un modello di credit scoring assegna sistematicamente punteggi più bassi a determinati gruppi demografici, le tecniche XAI possono rivelare questa discriminazione analizzando come feature sensibili (genere, eta, etnia) influenzano le predizioni.
Metriche di fairness comuni includono:
- Demographic Parity: la probabilità di un outcome positivo dovrebbe essere uguale tra i gruppi
- Equal Opportunity: il true positive rate dovrebbe essere uguale tra i gruppi
- Calibration: predizioni con la stessa probabilità dovrebbero avere lo stesso outcome tra i gruppi
Compliance GDPR e Diritto alla Spiegazione
Il GDPR (Art. 22) stabilisce che i cittadini UE hanno diritto a non essere soggetti a decisioni basate unicamente su trattamento automatizzato che producono effetti giuridici. Quando tali decisioni vengono prese, l'individuo ha diritto a:
- Ottenere una spiegazione significativa della logica utilizzata
- Contestare la decisione e richiedere intervento umano
- Esprimere il proprio punto di vista
L'XAI fornisce gli strumenti tecnici per soddisfare questi requisiti normativi, trasformando la compliance da obbligo legale a buona pratica ingegneristica.
Conclusione della Serie
- In questa serie abbiamo esplorato il deep learning dalle fondamenta alle applicazioni avanzate
- Dalle reti neurali base (MLP) alle architetture stato dell'arte (Transformer, Diffusion)
- Dalle tecniche di training (backpropagation, RL) all'interpretabilita (SHAP, LIME)
- Il deep learning continua a evolversi rapidamente: restare aggiornati e la chiave del successo







