SHAP découpe une prédiction en parts : de combien chaque variable a poussé le score vers le haut ou vers le bas, pour un client précis. C'est la méthode de référence pour expliquer un modèle complexe à un métier, à un client ou à un auditeur.
Une prime d'équipe à répartir. La méthode de Shapley, issue de la théorie des jeux, donne à chacun sa contribution moyenne sur toutes les compositions d'équipe possibles. SHAP applique la même règle aux variables d'un modèle.
La valeur de base est la prédiction moyenne du modèle sur une population de référence (en log-odds pour un classifieur). C'est le score d'un client « sans information particulière ».
Pour chaque variable, on regarde de combien la prédiction bouge quand on connaît sa valeur, en moyenne sur tous les ordres possibles d'ajout des autres. Pour les modèles d'arbres, l'algorithme TreeSHAP fait ce calcul exactement et vite.
Valeur de base + somme des contributions = score du client. Avec un classifieur XGBoost, l'addition se fait en log-odds, l'échelle interne du modèle, avant conversion en probabilité.
Un XGBoost score le risque de départ à partir de l'ancienneté, des appels au support, du montant, du contrat et des incidents. Un client ressort avec un score très élevé : pourquoi lui ?
Pour chaque client, la liste des variables avec leur poids : ce qui pousse vers le départ, ce qui retient. Le conseiller sait quoi aborder dans l'appel. La moyenne des valeurs absolues donne en plus l'importance globale des variables.
Base + contributions doit redonner exactement le score. Ensuite, un expert métier relit les explications : une variable absurde en tête signale souvent une fuite de données ou un biais dans le modèle.
SHAP n'a pas d'hyperparamètre au sens classique. Trois décisions changent pourtant les chiffres affichés, elles doivent figurer dans la documentation du modèle.
Pour les modèles d'arbres (XGBoost, Random Forest, LightGBM), le calcul TreeSHAP est exact et rapide : predict(..., predcontrib = TRUE) avec xgboost ou lightgbm en R, shap.TreeExplainer en Python. Pour les autres modèles, KernelExplainer donne une approximation, lente.
La valeur de base dépend de la population de comparaison. Expliquer un score « par rapport à l'ensemble des clients » ou « par rapport aux clients acceptés » ne donne pas les mêmes contributions. Le choix doit être assumé et écrit.
Pour un classifieur XGBoost, les contributions s'additionnent en log-odds, pas en points de pourcentage. Pour parler en probabilité, TreeExplainer accepte model_output="probability", avec des données de référence en paramètre.
# Pourquoi ce client va partir : SHAP en R
library(xgboost)
clients <- read.csv("clients_churn.csv")
X <- model.matrix(~ anciennete + appels_support + montant + contrat + incidents_3m, data = clients)[, -1]
dclients <- xgb.DMatrix(X, label = clients$churn)
set.seed(42)
params <- list(objective = "binary:logistic", eta = 0.05, max_depth = 4)
modele <- xgb.train(params = params, data = dclients, nrounds = 300)
# Valeurs SHAP : une colonne par variable + une colonne de base (en log-odds)
contrib <- predict(modele, dclients, predcontrib = TRUE)
proba <- predict(modele, dclients)
# Le client au score le plus élevé : ce qui pousse son score vers le haut
i <- which.max(proba)
cat("Client", clients$id_client[i], ": score de churn", round(proba[i], 2), "\n")
print(round(sort(contrib[i, colnames(X)], decreasing = TRUE), 3))
# Contrôle : base + contributions = score, en log-odds
cat("Somme des contributions :", round(sum(contrib[i, ]), 3), "| log-odds du score :", round(qlogis(proba[i]), 3), "\n")
# Importance globale : moyenne des valeurs SHAP absolues
print(round(sort(colMeans(abs(contrib[, colnames(X)])), decreasing = TRUE), 3))
# Pourquoi ce client va partir : SHAP en Python
import pandas as pd
import shap
from xgboost import XGBClassifier
clients = pd.read_csv("clients_churn.csv")
X = pd.get_dummies(clients[["anciennete", "appels_support", "montant", "contrat", "incidents_3m"]], dtype=int)
y = clients["churn"]
modele = XGBClassifier(n_estimators=300, learning_rate=0.05, max_depth=4, random_state=42)
modele.fit(X, y)
# Valeurs SHAP : contribution de chaque variable au score (en log-odds)
explainer = shap.TreeExplainer(modele)
valeurs = explainer.shap_values(X)
# Le client au score le plus élevé : ce qui pousse son score vers le haut
proba = modele.predict_proba(X)[:, 1]
i = proba.argmax()
print("Client", clients.loc[i, "id_client"], ": score de churn", round(proba[i], 2))
print("Valeur de base (log-odds) :", explainer.expected_value)
print(pd.Series(valeurs[i], index=X.columns).sort_values(ascending=False).round(3))
# Importance globale : moyenne des valeurs SHAP absolues
print(pd.DataFrame(valeurs, columns=X.columns).abs().mean().sort_values(ascending=False).round(3))
C'est la contribution d'une variable à une prédiction précise, par rapport à une prédiction moyenne. Une valeur positive pousse le score vers le haut, une valeur négative vers le bas. La somme des valeurs SHAP et de la valeur de base redonne exactement la prédiction.
SHAP repose sur les valeurs de Shapley, qui ont des garanties mathématiques : les contributions s'additionnent toujours jusqu'au score. Pour les modèles d'arbres, le calcul est exact et rapide. LIME est plus simple dans son principe, mais ses explications dépendent d'un échantillonnage aléatoire et peuvent changer d'une exécution à l'autre.
Non, mais il y contribue. Pour les systèmes à haut risque, comme l'évaluation de la solvabilité ou le recrutement, l'AI Act exige documentation, transparence et contrôle humain. Il donne aussi aux personnes concernées un droit à l'explication des décisions (article 86). SHAP fournit la matière de ces explications, qu'il faut ensuite traduire en langage clair.
Approche la prédiction par un petit modèle linéaire autour du client. Plus simple, mais les résultats varient d'un tirage à l'autre.
Voir la fiche → la vue globaleMélange une variable et mesure la perte de performance. Dit quelles variables comptent pour le modèle, pas pourquoi un client a tel score.
Voir la fiche → le modèle à expliquerPrécis mais opaque. Avec TreeSHAP, chacun de ses scores devient explicable en quelques secondes.
Voir la fiche →Dataistudio forme les équipes au machine learning et à l'IA, sur des cas concrets.
Nous utilisons des cookies de mesure d'audience et de suivi publicitaire pour comprendre la fréquentation du site et l'efficacité de nos annonces. Rien n'est déposé sans votre accord. En savoir plus