Accéder au contenu principal

Introduction aux valeurs SHAP et à l'interprétabilité de l'apprentissage automatique

Les modèles d'apprentissage automatique sont puissants mais difficiles à interpréter. Cependant, les valeurs SHAP peuvent vous aider à comprendre l'impact des caractéristiques du modèle sur les prédictions.
Actualisé 4 oct. 2024  · 9 min de lecture

Les modèles d'apprentissage automatique deviennent de plus en plus complexes, puissants et capables de faire des prédictions précises. Cependant, comme ces modèles deviennent des "boîtes noires", il est encore plus difficile de comprendre comment ils sont parvenus à ces prédictions. C'est pourquoi on s'intéresse de plus en plus à l'interprétabilité et à l'explicabilité de l'apprentissage automatique.

Par exemple, vous avez demandé un prêt à une banque, mais votre demande a été rejetée. Vous souhaitez connaître la raison du rejet, mais l'agent du service clientèle vous répond qu'un algorithme a rejeté la demande et qu'il n'est pas en mesure d'en déterminer la raison. C'est frustrant, n'est-ce pas ? Vous avez droit à une explication pour la décision qui vous concerne. C'est pourquoi les entreprises s'efforcent de rendre leurs modèles d'apprentissage automatique plus transparents et compréhensibles.

L'un des outils les plus prometteurs pour ce processus est la valeur SHAP, qui mesure la contribution de chaque caractéristique (comme le revenu, l'âge, le score de crédit, etc.) à la prédiction du modèle. Les valeurs SHAP peuvent vous aider à déterminer quelles sont les caractéristiques les plus importantes pour le modèle et comment elles affectent le résultat.

Dans ce tutoriel, nous allons découvrir les valeurs SHAP et leur rôle dans l'interprétation des modèles d'apprentissage automatique. Nous utiliserons également le paquetage Python Shap pour créer et analyser différents graphiques permettant d'interpréter les modèles.

Que sont les valeurs SHAP ?

Les valeurs SHAP (SHapley Additive exPlanations) permettent d'expliquer les résultats d'un modèle d'apprentissage automatique. Il utilise une approche théorique des jeux qui mesure la contribution de chaque joueur au résultat final. Dans l'apprentissage automatique, chaque caractéristique se voit attribuer une valeur d'importance représentant sa contribution au résultat du modèle.

Les valeurs SHAP montrent l'influence de chaque caractéristique sur chaque prédiction finale, l'importance de chaque caractéristique par rapport aux autres et la dépendance du modèle à l'égard de l'interaction entre les caractéristiques.

Vous souhaitez vous lancer dans l'IA générative ?

Apprenez à travailler avec des LLM en Python directement dans votre navigateur

Commencez maintenant

Valeurs SHAP dans l'apprentissage automatique 

Les valeurs SHAP sont un moyen courant d'obtenir une explication cohérente et objective de l'impact de chaque caractéristique sur la prédiction du modèle.

Les valeurs SHAP sont basées sur la théorie des jeux et attribuent une valeur d'importance à chaque caractéristique d'un modèle. Les caractéristiques ayant des valeurs SHAP positives ont un impact positif sur la prédiction, tandis que celles ayant des valeurs négatives ont un impact négatif. L'ampleur est une mesure de l'importance de l'effet.

Les valeurs SHAP sont indépendantes du modèle, ce qui signifie qu'elles peuvent être utilisées pour interpréter n'importe quel modèle d'apprentissage automatique, y compris :

  • Régression linéaire
  • Arbres de décision
  • Forêts aléatoires
  • Modèles de renforcement du gradient
  • Réseaux neuronaux

Les propriétés des valeurs SHAP

Les valeurs SHAP ont plusieurs propriétés utiles qui les rendent efficaces pour l'interprétation des modèles :

Additivité

Les valeurs SHAP sont additives, ce qui signifie que la contribution de chaque caractéristique à la prédiction finale peut être calculée indépendamment, puis additionnée. Cette propriété permet un calcul efficace des valeurs SHAP, même pour les ensembles de données à haute dimension.

Précision locale

Les valeurs SHAP correspondent à la différence entre la sortie attendue du modèle et la sortie réelle pour une entrée donnée. Cela signifie que les valeurs SHAP fournissent une interprétation précise et locale de la prédiction du modèle pour une entrée donnée.

Absence

Les valeurs SHAP sont nulles pour les caractéristiques manquantes ou non pertinentes pour une prédiction. Cela rend les valeurs SHAP résistantes aux données manquantes et garantit que les caractéristiques non pertinentes ne faussent pas l'interprétation.

Cohérence

Les valeurs SHAP ne changent pas lorsque le modèle change, sauf si la contribution d'un élément change. Cela signifie que les valeurs SHAP fournissent une interprétation cohérente du comportement du modèle, même lorsque l'architecture ou les paramètres du modèle changent.

