Spesso il problema non è creare un modello accurato, ma riuscire a farsi capire da chi dovrà prendere decisioni basate su quei dati. Immagina di essere seduto di fronte a un cliente: hai appena valutato la sua casa quasi 200.000 euro grazie a un modello di regressione.
Lui ti guarda e, inevitabilmente, ti chiede: “Perché proprio questa cifra?”
Se rispondi parlando di coefficienti, intercette e varianza, hai perso la sua attenzione. Se invece non sai giustificare la composizione di quel numero, hai perso la sua fiducia. È esattamente qui che entra in gioco l’Explainable AI. In questo articolo vediamo come utilizzare SHAP (SHapley Additive exPlanations) per tradurre le predizioni di un modello lineare in una storia chiara, fattuale e pronta per essere presentata a un cliente.
Esercizio : Il tuo primo Explainer – SHAP con un modello Lineare
Testo dell’esercizio
Sei un data scientist in una società di consulenza immobiliare. Il tuo team ha sviluppato un modello di regressione lineare per stimare il prezzo delle case in base a superficie, numero di camere, età dell’immobile e distanza dal centro. Il modello è già stato addestrato e ora ti viene chiesto di spiegare le sue predizioni a un cliente che vuole capire perché la sua casa è stata valutata in un certo modo.
Utilizza SHAP per:
- Creare un explainer per il modello lineare.
- Calcolare i valori SHAP per un singolo cliente.
- Visualizzare il contributo di ciascuna caratteristica.
Dati forniti (già addestrati in un modello LinearRegression di scikit-learn):
import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression
# Dataset simulato
np.random.seed(42)
n_samples = 1000
X = pd.DataFrame({
'superficie': np.random.normal(100, 30, n_samples),
'camere': np.random.randint(1, 6, n_samples),
'eta': np.random.randint(0, 50, n_samples),
'distanza_centro': np.random.normal(10, 5, n_samples)
})
y = (1500 * X['superficie'] + 8000 * X['camere'] - 300 * X['eta'] - 500 * X['distanza_centro']
+ np.random.normal(0, 5000, n_samples))
model = LinearRegression()
model.fit(X, y)
# Cliente da spiegare
cliente = pd.DataFrame({
'superficie': [120],
'camere': [3],
'eta': [15],
'distanza_centro': [8]
})
Soluzione
import shap
import matplotlib.pyplot as plt
# 1. Creazione dell'explainer per il modello lineare
# LinearExplainer è ottimizzato per modelli lineari: sfrutta i coefficienti
# per un calcolo esatto e veloce dei valori SHAP.
explainer = shap.LinearExplainer(model, X)
# 2. Calcolo dei valori SHAP per il singolo cliente
# shap_values è un array con un valore per ogni feature.
# La somma dei valori SHAP + expected_value = predizione del modello.
shap_values = explainer.shap_values(cliente)
print(f"Valore atteso (base): {explainer.expected_value:.2f}")
print(f"Valori SHAP per il cliente: {shap_values[0]}")
print(f"Predizione del modello: {model.predict(cliente)[0]:.2f}")
print(f"Verifica: {explainer.expected_value + np.sum(shap_values[0]):.2f}")
# 3. Visualizzazione con waterfall plot
# Il waterfall plot mostra come ciascuna feature contribuisce a spostare
# la predizione dal valore base (media del training set) al valore finale.
shap.waterfall_plot(
shap.Explanation(
values=shap_values[0],
base_values=explainer.expected_value,
data=cliente.iloc[0],
feature_names=cliente.columns.tolist()
),
show=True
)
Output atteso:
expected_valuesarà circa162.217,10 €(la media delle predizioni sul training set).- I valori SHAP indicano quanto ogni feature contribuisce rispetto a questa media.
- Il waterfall plot mostra le barre colorate: rosso per contributi positivi, blu per negativi.
Ti mostro come preparare i dati, calcolare le differenze e, soprattutto, strutturare la comunicazione per far capire al cliente, in modo cristallino, quanto vale esattamente la posizione migliore.
1. Impostiamo lo scenario (le due case)
Prendiamo i dati dell’Esercizio 1 e creiamo due case identiche, tranne che per la distanza:
- Casa A (la tua): Superficie 120, Camere 3, Età 15, Distanza = 8 km dal centro.
- Casa B (la comparabile): Superficie 120, Camere 3, Età 15, Distanza = 5 km dal centro (più vicina).
2. Il calcolo tecnico (Python)
Per confrontarle, calcoliamo i valori SHAP per entrambe e poi facciamo la differenza.
import shap
import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression
# (Riprendo i dati e il modello dell'Esercizio 1)
np.random.seed(42)
n_samples = 1000
X = pd.DataFrame({
'superficie': np.random.normal(100, 30, n_samples),
'camere': np.random.randint(1, 6, n_samples),
'eta': np.random.randint(0, 50, n_samples),
'distanza_centro': np.random.normal(10, 5, n_samples)
})
y = (1500 * X['superficie'] + 8000 * X['camere'] - 300 * X['eta'] - 500 * X['distanza_centro']
+ np.random.normal(0, 5000, n_samples))
model = LinearRegression()
model.fit(X, y)
explainer = shap.LinearExplainer(model, X)
# Creo le due case
casa_A = pd.DataFrame([[120, 3, 15, 8]], columns=X.columns)
casa_B = pd.DataFrame([[120, 3, 15, 5]], columns=X.columns) # Solo distanza cambia
# Calcolo SHAP
shap_A = explainer.shap_values(casa_A)[0]
shap_B = explainer.shap_values(casa_B)[0]
base_value = explainer.expected_value
# Predizioni
pred_A = model.predict(casa_A)[0]
pred_B = model.predict(casa_B)[0]
# --------------------- STAMPA DEI RISULTATI ---------------------
print("="*60)
print("CONFRONTO TRA DUE CASE IDENTICHE CON DIVERSA DISTANZA")
print("="*60)
# 1. Prezzi stimati
print(f"\n🏠 Casa A (distanza 8 km): Prezzo stimato = {pred_A:,.2f} €")
print(f"🏠 Casa B (distanza 5 km): Prezzo stimato = {pred_B:,.2f} €")
print(f"📈 Differenza di prezzo (B - A) = {pred_B - pred_A:,.2f} €")
# 2. Valori SHAP per singola casa
print("\n--- VALORI SHAP PER SINGOLA CASA ---")
print("\nCasa A (distanza 8 km):")
for i, col in enumerate(X.columns):
print(f" {col}: {shap_A[i]:>12,.2f} €")
print(f" (somma SHAP) = {sum(shap_A):>12,.2f} €")
print(f" base_value + somma = {base_value + sum(shap_A):>12,.2f} € (verifica predizione)")
print("\nCasa B (distanza 5 km):")
for i, col in enumerate(X.columns):
print(f" {col}: {shap_B[i]:>12,.2f} €")
print(f" (somma SHAP) = {sum(shap_B):>12,.2f} €")
print(f" base_value + somma = {base_value + sum(shap_B):>12,.2f} € (verifica predizione)")
# 3. Tabella di confronto dei contributi (differenziale)
print("\n--- TABELLA DI CONFRONTO DEI CONTRIBUTI (SHAP) ---")
comparison = pd.DataFrame({
'Feature': X.columns,
'Casa A (dist 8)': shap_A,
'Casa B (dist 5)': shap_B,
'Differenza (B - A)': shap_B - shap_A
})
print(comparison.to_string(index=False, float_format=lambda x: f"{x:,.2f} €"))
# 4. Verifica della differenza totale tramite SHAP
diff_shap_sum = sum(shap_B - shap_A)
print(f"\n✅ Differenza totale dai valori SHAP = {diff_shap_sum:,.2f} €")
print(f"✅ Differenza di prezzo (pred_B - pred_A) = {pred_B - pred_A:,.2f} €")
print(f"✅ Corrispondenza: {abs(diff_shap_sum - (pred_B - pred_A)) < 0.01}")
# 5. Spiegazione testuale del differenziale
print("\n--- INTERPRETAZIONE DEL DIFFERENZIALE ---")
print(f"L'unica caratteristica che cambia è 'distanza_centro': da 8 km a 5 km.")
print(f"Il suo contributo SHAP passa da {shap_A[3]:,.2f} € a {shap_B[3]:,.2f} €.")
print(f"Ciò genera un aumento di {shap_B[3] - shap_A[3]:,.2f} €, che spiega l'intera differenza di prezzo.")
print("Le altre tre caratteristiche hanno contributi identici in entrambe le case.")
============================================================
CONFRONTO TRA DUE CASE IDENTICHE CON DIVERSA DISTANZA
============================================================
🏠 Casa A (distanza 8 km): Prezzo stimato = 195,240.08 €
🏠 Casa B (distanza 5 km): Prezzo stimato = 196,710.15 €
📈 Differenza di prezzo (B - A) = 1,470.07 €
--- VALORI SHAP PER SINGOLA CASA ---
Casa A (distanza 8 km):
superficie: 30,202.25 €
camere: -797.77 €
eta: 2,766.60 €
distanza_centro: 851.89 €
(somma SHAP) = 33,022.98 €
base_value + somma = 195,240.08 € (verifica predizione)
Casa B (distanza 5 km):
superficie: 30,202.25 €
camere: -797.77 €
eta: 2,766.60 €
distanza_centro: 2,321.95 €
(somma SHAP) = 34,493.04 €
base_value + somma = 196,710.15 € (verifica predizione)
--- TABELLA DI CONFRONTO DEI CONTRIBUTI (SHAP) ---
Feature Casa A (dist 8) Casa B (dist 5) Differenza (B - A)
superficie 30,202.25 € 30,202.25 € 0.00 €
camere -797.77 € -797.77 € 0.00 €
eta 2,766.60 € 2,766.60 € 0.00 €
distanza_centro 851.89 € 2,321.95 € 1,470.07 €
✅ Differenza totale dai valori SHAP = 1,470.07 €
✅ Differenza di prezzo (pred_B - pred_A) = 1,470.07 €
✅ Corrispondenza: True
--- INTERPRETAZIONE DEL DIFFERENZIALE ---
L'unica caratteristica che cambia è 'distanza_centro': da 8 km a 5 km.
Il suo contributo SHAP passa da 851.89 € a 2,321.95 €.
Ciò genera un aumento di 1,470.07 €, che spiega l'intera differenza di prezzo.
Le altre tre caratteristiche hanno contributi identici in entrambe le case.
Cosa abbiamo reso operativo con questo codice?
-
Trasparenza totale: ogni valore SHAP è stampato e verificato.
-
Confronto diretto: la tabella mostra chiaramente che solo la distanza contribuisce alla differenza.
-
Verifica matematica: la somma dei differenziali SHAP corrisponde esattamente alla differenza di prezzo (proprietà di “local accuracy”).
-
Interpretazione automatica: il codice stesso produce una frase che spiega al cliente il risultato.
Perché questo esercizio è fondamentale nella pratica quotidiana?
Dal punto di vista applicativo, questo approccio risolve uno dei colli di bottiglia più frequenti nell’analisi dei dati: l’isolamento delle singole variabili.
L’aspetto più interessante del confronto differenziale (Casa A vs Casa B) risiede nella sua eleganza matematica: nei modelli lineari senza termini di interazione, il calcolo dei valori SHAP restituisce esattamente il prodotto tra il coefficiente della variabile e lo scostamento dalla media del dataset [math]\beta_i (x_i – \mathbb{E}[X_i])[/math].
Questo significa che l’utilizzo di SHAP su una regressione lineare non serve ad “approssimare una scatola nera”, come avviene con il Deep Learning o le Random Forest, ma a riformattare un modello già interpretabile (white box) in un layout comunicativo standardizzato (il waterfall plot). Che tu stia usando un modello lineare, uno script SQL avanzato o un complesso modello ad albero, presentare i dati con questa struttura garantisce che i non-tecnici leggano l’impatto economico esatto di una singola feature senza dover comprendere l’equazione sottostante.
“SHAP su un modello lineare non serve ad approssimare una scatola nera, ma a riformattare un modello già interpretabile in un layout comunicativo standardizzato.”
Questa frase è la chiave di tutto. In pratica, stai dicendo che:
- Prima: il modello lineare era trasparente (white box), ma la trasparenza era tecnica (coefficienti, medie, deviazioni).
- Dopo: con SHAP, quella trasparenza diventa narrativa e visiva, accessibile a un pubblico di business.
E questo è un vantaggio enorme, perché:
- Uniforma il linguaggio tra data scientist e stakeholder.
- Rende il modello “auditabile” da chiunque, senza dover conoscere la matematica.
- Permette di confrontare modelli diversi (lineari, alberi, deep learning) usando lo stesso formato di output.
Questa è l’essenza del lavoro del data scientist in ambito consulenziale: non basta fare previsioni accurate, bisogna farle comprendere. SHAP, anche in un contesto lineare, diventa un alleato potentissimo perché standardizza la spiegazione e la rende riproducibile, indipendentemente dalla complessità del modello sottostante.
E questo, alla fine, è ciò che trasforma un tecnico in un consulente di fiducia.
I numeri da soli non chiudono i contratti; è la fiducia nei numeri a farlo. Strutturare il codice per ottenere una scomposizione chiara come quella di SHAP ti permette di sederti davanti a qualsiasi interlocutore e rispondere alla domanda “Perché?” con precisione millimetrica. Abbiamo visto come un semplice modello lineare possa diventare uno strumento di consulenza trasparente, trasformando un dato freddo in un’argomentazione inattaccabile. Ora hai il codice e la logica di business: non ti resta che applicarli al tuo prossimo dataset.
Il Quadro d’Insieme: Oltre la Singola Casa con Beeswarm e Dependence Plot
Se il Waterfall plot è lo strumento perfetto per il cliente finale, cosa usi quando devi presentare le dinamiche dell’intero mercato immobiliare al management della tua società?
Spiegare una singola predizione (Local Explainability) non basta per comprendere le logiche generali del modello. Per avere una visione d’insieme, SHAP offre due visualizzazioni che sono diventate uno standard assoluto nel settore della Data Science.
Ecco come generarli aggiungendo poche righe di codice al nostro script:
# Calcoliamo i valori SHAP per TUTTO il dataset (non più solo per il cliente)
shap_values_global = explainer.shap_values(X)
# 4. Il grafico più famoso di SHAP: Beeswarm (Summary Plot)
print("Generazione del Summary Plot (Beeswarm)...")
shap.summary_plot(shap_values_global, X)
# 5. Dependence Plot: Focus su una singola variabile e le sue interazioni
print("Generazione del Dependence Plot per la superficie...")
shap.dependence_plot("superficie", shap_values_global, X)
Il Summary Plot (Beeswarm): La mappa del tesoro del modello

