• Skip to primary navigation
  • Skip to main content
  • Skip to footer

Codemotion Magazine

We code the future. Together

  • Discover
    • Events
    • Community
    • Partners
    • Become a partner
    • Hackathons
  • Magazine
    • Backend
    • Dev community
    • Carriere tech
    • Intelligenza artificiale
    • Interviste
    • Frontend
    • DevOps/Cloud
    • Linguaggi di programmazione
    • Soft Skill
  • Talent
    • Discover Talent
    • Jobs
    • Manifesto
  • Companies
  • For Business
    • EN
    • IT
    • ES
  • Sign in

CodemotionNovembre 19, 2025 9 min di lettura

Oltre la Black Box: Guida pratica alla XAI per sviluppatori

Intelligenza artificiale
xai
facebooktwitterlinkedinreddit

Immagina di costruire un sistema di machine learning per una banca che deve decidere se approvare mutui da centinaia di migliaia di euro. Il modello funziona benissimo: accuratezza del 94%, metriche impeccabili. Tutto perfetto, fino a quando un cliente rifiutato chiede: “Perché mi avete negato il prestito?” E tu, come sviluppatore, non hai una risposta chiara da dare.

Questo scenario non è ipotetico. È la realtà quotidiana di migliaia di team che lavorano con l’intelligenza artificiale. I modelli di machine learning, soprattutto quelli più complessi come le reti neurali profonde o i gradient boosting ensemble, operano come scatole nere: ricevono input, producono output, ma il processo decisionale interno rimane oscuro persino a chi li ha creati.

Recommended article
Novembre 11, 2025

Kimi K2 Thinking: La Cina mette la freccia

Dario Ferrero

Intelligenza artificiale

Il problema della black box nell’AI moderna

Quando parliamo di “black box” nel contesto dell’intelligenza artificiale, ci riferiamo a modelli che non permettono di comprendere il ragionamento che porta a un determinato risultato. Prendiamo un esempio concreto: hai addestrato una rete neurale per diagnosticare malattie da immagini radiografiche. Il modello identifica un tumore con il 97% di confidenza. Eccellente, vero? Ma cosa succede se il medico chiede: “Su cosa si è basato per questa diagnosi?” La risposta è frustrante: non lo sappiamo con certezza.

Questa opacità crea problemi concreti in diversi ambiti:

Nel settore finanziario, le normative come il GDPR europeo stabiliscono il diritto degli individui a ottenere spiegazioni sulle decisioni automatizzate che li riguardano. Una banca che usa l’AI per valutare il rischio creditizio deve poter giustificare ogni rifiuto. Non basta dire “l’algoritmo ha deciso così”.

In ambito medico, la posta in gioco è ancora più alta. Un sistema che raccomanda un trattamento oncologico o esclude una diagnosi deve essere trasparente. I medici hanno bisogno di capire se il modello ha identificato pattern clinicamente rilevanti o se si sta basando su correlazioni spurie presenti nei dati di training.

Nel recruiting, algoritmi di screening dei CV possono perpetuare bias nascosti nei dati storici. Se il tuo modello scarta sistematicamente candidati di un certo genere o background, devi poterlo identificare e correggere. Ma come fai se non capisci cosa sta guardando il modello?

Nei sistemi di giustizia predittiva, utilizzati in alcuni paesi per valutare il rischio di recidiva, la mancanza di trasparenza solleva questioni etiche fondamentali. Decidere della libertà di una persona sulla base di un algoritmo incomprensibile è accettabile?

XAI: rendere l’AI comprensibile agli umani

È qui che entra in gioco la XAI, acronimo di Explainable Artificial Intelligence. Non si tratta di una singola tecnica, ma di un intero campo di ricerca che si pone un obiettivo ambizioso: rendere i modelli di intelligenza artificiale comprensibili agli esseri umani, senza sacrificarne le prestazioni.

La XAI si basa su un principio fondamentale: la trasparenza non è un lusso, è una necessità. Non solo per questioni etiche o normative, ma anche per ragioni pratiche. Un modello interpretabile è più facile da debuggare, da migliorare e da mettere in produzione con fiducia.

Esistono due approcci principali nella XAI:

I modelli glass-box sono intrinsecamente interpretabili. La loro struttura permette di capire direttamente come arrivano alle decisioni. Pensa a una regressione lineare: puoi vedere esattamente quanto ogni variabile contribuisce al risultato finale. Il trade-off tradizionale era che questi modelli sacrificavano accuratezza in cambio di interpretabilità.

