Aller au contenu principal

Module 4 — Explicabilité : LIME, SHAP et leurs limites

Un modèle qui refuse un prêt sans pouvoir dire pourquoi est inacceptable pour son demandeur, pour son conseiller et pour l'autorité de contrôle. Ce module apprend à produire deux types d'explications — locales et globales — et surtout à en connaître les limites, car une explication mal comprise est plus dangereuse qu'une absence d'explication.

Local et global : deux questions distinctes

L'explication locale répond à la question : « pourquoi ce demandeur précis a-t-il été refusé ? ». Elle porte sur une prédiction unique et sert à motiver une décision individuelle, à répondre à un recours, à alimenter la notice remise au client.

L'explication globale répond à la question : « qu'est-ce que le modèle regarde en moyenne ? ». Elle porte sur l'ensemble des prédictions et sert à auditer le comportement général, à repérer une variable qui pèse trop lourd, à alimenter la fiche de modèle du module 6.

Confondre les deux mène à des raccourcis dangereux. Ce n'est pas parce que « le revenu » est la variable la plus importante globalement qu'elle est le motif principal d'un refus individuel : pour ce demandeur-là, deux incidents de paiement récents peuvent peser plus lourd que son revenu.

Les valeurs de Shapley, ce qu'elles calculent réellement

SHAP (SHapley Additive exPlanations) attribue à chaque variable une contribution signée à la prédiction du modèle pour un exemple donné. Ces contributions viennent de la théorie des jeux coopératifs de Lloyd Shapley : la valeur d'une variable est sa contribution moyenne à toutes les coalitions possibles avec les autres variables.

Concrètement, si le modèle produit un score de 0,42 (probabilité de défaut), et que la moyenne de sortie sur le jeu vaut 0,10, alors la somme des valeurs de Shapley pour cet exemple doit égaler 0,420,10=0,320{,}42 - 0{,}10 = 0{,}32. Chaque variable « pousse » vers le haut ou vers le bas d'une quantité chiffrée.

import shap
import lightgbm as lgb

modele = lgb.LGBMClassifier().fit(X_train, y_train)
explainer = shap.TreeExplainer(modele)
valeurs = explainer.shap_values(X_test)

# explication d'un dossier précis
shap.plots.waterfall(shap.Explanation(
values=valeurs[1][42], # 42e demandeur, classe 1 (défaut)
base_values=explainer.expected_value[1],
data=X_test.iloc[42],
feature_names=X_test.columns,
))

Le graphique « en cascade » montre chaque variable et sa contribution. Pour le demandeur no 42 de notre fil rouge, on lit typiquement : revenu 0,14-0{,}14, incidents_12_mois +0,22+0{,}22, taux_endettement +0,09+0{,}09, autres variables +0,15+0{,}15. Le refus est bien attribué à un signal précis et communicable.

L'explicabilité globale, en une ligne

Sur l'ensemble du jeu, SHAP fournit une importance globale robuste : la moyenne des valeurs absolues des contributions par variable.

shap.summary_plot(valeurs[1], X_test, plot_type="bar")

Cette vue remplace avantageusement l'importance interne du modèle (feature_importances_ de LightGBM), qui repose sur des statistiques de split et sur-évalue les variables catégorielles à haute cardinalité. Elle sert aussi à détecter un cas gênant : une variable qu'on pensait mineure et qui domine, ou l'inverse.

Pourquoi LIME peut être instable

LIME (Local Interpretable Model-agnostic Explanations) attaque le même problème par une voie différente : autour d'un exemple à expliquer, il génère de petites perturbations, observe la prédiction du modèle sur chacune, et ajuste un modèle linéaire local sur ces observations. Les coefficients du modèle linéaire donnent une explication compréhensible.

L'approche a un défaut connu et documenté : l'explication dépend des perturbations aléatoires. Deux appels successifs de LIME sur le même exemple peuvent produire des explications sensiblement différentes, surtout aux frontières de décision. Un article de Slack et coauteurs a même montré qu'on pouvait entraîner un modèle « couverture » qui trompe LIME en produisant des explications trompeuses tout en discriminant réellement.

Cela n'invalide pas LIME, qui reste utile pour les données tabulaires et surtout pour les images et le texte où SHAP est plus coûteux. Cela impose deux règles de méthode : fixer la graine aléatoire pour la reproductibilité, et ne jamais fonder une décision de recours sur une seule explication LIME sans la comparer à une explication SHAP du même exemple.

Une explication n'est pas une justification

C'est le point le plus important du module, celui qu'aucune bibliothèque ne peut vous apprendre. Un outil d'explicabilité décrit ce que le modèle fait, il ne dit pas si ce qu'il fait est acceptable. Trois exemples issus du fil rouge, pour ancrer la distinction.

Le modèle refuse un dossier parce que « nombre d'enfants à charge = 3 » pèse fortement contre la prédiction. SHAP explique fidèlement la mécanique. Sur le plan juridique, l'usage de cette variable pour un refus est probablement interdit dans la plupart des pays européens : l'explication a révélé une illégalité, pas une justification.

Le modèle refuse un dossier parce que le demandeur habite dans un code postal statistiquement associé à un revenu médian bas. L'explication est mécaniquement correcte. Elle décrit un redlining numérique — variable de substitution du module 2 — que le régulateur bancaire réprouve.

Le modèle accepte un dossier parce que la variable « ancien client depuis 12 ans » pèse fortement. Rien d'illégal ni de discriminatoire, mais l'explication doit être portée à la connaissance du demandeur nouveau, qui doit savoir qu'il partait avec un handicap silencieux.

Les modèles interprétables par conception

Une alternative sous-estimée : renoncer à la boîte noire quand une famille de modèles plus simples suffit. Un modèle additif généralisé (GAM), un arbre peu profond, une régression logistique avec pénalité, ou un système de règles apprises peuvent atteindre des performances proches d'un gradient boosting sur des données tabulaires bien préparées. La différence : un GAM produit directement une courbe interprétable pour chaque variable, sans passer par SHAP.

Cynthia Rudin a défendu cette position dans un article influent : sur les tâches à fort enjeu, préférer un modèle interprétable plutôt que d'expliquer après coup une boîte noire. L'argument n'est pas de récuser l'ensemble du deep learning, mais de reconnaître que sur un problème comme l'octroi de crédit, l'écart de performance justifie rarement l'opacité.

En résumé

  • Explication locale (pourquoi cet exemple ?) et explication globale (que regarde le modèle ?) répondent à des questions différentes ; ne pas confondre.
  • SHAP fournit des contributions signées additives dont la somme reconstitue la déviation par rapport à la moyenne, avec une base théorique solide.
  • LIME est sensible aux perturbations aléatoires et manipulable ; fixer la graine et ne jamais s'en tenir à lui seul pour un recours.
  • Expliquer n'est pas justifier : un motif exact peut rester illégal, discriminatoire ou incommunicable ; parfois, un modèle interprétable par conception est le vrai choix.

Module suivant : protéger les données personnelles utilisées pour entraîner ce modèle, avec l'anonymisation, le k-anonymat et la confidentialité différentielle.