Il Beeswarm plot è probabilmente il grafico più iconico di SHAP. Invece di mostrare una singola casa, condensa l’intero dataset in un’unica immagine, permettendoti di leggere l’impatto di ogni variabile a colpo d’occhio.
Come si legge?
- L’asse orizzontale (X) rappresenta il valore SHAP: quanto quella variabile sposta il prezzo rispetto alla media. A destra aumenta il prezzo, a sinistra lo abbassa.
- I colori rappresentano il valore reale della caratteristica: rosso significa “valore alto” (es. una casa molto grande), blu significa “valore basso” (es. una casa molto piccola).
- La densità (lo spessore dei punti): ogni puntino è una casa del dataset. Dove i puntini si “impilano”, c’è un’alta concentrazione di immobili con quelle caratteristiche.
Nel nostro caso, vedrai immediatamente che i puntini rossi della superficie si estendono moltissimo verso la destra dell’asse X. Questo comunica visivamente al management: “Le case grandi sono il motore principale che spinge i prezzi verso l’alto nel nostro portafoglio, superando di gran lunga l’impatto di qualsiasi altra variabile”.
Il Dependence Plot: Scoprire le dinamiche nascoste

Mentre il Summary Plot ti dà la classifica delle variabili, il Dependence Plot ti permette di fare uno “zoom” su una singola caratteristica per capire esattamente come lavora.
In un modello avanzato (come Random Forest o XGBoost), questo grafico è uno strumento investigativo formidabile per scoprire tre fenomeni che sfuggono alle analisi tradizionali:
- Non-linearità: Il grafico mostra chiaramente se il rendimento di una variabile cambia. Ad esempio, il prezzo potrebbe salire in modo proporzionale fino a 150 mq di superficie, per poi appiattirsi perché le case oltre quella metratura sono più difficili da vendere. Nel grafico vedresti la curva piegarsi.
- Soglie (Thresholds): Molto utile per individuare “effetti gradino”. Potresti scoprire che superati i 15 km di
distanza_centro, i valori SHAP crollano improvvisamente in verticale, indicando una barriera psicologica degli acquirenti che rifiutano di allontanarsi oltre quel limite. - Interazioni: SHAP colora automaticamente i punti in base a una seconda variabile (es. colora i punti della superficie in base all’età). Se noti una dispersione verticale dei colori, significa che c’è un’interazione: a parità di metratura, il fatto che la casa sia nuova o vecchia cambia drasticamente il premio di prezzo.
⚠️ Una nota cruciale per il nostro Esercizio:
Poiché in questo specifico esempio abbiamo addestrato una Regressione Lineare semplice senza termini di interazione, il Dependence Plot produrrà una retta perfetta e diagonale. Il modello lineare, per sua natura matematica, assume che ogni metro quadro in più valga sempre 1.500 €, indipendentemente da quante camere ci siano o dall’età dell’immobile.
Questa retta è comunque una diagnosi utilissima: dimostra visivamente che il nostro modello attuale è rigido e incapace di catturare sfumature complesse (come sconti per grandi metrature o premi per posizioni strategiche).
Catturare la Complessità del Mondo Reale con XGBoost e SHAP
Abbiamo visto che la regressione lineare produce grafici di dipendenza (Dependence Plot) che sono semplici linee rette. Per mostrare il vero potere diagnostico di SHAP, dobbiamo alzare l’asticella.
In questo esercizio, abbandoniamo l’ipotesi di linearità e simuliamo un mercato immobiliare con regole più realistiche:
- Rendimenti decrescenti (Non-linearità): I metri quadri costano cari fino a 120 mq, oltre i quali il prezzo al mq scende drasticamente (le case enormi hanno un mercato più ristretto).
- L’effetto “Villa in periferia” (Interazione): Essere lontani dal centro penalizza pesantemente il prezzo, a meno che la casa non sia molto grande (oltre 140 mq). In quel caso, la distanza diventa un pregio (tranquillità, giardino) e annulla la penalizzazione.
Addestreremo un modello XGBoost per catturare queste logiche latenti e useremo shap.TreeExplainer per smascherarle visivamente.
Il Codice
import numpy as np
import pandas as pd
from xgboost import XGBRegressor
import shap
import matplotlib.pyplot as plt
# 1. Simulazione di un dataset non lineare e con interazioni
np.random.seed(42)
n_samples = 2000
# Variabili indipendenti
superficie = np.random.normal(100, 40, n_samples).clip(50, 250)
eta = np.random.randint(0, 50, n_samples)
distanza_centro = np.random.normal(10, 8, n_samples).clip(0, 30)
# Regole di business (nascoste al modello)
# A: Non-linearità sulla superficie (crollo del valore marginale dopo i 120 mq)
valore_superficie = np.where(superficie <= 120, superficie * 2500, (120 * 2500) + ((superficie - 120) * 800))
# B: Interazione tra distanza e superficie (il "premio villa")
penalita_distanza = -1500 * distanza_centro
premio_villa = np.where((distanza_centro > 12) & (superficie > 140), 60000, 0)
# Variabile target Y (Prezzo finale)
y = valore_superficie - (400 * eta) + penalita_distanza + premio_villa + np.random.normal(0, 10000, n_samples)
X = pd.DataFrame({'superficie': superficie, 'eta': eta, 'distanza_centro': distanza_centro})
# 2. Addestramento del modello XGBoost
# XGBoost è in grado di mappare le interazioni senza che gliele dichiariamo esplicitamente
model = XGBRegressor(n_estimators=150, max_depth=4, learning_rate=0.1, random_state=42)
model.fit(X, y)
# 3. Spiegazione con TreeExplainer
# TreeExplainer è l'algoritmo esatto e ultra-veloce di SHAP per alberi decisionali
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X)
# 4. Generazione dei Dependence Plot
# Plot A: Focus sulla non-linearità della superficie
print("Generazione Dependence Plot - Non-linearità...")
shap.dependence_plot("superficie", shap_values, X, interaction_index=None)
# Plot B: Focus sull'interazione tra distanza e superficie
print("Generazione Dependence Plot - Interazioni...")
shap.dependence_plot("distanza_centro", shap_values, X, interaction_index="superficie")
Lettura dei Risultati: Cosa raccontano i grafici?
L’esecuzione di questo script genererà due grafici fondamentali che il management apprezzerà immediatamente.
Grafico 1: La Non-linearità (Superficie)