Dans l'ensemble, les valeurs SHAP constituent un moyen cohérent et objectif de comprendre comment un modèle d'apprentissage automatique fait des prédictions et quelles sont les caractéristiques qui ont le plus d'influence.

Comment implémenter les valeurs SHAP en Python

Dans cette section, nous calculerons les valeurs SHAP et visualiserons l'importance des caractéristiques, la dépendance des caractéristiques, la force et le diagramme de décision.

Exécutez et modifiez le code de ce tutoriel en ligne

Exécuter le code

Mise en place

Installez SHAP en utilisant PyPI ou conda-forge:

pip install shap

ou

conda install -c conda-forge shap

Charger le taux d'attrition des clients des télécommunications. L'ensemble de données semble propre et la colonne cible est "Churn".

import shap
import pandas as pd
import numpy as np
shap.initjs()

customer = pd.read_csv("data/customer_churn.csv")
customer.head()

Formation et évaluation du modèle

  1. Créez X et y à l'aide d'une colonne cible et divisez l'ensemble de données en train et test.
  2. Entraînez le classificateur Random Forest sur l'ensemble d'apprentissage.
  3. Faites des prédictions à l'aide d'un ensemble de tests.
  4. Affichez le rapport de classification.
from sklearn.metrics import classification_report
from sklearn.model_selection import train_test_split

X = customer.drop("Churn", axis=1) # Independent variables
y = customer.Churn # Dependent variable

# Split into train and test 
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1)

# Train a machine learning model
from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier()
clf.fit(X_train, y_train)

# Make prediction on the testing data
y_pred = clf.predict(X_test)

# Classification Report
print(classification_report(y_pred, y_test))

Le modèle s'est avéré plus performant pour l'étiquette "0" que pour l'étiquette "1" en raison d'un ensemble de données déséquilibré. Dans l'ensemble, il s'agit d'un résultat acceptable, avec une précision de 94 %.

              precision    recall  f1-score   support

           0       0.97      0.96      0.97       815
           1       0.79      0.82      0.80       130

    accuracy                           0.94       945
   macro avg       0.88      0.89      0.88       945
weighted avg       0.94      0.94      0.94       945

Consultez notre guide Classification dans l'apprentissage automatique pour en savoir plus sur la classification dans l'apprentissage automatique avec des exemples Python.

Mise en place de SHAP Explainer

Voici maintenant l'explication du modèle.

Nous allons d'abord créer un objet explicatif en fournissant un modèle de classification par forêt aléatoire, puis calculer la valeur SHAP à l'aide d'un ensemble de tests.

explainer = shap.Explainer(clf)
shap_values = explainer.shap_values(X_test)

Résumé de l'intrigue

Affichez le site summary_plot en utilisant les valeurs SHAP et le jeu d'essai.

shap.summary_plot(shap_values, X_test)

Le graphique récapitulatif montre l'importance de chaque caractéristique dans le modèle. Les résultats montrent que le "statut", les "plaintes" et la "fréquence d'utilisation" jouent un rôle majeur dans la détermination des résultats.

Affichez le site summary_plot de l'étiquette "0".

shap.summary_plot(shap_values[0], X_test)
  • L'axe des ordonnées indique les noms des caractéristiques par ordre d'importance, de haut en bas.
  • L'axe X représente la valeur SHAP, qui indique le degré de changement dans le logarithme des cotes.
  • La couleur de chaque point du graphique représente la valeur de l'élément correspondant, le rouge indiquant les valeurs élevées et le bleu les valeurs faibles.
  • Chaque point représente une ligne de données de l'ensemble de données original.

Si vous examinez la caractéristique "Plaintes", vous verrez qu'elle est principalement élevée avec une valeur SHAP négative. Cela signifie qu'un nombre élevé de plaintes a tendance à avoir un effet négatif sur la production.

Remarque: pour l'étiquette "1", la visualisation sera inversée.

Graphique de dépendance

Visualisez le site dependence_plot entre la caractéristique "Durée de l'abonnement" et "Âge".

shap.dependence_plot("Subscription Length", shap_values[0], X_test,interaction_index="Age")

Un diagramme de dépendance est un type de diagramme de dispersion qui montre comment les prédictions d'un modèle sont affectées par une caractéristique spécifique (Longueur d'abonnement). En moyenne, les durées d'abonnement ont un effet positif sur le modèle.

Tracé des forces

Nous examinerons le premier échantillon de l'ensemble de tests afin de déterminer les caractéristiques qui ont contribué au résultat "0". Pour ce faire, nous utiliserons un diagramme de force et fournirons la valeur attendue, la valeur SHAP et l'échantillon d'essai.

shap.plots.force(explainer.expected_value[0], shap_values[0][0,:], X_test.iloc[0, :], matplotlib = True)

Nous pouvons clairement voir que l'absence de plaintes et d'échecs d'appels a contribué à une perte négative de clients.

