Sdílet prostřednictvím


Interpretovatelnost: Vysvětlení modelů v automatizovaném strojovém učení (Preview)

PLATÍ PRO: Python SDK azureml v1

V tomto článku se dozvíte, jak získat vysvětlení modelů automatizovaného strojového učení (automatizovaného strojového učení) ve službě Azure Machine Learning pomocí sady Python SDK. Automatizované strojové učení vám pomůže pochopit důležitost funkcí vygenerovaných modelů.

Všechny verze sady SDK po 1.0.85 jsou standardně nastavené model_explainability=True . V sadě SDK verze 1.0.85 a starších verzích musí uživatelé v objektu AutoMLConfig nastavit model_explainability=True interpretovatelnost modelu.

V tomto článku získáte informace o těchto tématech:

  • Při trénování můžete provádět interpretovatelnost pro nejlepší model nebo jakýkoli model.
  • Povolte vizualizace, které vám pomůžou zobrazit vzory v datech a vysvětleních.
  • Implementujte interpretovatelnost během odvozování nebo vyhodnocování.

Požadavky

  • Interpretovatelnost funkcí Spuštěním pip install azureml-interpret získejte potřebný balíček.
  • Znalost vytváření automatizovaných experimentů ML Další informace o použití sady Azure Machine Learning SDK najdete v tomto kurzu k modelu rozpoznávání objektů nebo zjistěte, jak nakonfigurovat automatizované experimenty ML.

Důležité

Tato funkce je v současné době ve verzi Public Preview. Tato verze Preview je poskytována bez smlouvy o úrovni služeb a nedoporučujeme ji pro produkční úlohy. Některé funkce se nemusí podporovat nebo mohou mít omezené možnosti.

Další informace najdete v dodatečných podmínkách použití pro verze Preview v Microsoft Azure.

Interpretovatelnost během trénování pro nejlepší model

Načtěte vysvětlení z objektu best_run, který obsahuje vysvětlení nezpracovaných i inženýrových funkcí.

Poznámka:

Interpretovatelnost, vysvětlení modelu není k dispozici pro model TCNForecaster doporučený experimenty s prognózováním automatického strojového učení.

Stažení důležitosti funkcí z nejlepšího spuštění

Můžete použít ExplanationClient ke stažení vysvětlení vysvětlovaných funkcí z úložiště artefaktů v úložišti artefaktů best_run.

from azureml.interpret import ExplanationClient

client = ExplanationClient.from_run(best_run)
engineered_explanations = client.download_model_explanation(raw=False)
print(engineered_explanations.get_feature_importance_dict())

Stažení nezpracovaných důležitostí funkcí z nejlepšího běhu

Můžete použít ExplanationClient ke stažení nezpracovaných vysvětlení funkcí z úložiště artefaktů v objektu best_run.

from azureml.interpret import ExplanationClient

client = ExplanationClient.from_run(best_run)
raw_explanations = client.download_model_explanation(raw=True)
print(raw_explanations.get_feature_importance_dict())

Interpretovatelnost během trénování pro jakýkoli model

Když vypočítáte vysvětlení modelu a vizualizujete je, nejste omezeni na vysvětlení existujícího modelu pro model AutoML. Můžete také získat vysvětlení modelu s různými testovacími daty. Kroky v této části ukazují, jak vypočítat a vizualizovat důležitost funkcí na základě testovacích dat.

Načtení jakéhokoli jiného modelu AutoML z trénování

automl_run, fitted_model = local_run.get_output(metric='accuracy')

Nastavení vysvětlení modelu

Slouží automl_setup_model_explanations k získání inženýrovaných a nezpracovaných vysvětlení. Může fitted_model generovat následující položky:

  • Doporučená data z natrénovaných nebo testovacích ukázek
  • Seznamy názvů navržených funkcí
  • Vyhledatelné třídy ve sloupci s popiskem ve scénářích klasifikace

Obsahuje automl_explainer_setup_obj všechny struktury z výše uvedeného seznamu.

from azureml.train.automl.runtime.automl_explain_utilities import automl_setup_model_explanations

automl_explainer_setup_obj = automl_setup_model_explanations(fitted_model, X=X_train, 
                                                             X_test=X_test, y=y_train, 
                                                             task='classification')

Inicializace Mimic Explaineru pro důležitost funkce

Pokud chcete vygenerovat vysvětlení pro automatizované modely ML, použijte MimicWrapper třídu. MimicWrapper můžete inicializovat pomocí těchto parametrů:

  • Objekt pro nastavení vysvětlovače
  • Váš pracovní prostor
  • Náhradní model, který vysvětluje model automatizovaného strojového fitted_model učení

MimicWrapper také vezme objekt, automl_run kde se nahrají popisy inženýrů.

from azureml.interpret import MimicWrapper

# Initialize the Mimic Explainer
explainer = MimicWrapper(ws, automl_explainer_setup_obj.automl_estimator,
                         explainable_model=automl_explainer_setup_obj.surrogate_model, 
                         init_dataset=automl_explainer_setup_obj.X_transform, run=automl_run,
                         features=automl_explainer_setup_obj.engineered_feature_names, 
                         feature_maps=[automl_explainer_setup_obj.feature_map],
                         classes=automl_explainer_setup_obj.classes,
                         explainer_kwargs=automl_explainer_setup_obj.surrogate_model_params)