Guardando il primo grafico, noterai che l’asse X rappresenta i metri quadri e l’asse Y il valore SHAP (l’impatto sul prezzo). A differenza della retta perfetta del modello lineare, qui la curva si piega.
Fino ai 120 mq, i punti salgono rapidamente in diagonale. Superata quella soglia, la curva si “sdraia”, salendo molto più lentamente. Il modello XGBoost ha imparato autonomamente la nostra regola dei rendimenti decrescenti. Se dovessi stimare l’impatto di un ampliamento di 20 mq per una casa già enorme, questo grafico ti dice chiaramente che il ritorno sull’investimento sarà marginale.
Grafico 2: L’Interazione (Distanza dal centro vs Superficie)

Questo è il capolavoro analitico di SHAP.
Sull’asse X hai la distanza_centro. Generalmente, man mano che ti allontani (verso destra), i punti scendono sotto lo zero (penalizzazione sul prezzo).
Ma fai attenzione ai colori. SHAP colora i punti in base alla superficie. Noterai una biforcazione netta dopo i 12 km:
- I punti blu (case piccole) continuano a crollare verso il basso: i bilocali in periferia perdono drasticamente valore.
- I punti rossi (case grandi) subiscono un’impennata anomala verso l’alto: il modello ha isolato il “premio villa”. Ha capito che una casa molto spaziosa in periferia intercetta un target diverso (chi cerca giardini e indipendenza), convertendo il difetto della distanza in un vantaggio economico.
Da un punto di vista professionale, la capacità di mostrare questi grafici segna la differenza tra un Data Scientist esecutivo e un analista strategico.
Se usi un modello lineare (Esercizio 1), stai imponendo tu la tua visione della realtà ai dati. Se usi un algoritmo ad albero combinato con
shap.dependence_plot(Esercizio 2), lasci che siano i dati a rivelarti le anomalie del mercato. Smascherare interazioni implicite – come il fatto che la distanza penalizzi un monolocale ma non una villa – significa fornire al reparto commerciale dei veri e propri insight per ricalibrare le strategie di vendita o di acquisizione immobiliare. SHAP agisce qui non solo come strumento di Explainable AI, ma come un motore di scoperta delle regole di business.
SHAP nella Pratica: Casi d’Uso oltre l’Immobiliare
L’interpretazione delle predizioni non è un vezzo accademico; è un requisito operativo (e spesso legale) trasversale a quasi tutti i settori. I modelli “black box” non sono più accettabili in contesti dove le decisioni impattano la vita delle persone o i bilanci aziendali.
Ecco come le logiche che abbiamo visto vengono applicate ogni giorno in scenari di produzione complessi:
- Credit Scoring: Giustificare l’approvazione o il rifiuto di un mutuo. Oltre a essere una necessità di business, spiegare il peso di variabili come il reddito o lo storico creditizio è spesso un obbligo normativo (es. il Right to Explanation del GDPR).
- Medical AI: Fornire ai medici il “ragionamento” dietro la diagnosi di un algoritmo. Se una rete neurale prevede un alto rischio di riammissione ospedaliera, SHAP evidenzia quali specifici sintomi, biomarcatori o precedenti clinici hanno fatto scattare l’alert.
- Churn Prediction: Non limitarsi a prevedere se un utente annullerà l’abbonamento, ma mostrare al customer care perché sta per farlo, permettendo di strutturare offerte di retention mirate sul problema specifico di quel cliente.
- Marketing Attribution: Distribuire in modo matematicamente equo il merito di una conversione tra i vari touchpoint (social, email, ricerca organica, adv) per ottimizzare l’allocazione del budget pubblicitario.
- Fraud Detection: Aiutare gli analisti antifrode a capire immediatamente perché una transazione è stata bloccata dal sistema, riducendo drasticamente il tempo di indagine sui falsi positivi.
- Dynamic Pricing: Spiegare le impennate di prezzo nei modelli di revenue management (come nel settore aereo o alberghiero), isolando l’impatto dei picchi di domanda, della scarsità di inventario o del comportamento dei competitor.
- Predictive Maintenance: Indicare ai tecnici industriali non solo che un macchinario sta per rompersi, ma quale specifico sensore (es. vibrazione anomala, surriscaldamento) sta segnalando l’imminente guasto, mirandone la riparazione.
⚠️ Attenzione: Quando NON usare SHAP
L’Explainable AI è uno strumento formidabile per la trasparenza, ma non è onnisciente. Per mantenere la credibilità con gli stakeholder (e non prendere decisioni di business disastrose), è vitale comprendere i limiti matematici di questa libreria:
- SHAP non misura la causalità: SHAP distribuisce il “credito” predittivo tra le variabili in base alle correlazioni trovate nei dati, ma non dimostra causa ed effetto. Se il modello impara che “portare l’ombrello” prevede l’arrivo della pioggia, SHAP assegnerà un valore alto all’ombrello. Ma nascondere gli ombrelli non eviterà il temporale.
- SHAP non sostituisce gli A/B Test: Se il tuo obiettivo è capire cosa succederebbe modificando attivamente una variabile (ad esempio, abbassando il prezzo per vedere se le vendite aumentano), hai bisogno di inferenza causale o test sul campo. SHAP ti dice solo come il modello valuta la fotografia attuale, non cosa accadrebbe intervenendo sul sistema.
- SHAP spiega il modello, non la realtà: Se il tuo dataset di addestramento è distorto (bias) o il modello è in overfitting, SHAP spiegherà in modo brillante un modello sbagliato. È un eccellente strumento diagnostico per guardare dentro la “scatola nera”, ma non è un oracolo della verità assoluta.
📚 Per approfondire: Attribution Modeling, Machine Learning e Data Analytics
L’analisi dei dati moderni richiede strumenti capaci di spiegare sia cosa è accaduto sia perché è accaduto. Dai modelli di attribuzione multi-touch alle tecniche di Machine Learning, passando per regressione, correlazione e interpretabilità dei modelli con SHAP, queste guide mostrano come trasformare i dati in decisioni di business affidabili.
👉Attribuzione Multi-Touch nel SaaS B2B: Catene di Markov, Shapley Value e calcolo del CAC
👉Attribuzione Multi-Touch nel SaaS B2B – Parte 2: implementazione pratica con Markov e Shapley
👉Come prevedere il churn con Python: guida completa al Machine Learning e SHAP
👉Guida pratica a correlazione e regressione lineare: esercizi svolti e applicazioni reali





