Valeurs SHAP : importance globale et locale des caractéristiques
Vous calculerez les valeurs SHAP pour un modèle de gradient boosting, représenterez des synthèses en essaim d’abeilles et en barres, puis expliquerez une prédiction à une personne non technicienne.
Valeurs SHAP : importance globale et locale des caractéristiques est une leçon Machine Learning Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Machine Learning Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Machine Learning Academy comprend 4 leçons au total.
Pourquoi l’explicabilité des modèles est importante
L’explicabilité est la capacité à comprendre pourquoi un modèle a produit une prédiction donnée. Dans les domaines à forts enjeux comme le crédit, la santé et le recrutement, les autorités de réglementation et les utilisateurs exigent des explications, et pas seulement des prédictions exactes. SHAP (SHapley Additive exPlanations) fournit un cadre fondé sur des principes mathématiques et issu de la théorie des jeux coopératifs pour fournir ces explications, quel que soit le modèle.
Valeurs de Shapley : l’origine dans la théorie des jeux
Les valeurs SHAP s’inspirent des valeurs de Shapley de la théorie des jeux coopératifs, dans laquelle les joueurs (les variables) collaborent pour produire un résultat (la prédiction). Chaque variable reçoit une part équitable du mérite, calculée en faisant la moyenne de sa contribution marginale sur tous les ordres possibles des variables. SHAP est ainsi la seule méthode d’attribution additive qui respecte les axiomes d’efficacité, de symétrie, du joueur fictif et d’additivité.
Installation et importation de SHAP
La bibliothèque shap prend en charge les modèles arborescents, les réseaux neuronaux et tout modèle boîte noire. Installez-la avec pip install shap, puis importez-la avec votre modèle entraîné. Les explicateurs SHAP tiennent compte du type de modèle : TreeExplainer fournit, pour le gradient boosting et les forêts aléatoires, des valeurs exactes en temps O(T·D²), bien plus rapidement que le calcul naïf des valeurs de Shapley en temps exponentiel.
import shap
import xgboost as xgb
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
data = load_breast_cancer()
X_train, X_test, y_train, y_test = train_test_split(
data.data, data.target, test_size=0.2, random_state=42
)
model = xgb.XGBClassifier(n_estimators=100, use_label_encoder=False, eval_metric='logloss')
model.fit(X_train, y_train)
explainer = shap.TreeExplainer(model)Calcul des valeurs SHAP pour l’ensemble de test
Appelez explainer.shap_values(X_test) pour produire une matrice dans laquelle chaque ligne correspond à un échantillon et chaque colonne à une variable. La valeur SHAP de la variable j dans l’échantillon i représente la contribution de la variable j pour éloigner la prédiction de la valeur de base attendue. Les valeurs positives orientent la prédiction vers la classe positive ; les valeurs négatives l’orientent vers la classe négative.
shap_values = explainer.shap_values(X_test)
print('SHAP values shape:', shap_values.shape) # (n_samples, n_features)
print('Base value (expected prediction):', explainer.expected_value)
print('First sample SHAP values:', shap_values[0])Importance globale : diagramme en barres
L’importance globale des variables résume les variables qui comptent le plus parmi toutes les prédictions. Le summary_plot SHAP en mode barres affiche la moyenne de la valeur SHAP absolue pour chaque variable et les classe de la plus importante à la moins importante. Il remplace l’importance des variables intégrée, trop naïve, qui ne compte que le nombre de séparations et favorise les variables présentant un grand nombre de modalités.
import matplotlib.pyplot as plt
# Bar plot: mean |SHAP| per feature
shap.summary_plot(shap_values, X_test,
feature_names=data.feature_names,
plot_type='bar')
plt.tight_layout()
plt.savefig('shap_bar.png', dpi=150)Importance globale : diagramme en essaim
Le diagramme en essaim (le summary_plot par défaut) est plus riche qu’un diagramme en barres : chaque point représente un échantillon et sa couleur dépend de la valeur de la variable (rouge = élevée, bleu = faible). L’axe des abscisses indique la valeur SHAP ; vous pouvez donc voir non seulement quelles variables comptent, mais aussi dans quelle direction une valeur élevée ou faible de la variable oriente les prédictions. Cela révèle en un coup d’œil les effets non linéaires et les effets d’interaction.
shap.summary_plot(shap_values, X_test,
feature_names=data.feature_names)
# Dots to the right = positive contribution to predicted class
# Red dots far right = high feature value strongly increases predictionExplication locale : diagramme de force
Un diagramme de force explique une prédiction unique. Il affiche la valeur de base à gauche et la prédiction finale à droite, les variables étant représentées par des flèches qui augmentent la sortie (rouge) ou la diminuent (bleu). La largeur de chaque flèche est proportionnelle à la valeur SHAP de la variable. C’est l’explication que vous présenteriez à un chargé de crédit demandant : « pourquoi cette demande a-t-elle été refusée ? »
# Explain the first test sample
i = 0
shap.force_plot(
explainer.expected_value,
shap_values[i],
X_test[i],
feature_names=data.feature_names,
matplotlib=True
)Explication locale : diagramme en cascade
Le diagramme en cascade est une solution plus lisible que le diagramme de force pour un échantillon unique. Il empile verticalement les contributions SHAP à partir de la valeur de base, en représentant la contribution de chaque variable par un segment de barre. Les contributions positives sont rouges et poussent vers le haut ; les contributions négatives sont bleues et tirent vers le bas. Le total final de l’empilement est égal à la sortie brute du modèle pour cet échantillon.
import shap
explanation = shap.Explanation(
values=shap_values[0],
base_values=explainer.expected_value,
data=X_test[0],
feature_names=list(data.feature_names)
)
shap.waterfall_plot(explanation)Diagramme de dépendance : interactions entre variables
Un diagramme de dépendance SHAP montre comment la valeur SHAP d’une variable évolue lorsque sa valeur brute change ; la couleur dépend d’une deuxième variable afin de révéler les interactions. Par exemple, représenter « worst radius » en le colorant selon « mean texture » permet de voir si l’effet du rayon dépend de la texture. Cette méthode va au-delà des diagrammes de dépendance partielle classiques en prenant naturellement en compte toutes les interactions entre variables.
shap.dependence_plot(
'worst radius', # feature to plot on x-axis
shap_values,
X_test,
feature_names=list(data.feature_names),
interaction_index='mean texture' # colour by this feature
)SHAP avec n’importe quel modèle : KernelExplainer
Lorsque le modèle est une boîte noire (SVM, réseau neuronal, n'importe quel estimateur sklearn), utilisez shap.KernelExplainer, qui approxime les valeurs de Shapley en échantillonnant des coalitions et en ajustant localement un modèle linéaire pondéré. Cette méthode est indépendante du modèle, mais plus lente que TreeExplainer. Fournissez un résumé des données de référence (par exemple, les centroïdes de K-Means) afin d'accélérer les calculs sur les grands jeux de données.
from sklearn.svm import SVC
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
import shap
import numpy as np
pipeline = Pipeline([('scaler', StandardScaler()), ('svm', SVC(probability=True))])
pipeline.fit(X_train, y_train)
# Use 50 background samples for speed
background = shap.kmeans(X_train, 50)
explainer_k = shap.KernelExplainer(pipeline.predict_proba, background)
shap_vals_k = explainer_k.shap_values(X_test[:10]) # Explain 10 samplesValidation : la somme des valeurs SHAP correspond à la prédiction
Une propriété essentielle de SHAP est l'efficacité : la somme de toutes les valeurs SHAP d'un échantillon, ajoutée à la valeur de base, doit être égale à la sortie brute du modèle. La vérification de cette cohérence confirme que l'explicateur fonctionne correctement. Toute divergence indique une incompatibilité entre le type d'explicateur et le modèle, ou des données de référence incorrectes.
import numpy as np
# For tree models, verify SHAP values sum to log-odds output
base = explainer.expected_value
for i in range(5):
shap_sum = shap_values[i].sum() + base
raw_pred = model.predict(X_test[i:i+1], output_margin=True)[0]
print(f'Sample {i}: SHAP sum={shap_sum:.4f}, model output={raw_pred:.4f}, match={abs(shap_sum-raw_pred)<1e-4}')Vérification rapide
Vérifiez votre compréhension des concepts d'apprentissage automatique avec Python présentés dans cette leçon.
Récapitulatif de la leçon
Dans cette leçon, vous avez appris que : les valeurs SHAP quantifient la contribution de chaque caractéristique à une prédiction à l'aide des valeurs de Shapley issues de la théorie des jeux, que les résumés globaux (graphiques en barres et en essaim d'abeilles) révèlent l'importance globale des caractéristiques et leur influence, et que les explications locales (graphiques en force et en cascade) justifient les prédictions individuelles. Nous allons maintenant étudier LIME comme autre approche d'explication indépendante du modèle.
Apprends Python avec un tuteur IA — gratuit
Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.
- Cours
- 30
- Leçons
- 120
Questions Fréquemment Posées
La leçon « Valeurs SHAP : importance globale et locale des caractéristiques » est-elle gratuite ?
Oui — le texte complet de « Valeurs SHAP : importance globale et locale des caractéristiques » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Machine Learning Academy, passe à CoddyKit PRO. Le cours Machine Learning Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Valeurs SHAP : importance globale et locale des caractéristiques » ?
Vous calculerez les valeurs SHAP pour un modèle de gradient boosting, représenterez des synthèses en essaim d’abeilles et en barres, puis expliquerez une prédiction à une personne non technicienne. Tu pratiques Machine Learning Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Machine Learning Academy ?
Aucune expérience préalable n'est requise. Machine Learning Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Valeurs SHAP : importance globale et locale des caractéristiques » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Machine Learning Academy ?
Oui. Chaque leçon Machine Learning Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Valeurs SHAP : importance globale et locale des caractéristiques
- LIME : explications locales interprétables et indépendantes du modèle
- Mesures d’équité : parité démographique et égalité des chances
- Stratégies d’atténuation des biais : prétraitement, traitement intégré et post-traitement