SHAP KernelExplainer : Interprétation des modèles agnostiques
Le SHAP KernelExplainer est une méthode d’explicabilité universelle, conçue pour expliquer les prédictions de tout type de modèle de machine learning, y compris ceux qui ne fournissent pas directement d’informations sur l’importance des variables (comme les SVM, les réseaux de neurones, ou les modèles empiriques).
Basé sur le concept des valeurs de Shapley (provenant de la théorie des jeux coopératifs), le KernelExplainer évalue comment chaque variable contribue à une prédiction spécifique en simulant l’effet de sa présence ou de son absence dans différentes combinaisons.
Fonctionnement
-
Il s’appuie sur un modèle linéaire local pour approximer la prédiction du modèle autour d’un point donné.
-
Pour chaque prédiction, il perturbe les entrées et mesure l’effet de chaque variable en calculant la moyenne marginale de son impact.
-
Il est appelé « Kernel » car il utilise un noyau pondéré pour accorder plus d’importance aux points proches dans l’espace des données.
Modèle-agnostique
Contrairement à TreeExplainer
(qui est optimisé pour les arbres de décision), KernelExplainer fonctionne avec tous les modèles, même ceux que SHAP ne comprend pas nativement. C’est donc une solution idéale lorsque :
-
Tu utilises un modèle complexe ou personnalisé
-
Tu veux une méthode d’interprétation standardisée, quel que soit le modèle
Limites
-
Plus lent que les méthodes spécifiques (car il simule de nombreuses combinaisons)
-
Sensible au choix du background data (les points de référence utilisés pour simuler les absences de variables)
-
Moins adapté aux grands jeux de données sans optimisation
Fonctions :
-
shap.KernelExplainer()
La fonction shap.KernelExplainer() est utilisée pour expliquer les prédictions d'un modèle de machine learning en utilisant des méthodes basées sur les noyaux (kernel methods). Elle est particulièrement utile pour des modèles complexes qui ne sont pas intrinsèquement transparents, comme les modèles de type "boîte noire" (par exemple, les SVMs ou les réseaux de neurones). Le KernelExplainer utilise une approche par approximation des valeurs de Shapley pour obtenir une explication des prédictions en fonction des caractéristiques du modèle. Il s'agit d'une méthode générique qui peut être appliquée à tout modèle, à condition d'avoir une fonction de prédiction.
Importation :
import shap
Attributs :
Paramètre Type Valeur par défaut Description model Callable None Le modèle de machine learning à expliquer. Il doit être une fonction callable, c'est-à-dire une fonction qui prend un ensemble de caractéristiques en entrée et renvoie une prédiction. data array-like, pandas DataFrame None Les données d'entraînement (ou de test) qui seront utilisées pour l'explication. Ces données doivent être en même format que les données d'entrée utilisées pour entraîner le modèle. link str ou callable 'identity' La fonction de lien utilisée pour transformer les prédictions. Par défaut, 'identity' est utilisé pour ne pas transformer les valeurs de sortie. feature_perturbation str 'interventional' La méthode utilisée pour perturber les caractéristiques dans le processus de calcul des valeurs de Shapley. 'interventional' est la méthode par défaut où les caractéristiques sont perturbées de manière indépendante. Exemple de code :
import shap import numpy as np from sklearn.linear_model import LogisticRegression from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split # Charger un jeu de données d'exemple (Iris) X, y = load_iris(return_X_y=True) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # Entraîner un modèle de régression logistique model = LogisticRegression(max_iter=200) model.fit(X_train, y_train) # Créer un explainer SHAP avec KernelExplainer explainer = shap.KernelExplainer(model.predict_proba, X_train) # Calculer les valeurs SHAP pour l'ensemble de test shap_values = explainer.shap_values(X_test) # Visualiser l'impact des caractéristiques sur les prédictions shap.summary_plot(shap_values, X_test)
Explication du code :
-
Jeu de données et modèle : Nous chargeons le jeu de données Iris, qui contient des informations sur des fleurs, puis nous divisons les données en ensembles d'entraînement et de test. Un modèle de régression logistique est entraîné sur les données d'entraînement.
-
Création de l'explainer : Nous créons un objet
KernelExplainer
en passant la fonction de prédiction du modèle (model.predict_proba
) et les données d'entraînement (X_train
). La fonctionpredict_proba
est utilisée car elle renvoie les probabilités des différentes classes (pour un problème de classification multiclasse). -
Calcul des valeurs SHAP : Nous appelons
explainer.shap_values()
pour calculer les valeurs de Shapley pour les prédictions faites par le modèle sur l'ensemble de test. -
Visualisation : Nous utilisons
shap.summary_plot()
pour afficher un graphique résumant l'importance de chaque caractéristique sur les prédictions du modèle.
Sortie attendue :
-
Un graphique interactif montrant l'impact de chaque caractéristique sur les prédictions du modèle. Ce graphique peut être utilisé pour comprendre comment chaque caractéristique influence les prédictions, et il peut également aider à identifier les caractéristiques les plus importantes.
Applications :
-
Modèles de type boîte noire :
KernelExplainer
est particulièrement utile pour expliquer des modèles complexes tels que les réseaux de neurones, les SVMs ou tout autre modèle dont l'interprétation est difficile. Il permet de comprendre l'impact des caractéristiques sur les prédictions sans avoir besoin d'une structure explicite dans le modèle. -
Explication globale et locale : Il peut être utilisé pour des explications globales (comment les caractéristiques influencent les prédictions de manière générale) ainsi que pour des explications locales (comment les caractéristiques influencent une prédiction particulière).
-
Interprétation des résultats dans des contextes critiques : Cette fonction est utile dans des domaines où la compréhension des décisions du modèle est importante, comme la médecine ou la finance, où la transparence du modèle est cruciale.
-