Gli ‘spiegatori’ post-hoc lavorano con modelli black-box già addestrati. Una volta che hai il tuo modello ‘opaco’ ma performante, applichi tecniche di spiegazione a posteriori. È come avere un interprete che traduce le decisioni del modello in linguaggio comprensibile.

InterpretML: XAI accessibile per tutti

Tra le librerie disponibili per la XAI in Python, InterpretML si distingue per un equilibrio raro tra potenza e semplicità d’uso. Sviluppata da Microsoft Research, questa libreria open-source offre strumenti sia per modelli glass-box che per spiegazioni post-hoc, con un’interfaccia unificata che abbassa drasticamente la barriera d’ingresso.

L’installazione è immediata:

pip install interpret

InterpretML brilla particolarmente per due aspetti: la visualizzazione interattiva delle spiegazioni attraverso un’interfaccia web automatica, e l’implementazione dell’Explainable Boosting Machine (EBM), un modello che riesce a combinare accuratezza competitiva con i migliori algoritmi black-box e interpretabilità totale.

Explainable Boosting Machine: il meglio di due mondi

L’EBM è una tecnica che merita attenzione particolare. Si tratta di un algoritmo di tipo Generalized Additive Model (GAM) potenziato con tecniche di boosting. Suona complesso, ma il concetto è elegante: il modello impara funzioni separate per ogni feature, poi le combina in modo additivo per fare la predizione finale.

Cosa significa in pratica? Che puoi vedere esattamente come ogni variabile influenza il risultato. Se stai predicendo il rischio di default su un prestito, puoi visualizzare come il reddito annuo, il rapporto debito/reddito, lo storico creditizio e altre variabili contribuiscono individualmente alla decisione finale.

Il vantaggio dell’EBM rispetto a modelli lineari semplici è che può catturare relazioni non lineari complesse. Una variabile può avere un effetto positivo in un certo range e negativo in un altro, e il modello lo rappresenta chiaramente. E a differenza di random forest o neural network, puoi vedere e comprendere queste relazioni.

Caso pratico: classificazione delle iris con spiegazione

Vediamo InterpretML in azione con un esempio concreto. Useremo il classico dataset Iris, che contiene misurazioni di 150 fiori appartenenti a tre specie diverse: setosa, versicolor e virginica. Per ogni fiore abbiamo quattro misure: lunghezza e larghezza del sepalo, lunghezza e larghezza del petalo.

Anche se è un dataset semplice, usato principalmente per didattica, ci permette di esplorare concetti che poi applicherai a problemi reali molto più complessi.

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from interpret.glassbox import ExplainableBoostingClassifier
from interpret import show
import pandas as pd

# Caricamento e preparazione dei dati
iris = load_iris()
X = pd.DataFrame(iris.data, columns=iris.feature_names)
y = pd.Series(iris.target, name='species')

# Split train/test
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42, stratify=y
)

# Training del modello EBM
ebm = ExplainableBoostingClassifier(random_state=42)
ebm.fit(X_train, y_train)

# Valutazione
accuracy = ebm.score(X_test, y_test)
print(f"Accuratezza sul test set: {accuracy:.2%}")
Code language: PHP (php)

Fin qui, nulla di diverso da qualsiasi altro classificatore sklearn. La magia inizia quando generiamo le spiegazioni.

Spiegazioni globali: capire il modello nel suo insieme

Le spiegazioni globali ci mostrano come il modello funziona in generale, su tutto il dataset. Quali variabili sono più importanti? Come influenzano le predizioni?

# Generazione della spiegazione globale
ebm_global = ebm.explain_global(name="EBM - Iris Global")
show(ebm_global)
Code language: PHP (php)

Quando esegui show(ebm_global), InterpretML avvia automaticamente un server locale e apre il browser su una dashboard interattiva. Questa interfaccia è sorprendentemente ricca considerando che non hai scritto una riga di codice di visualizzazione.

La prima cosa che vedrai è un grafico a barre che mostra l’importanza di ogni feature. Nel caso del dataset Iris, tipicamente scoprirai che la larghezza del petalo (petal width) è la variabile più discriminante, seguita dalla lunghezza del petalo (petal length). Le caratteristiche del sepalo hanno un’importanza minore.

