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


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 :


Limites

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 :

    1. 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.

    2. 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 fonction predict_proba est utilisée car elle renvoie les probabilités des différentes classes (pour un problème de classification multiclasse).

    3. 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.

    4. 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.