Použití Mimic Explaineru pro výpočet a vizualizaci významu funkcí inženýrů

Metodu v MimicWrapperu explain() můžete volat s transformovanými testovacími ukázkami, abyste získali důležitost funkce pro vygenerované funkce. Můžete se také přihlásit k studio Azure Machine Learning a zobrazit vizualizaci řídicího panelu vysvětlení hodnot důležitosti funkcí vygenerovaných vygenerovaných funkcí automatizovanými featurizátory ML.

engineered_explanations = explainer.explain(['local', 'global'], eval_dataset=automl_explainer_setup_obj.X_test_transform)
print(engineered_explanations.get_feature_importance_dict())

U modelů natrénovaných pomocí automatizovaného strojového get_output() učení můžete získat nejlepší model pomocí metody a vysvětlení výpočetních prostředků místně. Výsledky vysvětlení můžete vizualizovat raiwidgets pomocí ExplanationDashboard balíčku.

best_run, fitted_model = remote_run.get_output()

from azureml.train.automl.runtime.automl_explain_utilities import AutoMLExplainerSetupClass, automl_setup_model_explanations
automl_explainer_setup_obj = automl_setup_model_explanations(fitted_model, X=X_train,
                                                             X_test=X_test, y=y_train,
                                                             task='regression')

from interpret.ext.glassbox import LGBMExplainableModel
from azureml.interpret.mimic_wrapper import MimicWrapper

explainer = MimicWrapper(ws, automl_explainer_setup_obj.automl_estimator, LGBMExplainableModel,
                         init_dataset=automl_explainer_setup_obj.X_transform, run=best_run,
                         features=automl_explainer_setup_obj.engineered_feature_names,
                         feature_maps=[automl_explainer_setup_obj.feature_map],
                         classes=automl_explainer_setup_obj.classes)
                         
pip install interpret-community[visualization]

engineered_explanations = explainer.explain(['local', 'global'], eval_dataset=automl_explainer_setup_obj.X_test_transform)
print(engineered_explanations.get_feature_importance_dict()),
from raiwidgets import ExplanationDashboard
ExplanationDashboard(engineered_explanations, automl_explainer_setup_obj.automl_estimator, datasetX=automl_explainer_setup_obj.X_test_transform)

 

raw_explanations = explainer.explain(['local', 'global'], get_raw=True,
                                     raw_feature_names=automl_explainer_setup_obj.raw_feature_names,
                                     eval_dataset=automl_explainer_setup_obj.X_test_transform)
print(raw_explanations.get_feature_importance_dict()),
from raiwidgets import ExplanationDashboard
ExplanationDashboard(raw_explanations, automl_explainer_setup_obj.automl_pipeline, datasetX=automl_explainer_setup_obj.X_test_raw)

Použití Mimic Explaineru pro výpočet a vizualizaci důležitosti nezpracovaných funkcí

Metodu v MimicWrapperu explain() můžete volat pomocí transformovaných testovacích ukázek, abyste získali důležitost funkce pro nezpracované funkce. V nástroji Machine Learning Studio můžete zobrazit vizualizaci řídicího panelu hodnot důležitosti funkcí nezpracovaných funkcí.

raw_explanations = explainer.explain(['local', 'global'], get_raw=True,
                                     raw_feature_names=automl_explainer_setup_obj.raw_feature_names,
                                     eval_dataset=automl_explainer_setup_obj.X_test_transform,
                                     raw_eval_dataset=automl_explainer_setup_obj.X_test_raw)
print(raw_explanations.get_feature_importance_dict())

Interpretovatelnost během odvození

V této části se dozvíte, jak zprovoznit automatizovaný model ML s vysvětlením, který se použil k výpočtu vysvětlení v předchozí části.

Registrace modelu a vysvětlení skóre

TreeScoringExplainer Použijte k vytvoření vysvětlujícího modulu pro vyhodnocování, který vypočítá hodnoty důležitosti zpracovaných funkcí v době odvozování. Inicializujete vysvětlení skóre pomocí feature_map dříve vypočítaného.

Uložte vysvětlující nástroj pro vyhodnocování a pak zaregistrujte model a vysvětlení skóre ve službě Správa modelů. Spusťte následující kód:

from azureml.interpret.scoring.scoring_explainer import TreeScoringExplainer, save

# Initialize the ScoringExplainer
scoring_explainer = TreeScoringExplainer(explainer.explainer, feature_maps=[automl_explainer_setup_obj.feature_map])

# Pickle scoring explainer locally
save(scoring_explainer, exist_ok=True)

# Register trained automl model present in the 'outputs' folder in the artifacts
original_model = automl_run.register_model(model_name='automl_model', 
                                           model_path='outputs/model.pkl')

# Register scoring explainer
automl_run.upload_file('scoring_explainer.pkl', 'scoring_explainer.pkl')
scoring_explainer_model = automl_run.register_model(model_name='scoring_explainer', model_path='scoring_explainer.pkl')