Ma InterpretML va oltre. Cliccando su ogni feature, puoi visualizzare la sua “shape function”: un grafico che mostra esattamente come quella variabile influenza la predizione. Per la larghezza del petalo, per esempio, vedrai che:

  • Valori sotto 0.8 cm predicono fortemente la classe “setosa”
  • Valori tra 1.0 e 1.8 cm indicano “versicolor”
  • Valori sopra 1.8 cm suggeriscono “virginica”

Questa è informazione che puoi condividere con esperti di dominio. Un botanico potrebbe confermare che queste soglie hanno senso dal punto di vista biologico, o identificare anomalie nei dati.

Spiegazioni locali: capire le singole predizioni

Le spiegazioni globali sono potenti, ma spesso hai bisogno di capire perché il modello ha fatto una predizione specifica su un particolare esempio. È qui che entrano in gioco le spiegazioni locali.

# Spiegazioni per i primi 5 esempi del test set
ebm_local = ebm.explain_local(
    X_test.iloc[:5], 
    y_test.iloc[:5], 
    name="EBM - Iris Local"
)
show(ebm_local)
Code language: PHP (php)

La visualizzazione locale è ancora più affascinante. Per ogni esempio, vedi un grafico a cascata che mostra:

  1. Il valore base (la predizione media del modello)
  2. Come ogni feature sposta la predizione verso una classe o un’altra
  3. La predizione finale

Prendiamo un esempio concreto. Immagina un fiore con queste caratteristiche:

  • Lunghezza sepalo: 5.8 cm
  • Larghezza sepalo: 2.7 cm
  • Lunghezza petalo: 5.1 cm
  • Larghezza petalo: 1.9 cm

Il modello predice “virginica” con alta confidenza. La spiegazione locale ti mostra che:

  • La larghezza del petalo (1.9 cm) contribuisce fortemente verso “virginica” (+0.45)
  • La lunghezza del petalo (5.1 cm) supporta anche questa predizione (+0.32)
  • La lunghezza del sepalo ha un effetto neutro (+0.03)
  • La larghezza del sepalo spinge leggermente verso “versicolor” (-0.08)

Il contributo netto porta a una forte predizione per “virginica”. Puoi vedere esattamente quali caratteristiche hanno “votato” per quale classe e con quale forza.

Oltre l’esempio : applicazioni reali

Il dataset Iris è didattico, ma i concetti si estendono direttamente a problemi reali. Vediamo alcuni scenari dove ho visto InterpretML fare la differenza.

Credit scoring con EBM

In un progetto per una fintech, dovevamo costruire un modello di credit scoring. I requisiti erano chiari: accuratezza competitiva con i migliori modelli e piena interpretabilità per compliance normativa.

from interpret.glassbox import ExplainableBoostingClassifier
import pandas as pd

# Features tipiche per credit scoring
features = [
    'annual_income', 'debt_to_income_ratio', 'credit_history_length',
    'number_of_open_accounts', 'credit_utilization', 'payment_history_score',
    'number_of_inquiries', 'employment_length'
]

# Training dell'EBM
ebm_credit = ExplainableBoostingClassifier(
    max_bins=512,  # Più bins per catturare relazioni complesse
    interactions=10,  # Considera interazioni tra features
    learning_rate=0.01,
    max_rounds=5000
)

ebm_credit.fit(X_train[features], y_train)
Code language: PHP (php)

Le spiegazioni globali hanno rivelato insight interessanti. Il rapporto debito/reddito aveva, come previsto, un forte impatto negativo oltre il 43%. Ma abbiamo scoperto che il numero di conti aperti aveva una relazione a U invertita: troppo pochi (0-2) o troppi (>8) aumentavano il rischio, mentre 3-7 conti erano ottimali.

Questo tipo di insight è prezioso. Non solo soddisfa i requisiti normativi, ma suggerisce feature engineering mirate e aiuta a identificare potenziali problemi nei dati.

Diagnostica medica con spiegazioni post-hoc

Per un progetto di classificazione di immagini mediche, avevamo un modello CNN black-box con ottime prestazioni. Non potevamo sacrificare l’accuratezza, ma avevamo bisogno di ammissibilità’ . InterpretML offre anche spiegatori post-hoc per questi casi.

from interpret.blackbox import LimeTabular
from sklearn.ensemble import RandomForestClassifier

# Modello black-box già addestrato
rf_model = RandomForestClassifier(n_estimators=100)
rf_model.fit(X_train, y_train)