Examinons les échantillons de désabonnement avec l'étiquette "1".

shap.plots.force(explainer.expected_value[1], shap_values[1][6, :], X_test.iloc[6, :],matplotlib = True)

Vous pouvez voir toutes les caractéristiques avec la valeur et l'ampleur qui ont contribué à une perte de clients. Il semble qu'une seule plainte non résolue puisse coûter cher à une entreprise de télécommunications.

Graphique de décision

Nous allons maintenant afficher le site decision_plot. Il représente visuellement les décisions du modèle en cartographiant les valeurs SHAP cumulées pour chaque prédiction.

shap.decision_plot(explainer.expected_value[1], shap_values[1], X_test.columns)

Chaque ligne tracée sur le diagramme de décision indique l'importance de la contribution des caractéristiques individuelles à la prédiction d'un modèle unique, expliquant ainsi quelles valeurs de caractéristiques ont poussé à la prédiction.

Note: Le diagramme de décision de l'étiquette cible "1" est incliné vers "1".

Affichez le diagramme de décision pour l'étiquette cible "0".

shap.decision_plot(explainer.expected_value[0], shap_values[0], X_test.columns)

Car le diagramme de décision est incliné vers "0".

Application des valeurs SHAP

Outre l'interprétabilité et l'explicabilité de l'apprentissage automatique, la valeur SHAP peut être utilisée pour :

  1. Débogage du modèle. En examinant les valeurs SHAP, nous pouvons identifier les biais ou les valeurs aberrantes dans les données qui peuvent entraîner des erreurs dans le modèle.
  2. Importance de la fonctionnalité. L'identification et la suppression des éléments à faible impact permettent de créer un modèle plus optimisé.
  3. Explications sur l'ancrage. Nous pouvons utiliser les valeurs SHAP pour expliquer les prédictions individuelles en mettant en évidence les caractéristiques essentielles à l'origine de cette prédiction. Elle peut aider les utilisateurs à comprendre les décisions d'un modèle et à s'y fier.
  4. Résumés des modèles. Il peut fournir un résumé global d'un modèle sous la forme d'un graphique récapitulatif des valeurs SHAP. Il donne un aperçu des caractéristiques les plus importantes de l'ensemble des données.
  5. Détecter les biais. L'analyse de la valeur du SHAP permet d'identifier si certaines caractéristiques affectent de manière disproportionnée des groupes particuliers. Il permet de détecter et de réduire la discrimination dans le modèle.
  6. L'audit d'équité. Il peut être utilisé pour évaluer l'équité et les implications éthiques d'un modèle.
  7. Approbation réglementaire. Les valeurs SHAP peuvent aider à obtenir l'approbation réglementaire en expliquant les décisions du modèle.

Conclusion

Nous avons étudié les valeurs SHAP et la manière dont nous pouvons les utiliser pour fournir une interprétabilité aux modèles d'apprentissage automatique. S'il est essentiel de disposer d'un modèle précis, les entreprises doivent aller au-delà de la précision et se concentrer sur l'interprétabilité et la transparence pour gagner la confiance des utilisateurs et des régulateurs.

Pouvoir expliquer pourquoi un modèle a fait une prédiction particulière permet de débusquer les biais potentiels, d'identifier les problèmes de données et de justifier les décisions du modèle.

Si vous êtes novice en matière d'apprentissage automatique et que vous cherchez à vous préparer à un emploi, envisagez de suivre le parcours de carrière Machine Learning Scientist with Python (Scientifique en apprentissage automatique avec Python). Ce programme vous aidera à maîtriser les compétences Python nécessaires pour devenir un scientifique spécialisé dans l'apprentissage automatique et décrocher un emploi.

Obtenez une certification de haut niveau en matière d'IA

Démontrez que vous pouvez utiliser l'IA de manière efficace et responsable.

Abid Ali Awan's photo
Author
Abid Ali Awan
LinkedIn
Twitter

En tant que data scientist certifié, je suis passionné par l'utilisation des technologies de pointe pour créer des applications innovantes d'apprentissage automatique. Avec une solide expérience en reconnaissance vocale, en analyse de données et en reporting, en MLOps, en IA conversationnelle et en NLP, j'ai affiné mes compétences dans le développement de systèmes intelligents qui peuvent avoir un impact réel. En plus de mon expertise technique, je suis également un communicateur compétent, doué pour distiller des concepts complexes dans un langage clair et concis. En conséquence, je suis devenu un blogueur recherché dans le domaine de la science des données, partageant mes idées et mes expériences avec une communauté grandissante de professionnels des données. Actuellement, je me concentre sur la création et l'édition de contenu, en travaillant avec de grands modèles linguistiques pour développer un contenu puissant et attrayant qui peut aider les entreprises et les particuliers à tirer le meilleur parti de leurs données.

Sujets