Explicabilité des modèles¶
Au cours du processus d’entraînement, les modèles de machine learning déduisent les relations entre les entrées et les sorties, plutôt que d’exiger que ces relations soient explicitement énoncées au préalable. Cela permet aux techniques de ML de faire face à des scénarios complexes impliquant de nombreuses variables sans préparation approfondie, en particulier lorsque les facteurs causaux d’un résultat particulier sont complexes ou peu clairs, mais que le modèle résultant peut être une sorte de boîte noire. Si un modèle est sous-performant, il peut être difficile de comprendre pourquoi et, en outre, comment améliorer ses performances. Le modèle de la boîte noire peut également masquer des préjugés implicites et ne pas parvenir à établir des raisons claires pour les décisions. Les secteurs qui disposent de réglementations concernant des systèmes fiables, comme la finance et la santé, pourraient avoir besoin de preuves plus solides que le modèle produit les bons résultats pour les bonnes raisons.
Pour aider à répondre à ces préoccupations, le Snowflake Model Registry comprend une fonction d’explicabilité basée sur des valeurs de Shapley. Les valeurs de Shapley sont un moyen d’attribuer la sortie d’un modèle de machine learning à ses caractéristiques d’entrée. En considérant toutes les combinaisons possibles de caractéristiques, les valeurs de Shapley mesurent la contribution marginale moyenne de chaque caractéristique à la prédiction du modèle. Cette approche garantit l’équité dans l’attribution de l’importance et fournit une base solide pour la compréhension de modèles complexes. Bien que nécessitant beaucoup de calculs, les informations obtenues à partir des valeurs de Shapley sont inestimables pour l’interprétabilité et le débogage des modèles.
Par exemple, supposons que nous ayons un modèle permettant de prédire le prix d’une maison, qui a été formé en fonction de la taille de la maison, de son emplacement, du nombre de chambres et de la présence ou non d’animaux domestiques. Dans cet exemple, le prix moyen des maisons est de 100 000 $ et la prédiction finale du modèle était de 250 000 $ pour une maison de 2 000 pieds carrés, en bord de mer, avec trois chambres et n’autorisant pas les animaux. Chacune de ces valeurs de caractéristiques peut contribuer à la prédiction finale du modèle, comme indiqué dans le tableau suivant.
Fonctionnalité |
Valeur |
Contribution vs. une maison moyenne |
---|---|---|
Taille |
2000 |
+$50,000 |
Emplacement |
Au bord de la plage |
+$75,000 |
Chambres |
3 |
+$50,000 |
Animaux de compagnie |
Non |
-$25,000 |
Ensemble, ces contributions expliquent pourquoi cette maison en particulier est vendue 150 000 $ de plus qu’une maison moyenne. Les valeurs de Shapley peuvent affecter le résultat final de manière positive ou négative, ce qui entraîne une différence de résultats par rapport à une moyenne. Dans cet exemple, il est moins souhaitable de vivre dans une maison où les animaux domestiques ne sont pas autorisés, de sorte que la contribution de cette valeur caractéristique est de -25 000 $.
La valeur moyenne est calculée à l’aide de données de base, un échantillon représentatif de l’ensemble de données complet. Pour plus d’informations, voir Modèles de journalisation avec données d’arrière-plan.
Types de modèles pris en charge¶
Cette version préliminaire prend en charge les paquets de modèles natifs Python suivants.
XGBoost
CatBoost
LightGBM
Scikit-learn
Les classes de modélisation ML de Snowpark suivantes depuis snowflake.ml.modeling
sont prises en charge.
XGBoost
LightGBM
Scikit-learn (sauf modèles de pipeline)
L’explicabilité est disponible par défaut pour les modèles ci-dessus enregistrés à l’aide de Snowpark ML 1.6.2 et versions ultérieures. L’implémentation utilise la bibliothèque SHAP.
Modèles de journalisation avec données d’arrière-plan¶
Les données d’arrière-plan, généralement un échantillon de données représentatives, constituent un ingrédient important des explications basées sur la valeur de Shapley. Les données d’arrière-plan donnent à l’algorithme de Shapley une idée de ce à quoi ressemblent les entrées « moyennes » avec lesquelles il peut comparer les explications individuelles.
La valeur de Shapley est calculée en confrontant systématiquement les entités d’entrée et en les remplaçant par les données d’arrière-plan. Étant donné qu’elle signale un écart par rapport aux données d’arrière-plan, il est important d’utiliser des données d’arrière-plan cohérentes lors de la comparaison des valeurs Shapley provenant de plusieurs ensembles de données.
Certains modèles basés sur des arborescences codent implicitement les données d’arrière-plan dans leur structure pendant l’entraînement et peuvent ne pas nécessiter de données d’arrière-plan explicites. Cependant, la plupart des modèles nécessitent que des données d’arrière-plan soient fournies séparément pour des explications utiles, et tous les modèles (y compris les modèles basés sur des arborescences) peuvent être expliqués plus précisément si vous fournissez des données d’arrière-plan.
Vous pouvez fournir jusqu’à 1 000 lignes de données d’arrière-plan lors de la journalisation d’un modèle en le transmettant dans le paramètre sample_input_data
, comme indiqué ci-dessous.
Note
Si le modèle est d’un type qui nécessite des données d’arrière-plan explicites pour calculer les valeurs de Shapley, l’explicabilité ne peut pas être activée sans ces données.
mv = reg.log_model(
catboost_model,
model_name="diamond_catboost_explain_enabled",
version_name="explain_v0",
conda_dependencies=["snowflake-ml-python"],
sample_input_data = xs, # xs will be used as background data
)
Vous pouvez également fournir des données d’arrière-plan lors de la journalisation du modèle avec une signature, comme indiqué ci-dessous.
mv = reg.log_model(
catboost_model,
model_name="diamond_catboost_explain_enabled",
version_name="explain_v0",
conda_dependencies=["snowflake-ml-python"],
signatures={"predict": predict_signature, "predict_proba": predict_proba_signature},
sample_input_data = xs, # xs will be used as background data
options= {"enable_explainability": True} # you will need to set this flag in order to pass both signatures and background data
)
Récupération des valeurs d’explicabilité¶
Les modèles avec explicabilité ont une méthode nommée explain
qui renvoie les valeurs de Shapley pour les fonctionnalités du modèle.
Étant donné que les valeurs de Shapley sont des explications de prédictions faites à partir d’entrées spécifiques, vous devez transmettre les données d’entrée à explain
pour générer les prédictions à expliquer.
L’objet de version du modèle Snowflake aura une méthode appelée explain
, et vous l’appelez en utilisant ModelVersion.run
en Python.
reg = Registry(...)
mv = reg.get_model("Explainable_Catboost_Model").default
explanations = mv.run(input_data, function_name="explain")
Voici un exemple de récupération de l’explication dans SQL.
WITH MV_ALIAS AS MODEL DATABASE.SCHEMA.DIAMOND_CATBOOST_MODEL VERSION EXPLAIN_V0
SELECT *,
FROM DATABASE.SCHEMA.DIAMOND_DATA,
TABLE(MV_ALIAS!EXPLAIN(CUT, COLOR, CLARITY, CARAT, DEPTH, TABLE_PCT, X, Y, Z));
Important
Si vous utilisez snowflake-ml-python
avant la version 1.7.0, vous pouvez recevoir l’erreur UnicodeDecodeError: 'utf-8' codec can't decode byte
avec des modèles XGBoost. Cela est dû à une incompatibilité entre la version 0.42.1 de la bibliothèque SHAP et la dernière version XGBoost (2.1.1) prise en charge par Snowflake. Si vous ne pouvez pas effectuer de mise à niveau snowflake-ml-python
vers la version 1.7.0 ou ultérieure, rétrogradez la version XGBoost 2.0.3 et enregistrez le modèle avec l’option relax_version
définie sur False
, comme le montre l’exemple suivant.
mv_new = reg.log_model(
model,
model_name="model_with_explain_enabled",
version_name="explain_v0",
conda_dependencies=["snowflake-ml-python"],
sample_input_data = xs,
options={"relax_version": False}
)
Ajout d’explicabilité aux modèles existants¶
Les modèles enregistrés dans le registre à l’aide d’une version de Snowpark ML antérieure à la version 1.6.2 ne disposent pas de la fonctionnalité d’explicabilité. Les versions de modèle étant immuables, vous devez créer une nouvelle version de modèle pour ajouter de l’explicabilité à un modèle existant. Vous pouvez utiliser ModelVersion.load
pour récupérer l’objet Python représentant l’implémentation du modèle, puis l’enregistrer dans le registre en tant que nouvelle version du modèle. Assurez-vous de transmettre vos données d’arrière-plan comme sample_input_data
. Cette approche est illustrée ci-dessous.
Important
L’environnement Python dans lequel vous chargez le modèle doit être exactement le même (c’est-à-dire la même version de Python et de toutes les bibliothèques) que l’environnement dans lequel le modèle est déployé. Pour plus de détails, voir Chargement d’une version de modèle.
mv_old = reg.get_model("model_without_explain_enabled").default
model = mv_old.load()
mv_new = reg.log_model(
model,
model_name="model_with_explain_enabled",
version_name="explain_v0",
conda_dependencies=["snowflake-ml-python"],
sample_input_data = xs
)
Modèles de journalisation sans explicabilité¶
L’explicabilité est activée par défaut si le modèle la prend en charge. Pour enregistrer une version de modèle dans le registre sans explication, passez False
pour l’option enable_explainability
lors de la journalisation du modèle, comme indiqué ici.
mv = reg.log_model(
catboost_model,
model_name="diamond_catboost_explain_enabled",
version_name="explain_v0",
conda_dependencies=["snowflake-ml-python"],
sample_input_data = xs,
options= {"enable_explainability": False}
)