# Spiegatore LIME
lime = LimeTabular(
    model=rf_model.predict_proba, 
    data=X_train, 
    random_state=42
)

# Spiegazione locale
lime_local = lime.explain_local(
    X_test.iloc[:1], 
    y_test.iloc[:1],
    name="LIME Explanation"
)
show(lime_local)
Code language: PHP (php)

LIME (Local Interpretable Model-agnostic Explanations) crea un modello lineare locale attorno a ogni predizione, permettendoti di capire quali feature hanno influenzato quella specifica decisione.

Gestire interazioni tra features

Una limitazione dei GAM classici è che assumono che le features contribuiscano in modo indipendente. Nella realtà, spesso esistono interazioni: l’effetto di una variabile dipende dal valore di un’altra.

L’EBM di InterpretML gestisce questo problema attraverso termini di interazione. Puoi specificare quante interazioni vuoi che il modello consideri:

ebm_interactions = ExplainableBoostingClassifier(
    interactions=15,  # Considera le top 15 interazioni
    max_interaction_bins=32
)
ebm_interactions.fit(X_train, y_train)

# Visualizza le interazioni scoperte
ebm_global = ebm_interactions.explain_global()
show(ebm_global)
Code language: PHP (php)

La dashboard ti mostrerà non solo l’importanza delle singole features, ma anche le interazioni significative. Per esempio, in un modello di churn prediction, potresti scoprire che l’interazione tra “durata contratto” e “numero di reclami” è molto informativa: molti reclami sono tollerati per clienti di lungo corso, ma per clienti nuovi anche pochi reclami predicono fortemente l’abbandono.

Confrontare modelli interpretativi e black-box

Un dubbio legittimo: quanto sacrifichiamo in termini di prestazioni usando modelli interpretabili? InterpretML rende facile il confronto.

from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier
from interpret.glassbox import ExplainableBoostingClassifier
from interpret.perf import ROC

# Training di diversi modelli
models = {
    'EBM': ExplainableBoostingClassifier(random_state=42),
    'Random Forest': RandomForestClassifier(n_estimators=100, random_state=42),
    'Gradient Boosting': GradientBoostingClassifier(random_state=42)
}

results = {}
for name, model in models.items():
    model.fit(X_train, y_train)
    results[name] = {
        'model': model,
        'accuracy': model.score(X_test, y_test),
        'predictions': model.predict_proba(X_test)
    }

# Confronto delle performance
for name, result in results.items():
    print(f"{name}: {result['accuracy']:.4f}")

# Visualizzazione ROC comparativa
roc = ROC(results['EBM']['model'].predict_proba)
roc_viz = roc.explain_perf(X_test, y_test, name='EBM')
show(roc_viz)
Code language: PHP (php)

Nella mia esperienza, l’EBM generalmente si posiziona a 1-3% di accuratezza rispetto ai migliori gradient boosting black-box. Per molti use case, questo trade-off è più che accettabile considerando il guadagno in interpretabilità.

Best practices per XAI in produzione

Implementare XAI non significa solo installare una libreria. Ecco alcune lezioni apprese lavorando con questi strumenti in produzione.

Inizia con l’interpretabilità fin dall’inizio. Non aspettare di avere un modello già in produzione per pensare alla ‘ammissibilità’. Includila nei requisiti di progetto dall’inizio. È molto più facile costruire con la trasparenza in mente che aggiungerlasuccessive.

Documenta le spiegazioni insieme al codice. Le visualizzazioni di InterpretML sono ottime per l’esplorazione, ma dovresti anche salvare spiegazioni chiave come artefatti versionate. Questo crea una traccia auditabile.

# Salva le spiegazioni per audit futuro
from interpret import preserve

preserve(ebm_global, 'ebm_global_explanation.html')
preserve(ebm_local, 'ebm_local_explanation.html')
Code language: PHP (php)

Valida le spiegazioni con esperti di dominio. L’interpretabilità è inutile se nessuno con expertise rilevante la verifica. Organizza sessioni dove mostri le spiegazioni del modello a chi conosce il problema. Spesso emergono insight o problemi nascosti.

Monitora la stabilità delle spiegazioni. In produzione, non monitorare solo le prestazioni del modello, ma anche come cambiano le spiegazioni nel tempo. Un improvviso cambio nell’importanza delle features può segnalare data drift o problemi di qualità dei dati.

# Tracking delle feature importances nel tempo
import json
from datetime import datetime