Vytvoření závislostí conda pro nastavení služby

Dále vytvořte potřebné závislosti prostředí v kontejneru pro nasazený model. Upozorňujeme, že výchozí hodnoty azureml s verzí >= 1.0.45 musí být uvedené jako závislost pip, protože obsahuje funkce potřebné k hostování modelu jako webové služby.

from azureml.core.conda_dependencies import CondaDependencies

azureml_pip_packages = [
    'azureml-interpret', 'azureml-train-automl', 'azureml-defaults'
]

myenv = CondaDependencies.create(conda_packages=['scikit-learn', 'pandas', 'numpy', 'py-xgboost<=0.80'],
                                 pip_packages=azureml_pip_packages,
                                 pin_sdk_version=True)

with open("myenv.yml","w") as f:
    f.write(myenv.serialize_to_string())

with open("myenv.yml","r") as f:
    print(f.read())

Vytvoření hodnoticího skriptu

Napište skript, který načte model a vytváří předpovědi a vysvětlení na základě nové dávky dat.

%%writefile score.py
import joblib
import pandas as pd
from azureml.core.model import Model
from azureml.train.automl.runtime.automl_explain_utilities import automl_setup_model_explanations


def init():
    global automl_model
    global scoring_explainer

    # Retrieve the path to the model file using the model name
    # Assume original model is named automl_model
    automl_model_path = Model.get_model_path('automl_model')
    scoring_explainer_path = Model.get_model_path('scoring_explainer')

    automl_model = joblib.load(automl_model_path)
    scoring_explainer = joblib.load(scoring_explainer_path)


def run(raw_data):
    data = pd.read_json(raw_data, orient='records')
    # Make prediction
    predictions = automl_model.predict(data)
    # Setup for inferencing explanations
    automl_explainer_setup_obj = automl_setup_model_explanations(automl_model,
                                                                 X_test=data, task='classification')
    # Retrieve model explanations for engineered explanations
    engineered_local_importance_values = scoring_explainer.explain(automl_explainer_setup_obj.X_test_transform)
    # Retrieve model explanations for raw explanations
    raw_local_importance_values = scoring_explainer.explain(automl_explainer_setup_obj.X_test_transform, get_raw=True)
    # You can return any data type as long as it is JSON-serializable
    return {'predictions': predictions.tolist(),
            'engineered_local_importance_values': engineered_local_importance_values,
            'raw_local_importance_values': raw_local_importance_values}

Nasazení služby

Nasaďte službu pomocí souboru Conda a souboru bodování z předchozích kroků.

from azureml.core.webservice import Webservice
from azureml.core.webservice import AciWebservice
from azureml.core.model import Model, InferenceConfig
from azureml.core.environment import Environment

aciconfig = AciWebservice.deploy_configuration(cpu_cores=1,
                                               memory_gb=1,
                                               tags={"data": "Bank Marketing",  
                                                     "method" : "local_explanation"},
                                               description='Get local explanations for Bank marketing test data')
myenv = Environment.from_conda_specification(name="myenv", file_path="myenv.yml")
inference_config = InferenceConfig(entry_script="score_local_explain.py", environment=myenv)

# Use configs and models generated above
service = Model.deploy(ws,
                       'model-scoring',
                       [scoring_explainer_model, original_model],
                       inference_config,
                       aciconfig)
service.wait_for_deployment(show_output=True)

Odvozování s testovacími daty

Odvozování s některými testovacími daty, abyste viděli predikovanou hodnotu z modelu AutoML, aktuálně podporovaná pouze v sadě Azure Machine Learning SDK. Prohlédněte si důležitosti funkcí, které přispívají k predikované hodnotě.

if service.state == 'Healthy':
    # Serialize the first row of the test data into json
    X_test_json = X_test[:1].to_json(orient='records')
    print(X_test_json)
    # Call the service to get the predictions and the engineered explanations
    output = service.run(X_test_json)
    # Print the predicted value
    print(output['predictions'])
    # Print the engineered feature importances for the predicted value
    print(output['engineered_local_importance_values'])
    # Print the raw feature importances for the predicted value
    print('raw_local_importance_values:\n{}\n'.format(output['raw_local_importance_values']))

Vizualizace zjišťování vzorů v datech a vysvětleních v době trénování

Graf důležitosti funkcí v pracovním prostoru můžete vizualizovat v studio Azure Machine Learning. Po dokončení spuštění AutoML vyberte Zobrazit podrobnosti modelu a zobrazte konkrétní spuštění. Výběrem karty Vysvětlení zobrazíte vizualizace na řídicím panelu vysvětlení.

Architektura interpretovatelnosti strojového učení

Další informace o vizualizacích řídicích panelů vysvětlení a konkrétních grafech najdete v dokumentaci k interpretovatelnosti.

Další kroky

Další informace o tom, jak povolit vysvětlení modelů a důležitost funkcí v jiných oblastech než automatizované strojové učení, najdete v dalších technikách pro interpretovatelnost modelu.