Erklärbarkeit des Modells¶
Während des Trainingsprozesses leiten Machine-Learning-Modelle Beziehungen zwischen Eingaben und Ausgaben ab, anstatt zu verlangen, dass diese Beziehungen im Voraus explizit angegeben werden. Auf diese Weise können die Techniken von ML komplizierte Szenarien mit vielen Variablen ohne umfangreichen Aufbau angehen, insbesondere wenn die kausalen Faktoren für ein bestimmtes Ergebnis komplex oder unklar sind, doch das resultierende Modell eine Art Blackbox sein kann. Wenn ein Modell unterdurchschnittlich abschneidet, kann es schwierig sein zu verstehen, wie man seine Leistung verbessert. Das Blackbox-Modell kann außerdem implizite Voreingenommenheiten verbergen und liefert mitunter keine klaren Gründe für Entscheidungen. Branchen, in denen es Vorschriften für vertrauenswürdige Systeme gibt, wie z. B. im Finanz- und Gesundheitswesen, verlangen möglicherweise einen stärkeren Nachweis, dass das Modell die richtigen Ergebnisse aus den richtigen Gründen liefert.
Um solche Bedenken auszuräumen, enthält das Snowflake Model Registry eine Erklärbarkeitsfunktion, die auf Shapley-Werten basiert. Shapley-Werte sind eine Möglichkeit, die Ausgabe eines Machine-Learning-Modells seinen Eingaben zuzuordnen. Indem alle möglichen Kombinationen von Features berücksichtigt werden, messen die Shapley-Werte den durchschnittlichen marginalen Beitrag jedes Features zur Vorhersage des Modells. Dieser Ansatz gewährleistet eine faire Zuweisung von Bedeutung und bietet eine solide Grundlage für das Verständnis komplexer Modelle. Shapley-Werte sind zwar rechenintensiv, aber die daraus gewonnenen Erkenntnisse sind von unschätzbarem Wert für die Modellinterpretation und das Debugging.
Nehmen wir zum Beispiel ein Modell zur Vorhersage eines Hauspreises. Das Modell wurde anhand der Größe, der Location, der Zimmeranzahl und der erlaubten Haustieren trainiert. In diesem Beispiel liegt der durchschnittliche Preis von Häusern bei 100.000 $. Die endgültige Vorhersage des Modells lag bei 250.000 $ für ein Haus, das 2.000 Quadratmeter groß ist, Strandlage und drei Zimmer hat und keine Haustiere erlaubt. Jeder dieser Feature-Werte kann zur endgültigen Vorhersage des Modells beitragen, wie in der folgenden Tabelle dargestellt.
Feature |
Wert |
Beitrag im Vergleich zu einem durchschnittlichen Haus |
---|---|---|
Größe |
2000 |
+$50,000 |
Location |
Strandlage |
+$75,000 |
Zimmer |
3 |
+$50,000 |
Haustiere |
Nein |
-$25,000 |
Zusammengenommen erklären diese Beiträge, warum der Preis für dieses Haus 150.000 $ über dem eines durchschnittlichen Hauses liegt. Shapley-Werte können sich positiv oder negativ auf das Endergebnis auswirken, was zu einer Differenz der Ergebnisse im Vergleich zu einem Durchschnitt führt. In diesem Beispiel ist es weniger erstrebenswert, in einem Haus zu leben, in dem keine Haustiere erlaubt sind, so dass der Beitrag dieses Feature-Wertes -25.000 $ niedriger liegt.
Der Durchschnittswert wird anhand von Hintergrunddaten, einem repräsentativen Beispiel des gesamten Datensatzes, berechnet. Weitere Informationen dazu finden Sie unter Protokolliermodelle mit Hintergrunddaten.
Unterstützte Modelltypen¶
Dieses Vorschau-Release unterstützt die folgenden Python-nativen Modellpakete.
XGBoost
CatBoost
LightGBM
Scikit-learn
Die folgenden Snowpark-ML-Modellklassen von snowflake.ml.modeling
werden unterstützt.
XGBoost
LightGBM
Scikit-learn (außer Pipeline Modelle)
Die Erklärbarkeit ist standardmäßig für die oben genannten Modelle verfügbar, die mit Snowpark-ML 1.6.2 und höher angemeldet wurden. Die Implementierung verwendet die SHAP-Bibliothek.
Protokolliermodelle mit Hintergrunddaten¶
Hintergrunddaten, in der Regel ein Beispiel für repräsentative Daten, sind ein wichtiger Bestandteil von Shapley-wertbasierten Erklärungen. Hintergrunddaten geben dem Shapley-Algorithmus eine Vorstellung davon, wie „durchschnittliche“ Eingaben aussehen, mit denen er individuelle Erklärungen vergleichen kann.
Der Shapley-Wert wird berechnet, indem die Eingaben der Features systematisch gestört und durch die Hintergrunddaten ersetzt werden. Da es die Abweichung von den Hintergrunddaten meldet, ist es wichtig, konsistente Hintergrunddaten zu verwenden, wenn Sie Shapley-Werte aus mehreren Datensätzen vergleichen.
Einige baumbasierte Modelle kodieren während des Trainings implizit Hintergrunddaten in ihrer Struktur und benötigen keine expliziten Hintergrunddaten. Die meisten Modelle erfordern jedoch für sinnvolle Erklärungen die gesonderte Bereitstellung von Hintergrunddaten. Alle Modelle (einschließlich der auf Strukturbäumen basierenden Modelle) können genauer erklärt werden, wenn Sie Hintergrunddaten bereitstellen.
Sie können bei der Protokollierung eines Modells bis zu 1.000 Zeilen an Hintergrunddaten bereitstellen, indem Sie es im sample_input_data
-Parameter übergeben, wie unten gezeigt.
Bemerkung
Wenn es sich beim Modell um einen Typ handelt, der explizite Hintergrunddaten zur Berechnung der Shapley-Werte erfordert, kann die Erklärbarkeit ohne diese Daten nicht ermöglicht werden.
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
)
Sie können auch Hintergrunddaten bereitstellen, während Sie das Modell mit einer Signatur protokollieren, wie unten gezeigt.
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
)
Abrufen von Erklärbarkeitswerten¶
Modelle mit Erklärbarkeit haben eine Methode namens explain
, die die Shapley-Werte für die Features des Modells zurückgibt.
Da es sich bei Shapley-Werten um Erklärungen von Vorhersagen handelt, die auf der Grundlage bestimmter Eingaben gemacht wurden, müssen Sie Eingabedaten an explain
weitergeben, um die zu erklärenden Vorhersagen zu generieren.
Das Snowflake-Modellversionsobjekt hat eine Methode namens explain
, die Sie in Python mit ModelVersion.run
aufrufen.
reg = Registry(...)
mv = reg.get_model("Explainable_Catboost_Model").default
explanations = mv.run(input_data, function_name="explain")
Im Folgenden finden Sie ein Beispiel für das Abrufen der Erklärung in 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));
Wichtig
Wenn Sie snowflake-ml-python
vor Version 1.7.0 verwenden, erhalten Sie möglicherweise den UnicodeDecodeError: 'utf-8' codec can't decode byte
Fehler mit XGBoost-Modellen. Dies ist auf eine Inkompatibilität zwischen der Version 0.42.1 der SHAP-Bibliothek und der neuesten von Snowflake unterstützten Version XGBoost (2.1.1) zurückzuführen. Wenn Sie snowflake-ml-python
nicht auf Version 1.7.0 oder höher aktualisieren können, führen Sie ein Downgrade der Version XGBoost auf 2.0.3 durch und protokollieren das Modell mit der relax_version
-Option auf False
, wie im folgenden Beispiel gezeigt.
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}
)
Höhere Erklärbarkeit für bestehende Modelle¶
Modelle, die mit einer Version von Snowpark ML älter als 1.6.2 in der Registrierung erfasst wurden, verfügen nicht über das Erklärbarkeit-Feature. Da Modellversionen unveränderlich sind, müssen Sie eine neue Modellversion erstellen, um für eine höhere Erklärbarkeit eines bestehendes Modell zu sorgen. Sie können ModelVersion.load
verwenden, um das Python-Objekt abzurufen, das die Implementierung des Modells darstellt, und dieses dann in der Registrierung als neue Modellversion protokollieren. Stellen Sie sicher, dass Sie Ihre Hintergrunddaten als sample_input_data
übergeben. Dieser Ansatz wird im Folgenden dargestellt.
Wichtig
Die Python-Umgebung, in die Sie das Modell laden, muss genau dieselbe sein (d. h. dieselbe Version von Python und aller Bibliotheken) wie die Umgebung, in der das Modell bereitgestellt wird. Weitere Details dazu finden Sie unter Laden von Modellversionen.
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
)
Protokollierungsmodelle ohne Erklärbarkeit¶
Die Erklärbarkeit ist standardmäßig aktiviert, wenn das Modell sie unterstützt. Um eine Modellversion in der Registrierung ohne Erklärbarkeit zu protokollieren, geben Sie bei der Protokollierung des Modells False
für die Option enable_explainability
an, wie hier gezeigt.
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}
)