def log_feature_importance(model, version):
    importance = dict(zip(
        model.feature_names_in_,
        model.feature_importances_
    ))
    
    log_entry = {
        'timestamp': datetime.now().isoformat(),
        'model_version': version,
        'feature_importance': importance
    }
    
    with open('feature_importance_log.jsonl', 'a') as f:
        f.write(json.dumps(log_entry) + '\n')
Code language: PHP (php)

Usa spiegazioni diverse per audience diverse. Le spiegazioni tecniche per il team di data science sono diverse da quelle per stakeholder business o per utenti finali. InterpretML permette di generare diverse viste degli stessi insight.

Limiti e sfide della XAI

La XAI non è una panacea. È importante riconoscere i limiti.

Le spiegazioni possono essere ingannevoli. Una spiegazione plausibile non è necessariamente corretta. Il modello potrebbe basarsi su correlazioni spurie che sembrano ragionevoli superficialmente. L’ ammissibilità deve accompagnarsi a validazione rigorosa.

Trade-off complessità-interpretabilità. Per problemi estremamente complessi (visione computerizzata avanzata, NLP, ecc.), i modelli veramente interpretabili possono non essere sufficienti. In questi casi, gli spiegatori post-hoc sono l’unica opzione, ma sono approssimazioni.

Costo computazionale. Generare spiegazioni dettagliate, specialmente per modelli black-box grandi, può essere costoso. In produzione con bassa latenza, questo può essere problematico. Serve bilanciare tra spiegazioni on-demand e pre-calcolate.

Non risolve problemi etici fondamentali. L’ammissibilità’ aiuta a identificare bias, ma non li elimina automaticamente. Un modello interpretabile che discrimina è ancora problematico. La XAI è uno strumento, non una soluzione magica.

Il futuro della XAI

Il campo della XAI sta evolvendo rapidamente. Alcune direzioni interessanti:

Spiegazioni causali: andare oltre le correlazioni per capire relazioni causa-effetto. Librerie come DoWhy stanno esplorando questo territorio.

Spiegazioni multimodali: per modelli che lavorano con immagini, testo e dati strutturati insieme, servono tecniche di spiegazione che integrino diverse modalità.

Certificazione formale: non solo spiegazioni, ma garanzie formali sul comportamento del modello. Tecniche di verifica formale applicate al machine learning.

Spiegazioni interattive: interfacce dove l’utente può esplorare scenari “what-if” e vedere come cambierebbe la predizione modificando diverse features.

Conclusione: trasparenza come vantaggio competitivo

L’adozione della XAI non dovrebbe essere vista come un vincolo imposto da normative o richieste etiche, ma come un vantaggio strategico. Modelli interpretabili sono più facili da debuggare, più robusti, più affidabili in produzione e generano maggiore fiducia negli utenti.

InterpretML rappresenta uno strumento eccellente per iniziare questo percorso. La sua facilità d’uso abbassa la barriera d’ingresso, mentre la potenza dell’EBM dimostra che interpretabilità e performance non sono necessariamente in conflitto.

La prossima volta che addestri un modello, prima di raggiungere automaticamente verso un random forest o una rete neurale, considera: hai veramente bisogno di quella complessità? Potresti ottenere risultati comparabili con un modello che puoi spiegare e comprendere completamente?

La risposta potrebbe sorprenderti. E i tuoi utenti, stakeholder e te stesso tra sei mesi ringrazierete per la scelta della trasparenza.

Codemotion Collection Background
Top of the week
Selezionati per te

Vuoi scoprire più articoli come questo? Dai un’occhiata alla collection Top of the week dove troverai sempre nuovi contenuti selezionati dal nostro team.

Share on:facebooktwitterlinkedinreddit

Tagged as:interpretML reti neurali xai

Codemotion
Articoli scritti dallo staff di Codemotion. Notizie tech, ispirazione, ultime tendenze nello sviluppo del software e molto altro.
Oltre Big Tech: verso un’identità digitale pubblica europea
Previous Post

Footer

Discover

  • Events
  • Community
  • Partners
  • Become a partner
  • Hackathons

Magazine

  • Tech articles

Talent

  • Discover talent
  • Jobs

Companies

  • Discover companies

For Business

  • Codemotion for companies

About

  • About us
  • Become a contributor
  • Work with us
  • Contact us

Follow Us

© Copyright Codemotion srl Via Marsala, 29/H, 00185 Roma P.IVA 12392791005 | Privacy policy | Terms and conditions