Explainer à noyau SHAP

IA explicable en Python

Fouad Trad

Machine Learning Engineer

Explainer à noyau SHAP

 

  • Calcule des valeurs SHAP pour tout modèle

    • k-plus proches voisins
    • Réseaux de neurones
    • Modèles arborés
  • Plus lent que les explainers spécifiques

Image montrant que les explainers SHAP se divisent entre des explainers généraux applicables à tout modèle et des explainers spécifiques optimisés pour certains types de modèles.

IA explicable en Python

Maladie cardiaque

age sex chest_pain_type blood_pressure ecg_results thalassemia target
52 1 0 125 1 3 0
53 1 0 140 0 3 0
70 1 0 145 1 3 0
61 1 0 148 1 3 0
62 0 0 138 1 2 0

 

mlp_clf: perceptron multicouche prédisant le risque de maladie cardiaque

IA explicable en Python

Frais d’assurance

age gender bmi children smoker charges
19 0 27.900 0 1 16884.92
18 1 33.770 1 0 1725.55
28 1 33.000 3 0 4449.46
33 1 22.705 0 0 21984.47
32 1 28.880 0 0 3866.85

 

mlp_reg: perceptron multicouche prédisant les frais d’assurance

IA explicable en Python

Créer des explainers à noyau

MLPRegressor
import shap


explainer = shap.KernelExplainer( # Fonction de prédiction du modèle, # Résumé représentatif du jeu de données )
MLPClassifier
import shap


explainer = shap.KernelExplainer( # Fonction de prédiction du modèle, # Résumé représentatif du jeu de données )
IA explicable en Python

Créer des explainers à noyau

MLPRegressor
import shap

explainer = shap.KernelExplainer(
  mlp_reg.predict, 
  # Résumé représentatif du jeu de données
)


MLPClassifier
import shap

explainer = shap.KernelExplainer(
  mlp_clf.predict_proba, 
  # Résumé représentatif du jeu de données
)


IA explicable en Python

Créer des explainers à noyau

MLPRegressor
import shap

explainer = shap.KernelExplainer(
  mlp_reg.predict, 
  shap.kmeans(X, 10)
)


shap_values_reg = explainer.shap_values(X)
MLPClassifier
import shap

explainer = shap.KernelExplainer(
  mlp_clf.predict_proba, 
  shap.kmeans(X, 10)
)


shap_values_cls = explainer.shap_values(X)
IA explicable en Python

Importance des variables

MLPRegressor
mean_reg = np.abs(shap_values_reg).mean(axis=0)

plt.bar(X.columns, mean_reg)

Image montrant un diagramme en barres des importances des variables pour la régression, indiquant que le tabagisme et l’âge sont les facteurs les plus influents pour prédire les frais.

MLPClassifier
mean_cls = np.abs(shap_values_cls[:,:,1]).mean(axis=0)

plt.bar(X.columns, mean_cls)

Image montrant un diagramme en barres des importances des variables pour la classification, indiquant que le type de douleur thoracique et la thalassémie sont les facteurs les plus influents pour prédire les frais.

IA explicable en Python

Comparaison avec des approches spécifiques au modèle

Régression linéaire
plt.bar(X.columns, np.abs(lin_reg.coef_))

Image montrant un diagramme en barres des importances des variables avec une régression linéaire, indiquant que le tabagisme et l’âge sont les facteurs les plus influents pour prédire les frais.

Régression logistique
plt.bar(X.columns, np.abs(log_reg.coef_[0]))

Image montrant un diagramme en barres des importances des variables pour la classification, indiquant que le type de douleur thoracique est le facteur le plus influent pour prédire les frais.

IA explicable en Python

Passons à la pratique !

IA explicable en Python

Preparing Video For Download...