SHAP Force Plot : Explication locale et intuitive des prédictions
Le SHAP Force Plot est une visualisation puissante et interactive qui permet de comprendre les décisions individuelles d’un modèle de machine learning.
Contrairement aux visualisations globales, le force plot explique précisément pourquoi une prédiction a été faite pour une observation donnée, en montrant comment chaque variable a contribué à augmenter ou diminuer la prédiction.
Principe
-
Le point de départ est la valeur moyenne des prédictions du modèle (valeur de base).
-
Chaque caractéristique (feature) agit comme une force qui pousse la prédiction vers le haut ou vers le bas :
-
➕ Une variable qui augmente la prédiction agit vers la droite (rouge).
-
➖ Une variable qui diminue la prédiction agit vers la gauche (bleu).
-
-
Le résultat final est la prédiction du modèle pour l’individu.
Visualisation interactive
Le force_plot
s’affiche généralement dans un format interactif JavaScript (nécessite shap.initjs()
), ce qui permet d’explorer les contributions de chaque variable de façon dynamique.
Fonctions :
-
shap.force_plot()
La fonction shap.force_plot() est utilisée pour afficher une visualisation interactive des valeurs de Shapley pour une seule prédiction. Contrairement à shap.summary_plot(), qui présente l'impact global des caractéristiques sur l'ensemble des prédictions, shap.force_plot() se concentre sur l'explication d'une prédiction individuelle. Il montre comment les différentes caractéristiques contribuent à la prédiction pour un exemple spécifique en affichant les valeurs de Shapley pour chaque caractéristique et en visualisant l'impact de celles-ci de manière visuelle.
Importation :
import shap
Attributs :
Paramètre Type Valeur par défaut Description shap_values array-like None Les valeurs de Shapley calculées pour une instance spécifique ou un ensemble d'instances. Ce paramètre représente l'impact de chaque caractéristique sur la prédiction. features array-like, pandas DataFrame None Les données d'entrée qui ont été utilisées pour calculer les valeurs de Shapley. Ce paramètre peut être un tableau numpy ou un DataFrame pandas représentant les caractéristiques du jeu de données. matplotlib bool True Si `True`, la visualisation sera rendue via matplotlib. Si `False`, un affichage interactif sera utilisé (par exemple, dans un notebook Jupyter). show bool True Si `True`, la fonction affichera la visualisation immédiatement. Exemple de code :
import shap import xgboost 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 XGBoost model = xgboost.XGBClassifier() model.fit(X_train, y_train) # Créer un explainer SHAP pour le modèle XGBoost explainer = shap.TreeExplainer(model) # Calculer les valeurs SHAP pour un échantillon spécifique (par exemple, la première ligne du test) shap_values = explainer.shap_values(X_test) # Visualiser l'impact des caractéristiques sur la prédiction pour l'exemple donné shap.force_plot(shap_values[0], X_test[0], matplotlib=True)
Explication du code :
-
Données et modèle : Le jeu de données Iris est chargé et divisé en ensembles d'entraînement et de test. Un modèle XGBoost est ensuite entraîné sur les données d'entraînement.
-
Création de l'explainer : Un objet
TreeExplainer
est créé pour expliquer les prédictions du modèle XGBoost. Ce modèle permet de calculer les valeurs de Shapley qui expliquent comment chaque caractéristique contribue à la prédiction du modèle. -
Calcul des valeurs SHAP : Les valeurs de Shapley pour l'échantillon spécifique (la première instance du jeu de test ici) sont calculées avec
explainer.shap_values()
. Ces valeurs indiquent l'impact de chaque caractéristique sur la prédiction pour cet échantillon. -
Visualisation : La fonction
shap.force_plot()
est utilisée pour afficher l'impact de chaque caractéristique sur la prédiction pour cette instance spécifique. L'argumentmatplotlib=True
permet d'afficher la visualisation via matplotlib. Si vous travaillez dans un environnement Jupyter, vous pouvez également obtenir une visualisation interactive en définissantmatplotlib=False
.
Sortie attendue :
-
Un graphique interactif montrant l'impact des différentes caractéristiques sur la prédiction du modèle pour une instance spécifique. Ce graphique illustre comment chaque caractéristique influence la prédiction, qu'elle augmente ou diminue la probabilité de la classe prédite. Chaque caractéristique a une valeur de Shapley associée, et le graphique peut être visualisé comme un graphique de force où les contributions positives et négatives sont représentées par des flèches.
Applications :
-
Interprétation des prédictions individuelles :
shap.force_plot()
est particulièrement utile pour comprendre pourquoi un modèle a fait une certaine prédiction pour un échantillon spécifique. Cela peut être essentiel pour la validation du modèle et pour garantir que ses décisions sont expliquables. -
Analyse des biais du modèle : En utilisant cette fonction, vous pouvez vérifier comment les différentes caractéristiques influencent les prédictions et si le modèle prend des décisions biaisées en fonction de certaines caractéristiques.
-
Amélioration de la transparence du modèle : Comme
shap.summary_plot()
,shap.force_plot()
permet d'augmenter la transparence des décisions du modèle, ce qui est particulièrement important dans des secteurs où l'explicabilité des modèles est cruciale.
-