Yorumlanabilirlik: Otomatik ML'de model açıklanabilirliği (önizleme)

ŞUNLAR IÇIN GEÇERLIDIR:Python SDK azureml v1

Bu makalede, Python SDK'sını kullanarak Azure Machine Learning'de otomatik makine öğrenmesi (otomatik ML) modelleri için nasıl açıklama alacağınızı öğreneceksiniz. Otomatik ML, oluşturulan modellerin özellik önemini anlamanıza yardımcı olur.

1.0.85'den sonraki tüm SDK sürümleri varsayılan olarak ayarlanır model_explainability=True . SDK sürüm 1.0.85 ve önceki sürümlerde kullanıcıların model yorumlanabilirliğini kullanmak için nesnesinde AutoMLConfig ayarlamaları model_explainability=True gerekir.

Bu makalede şunları öğreneceksiniz:

  • En iyi model veya herhangi bir model için eğitim sırasında yorumlanabilirlik gerçekleştirin.
  • Verilerdeki ve açıklamalardaki desenleri görmenize yardımcı olması için görselleştirmeleri etkinleştirin.
  • Çıkarım veya puanlama sırasında yorumlanabilirlik uygulama.

Önkoşullar

Önemli

Bu özellik şu anda genel önizlemededir. Bu önizleme sürümü hizmet düzeyi sözleşmesi olmadan sağlanır ve üretim iş yükleri için bu sürümü önermeyiz. Bazı özellikler desteklenmiyor olabileceği gibi özellikleri sınırlandırılmış da olabilir.

Daha fazla bilgi için bkz. Microsoft Azure Önizlemeleri için Ek Kullanım Koşulları.

En iyi model için eğitim sırasında yorumlanabilirlik

hem ham hem de mühendislik özelliklerine yönelik açıklamaları içeren açıklamasını içinden best_runalın.

Not

Otomatik ML tahmin denemeleri tarafından önerilen TCNForecaster modeli için yorumlanabilirlik, model açıklaması kullanılamaz.

En iyi çalıştırmadan mühendislik özelliği önem derecelerini indirin

öğesinin yapıt deposundan best_runmühendislik özelliği açıklamalarını indirmek için kullanabilirsinizExplanationClient.

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())

Ham özelliğin önem derecelerini en iyi çalıştırmadan indirin

ham özellik açıklamalarını öğesinin yapıt deposundan best_runindirmek için kullanabilirsinizExplanationClient.

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())

Herhangi bir model için eğitim sırasında yorumlanabilirlik

Model açıklamalarını hesaplayıp görselleştirdiğinizde, AutoML modelinin mevcut model açıklamasıyla sınırlı değilsiniz. Modeliniz için farklı test verilerine sahip bir açıklama da alabilirsiniz. Bu bölümdeki adımlarda, test verilerinize göre tasarlanmış özellik önemini hesaplama ve görselleştirme adımları gösterilmektedir.

Eğitimden başka bir AutoML modelini alma

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

Model açıklamalarını ayarlama

Mühendislik ve ham açıklamaları almak için kullanın automl_setup_model_explanations . fitted_model aşağıdaki öğeleri oluşturabilir:

  • Eğitilen veya test örneklerinden öne çıkan veriler
  • Mühendislik özelliği ad listeleri
  • Sınıflandırma senaryolarında etiketlenmiş sütununuzda bulunabilen sınıflar

automl_explainer_setup_obj yukarıdaki listeden tüm yapıları içerir.

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')

Özellik önemi için Mimic Explainer'ı başlatma

Otomatik ML modelleri için bir açıklama oluşturmak için sınıfını MimicWrapper kullanın. MimicWrapper'ı şu parametrelerle başlatabilirsiniz:

  • Açıklayıcı kurulum nesnesi
  • Çalışma alanınız
  • Otomatik ML modelini açıklayan fitted_model vekil model

MimicWrapper, mühendislik yapılan açıklamaların yüklendiği nesneyi de alır automl_run .

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)

Mühendislik özelliği önem derecesini hesaplama ve görselleştirme için Mimic Explainer kullanma

Oluşturulan mühendislik özellikleri için explain() özellik önemini almak için dönüştürülmüş test örnekleriyle MimicWrapper'da yöntemini çağırabilirsiniz. Otomatik ML özellik oluşturucuları tarafından oluşturulan mühendislik özelliklerinin özellik önem değerlerinin açıklamaları pano görselleştirmesini görüntülemek için Azure Machine Learning stüdyosu oturum açabilirsiniz.

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

Otomatik ML ile eğitilen modeller için yöntem ve işlem açıklamalarını yerel olarak kullanarak get_output() en iyi modeli elde edebilirsiniz. Açıklama sonuçlarını ExplanationDashboard ile birlikte paketinden raiwidgets görselleştirebilirsiniz.

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)

Ham özelliğin önemini hesaplama ve görselleştirme için Mimic Explainer kullanma

Ham özellikler için explain() özellik önemini almak için dönüştürülmüş test örnekleriyle MimicWrapper'da yöntemini çağırabilirsiniz. Machine Learning studio'da ham özelliklerin özellik önem değerlerinin pano görselleştirmesini görüntüleyebilirsiniz.

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())

Çıkarım sırasında yorumlanabilirlik

Bu bölümde, önceki bölümdeki açıklamaları hesaplamak için kullanılan açıklayıcı ile otomatik ml modelinin nasıl kullanıma hazır hale geldiğini öğreneceksiniz.

Modeli ve puanlama açıklayıcısını kaydetme

TreeScoringExplainer Çıkarım zamanında mühendislik özelliği önem değerlerini hesaplayacak puanlama açıklaması oluşturmak için öğesini kullanın. Puanlama açıklayıcısını feature_map daha önce hesaplanan ile başlatırsınız.

Puanlama açıklayıcısını kaydedin ve ardından modeli ve puanlama açıklayıcısını Model Yönetim Hizmeti'ne kaydedin. Aşağıdaki kodu çalıştırın:

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')

Hizmeti ayarlamak için conda bağımlılıklarını oluşturma

Ardından, dağıtılan model için kapsayıcıda gerekli ortam bağımlılıklarını oluşturun. Modeli web hizmeti olarak barındırmak için gereken işlevselliği içerdiğinden sürüm = 1.0.45 olan >azureml-defaults'ın pip bağımlılığı olarak listelenmiş olması gerektiğini lütfen unutmayın.

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())

Puanlama betiğini oluşturma

Modelinizi yükleyen ve yeni bir veri toplu işlemini temel alan tahminler ve açıklamalar üreten bir betik yazın.

%%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}

Hizmeti dağıtma

Conda dosyasını ve önceki adımlardan puanlama dosyasını kullanarak hizmeti dağıtın.

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)

Test verileriyle çıkarım

Şu anda yalnızca Azure Machine Learning SDK'sında desteklenen AutoML modelinden tahmin edilen değeri görmek için bazı test verileriyle çıkarım. Tahmin edilen değere katkıda bulunan özellik önemlerini görüntüleyin.

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']))

Eğitim zamanında verilerdeki desenleri ve açıklamaları keşfetmek için görselleştirme

çalışma alanınızdaki özellik önem grafiğini Azure Machine Learning stüdyosu görselleştirebilirsiniz. AutoML çalıştırmanız tamamlandıktan sonra, belirli bir çalıştırmayı görüntülemek için Model ayrıntılarını görüntüle'yi seçin. Açıklama panosundaki görselleştirmeleri görmek için Açıklamalar sekmesini seçin.

Machine Learning Yorumlanabilirlik Mimarisi

Açıklama panosu görselleştirmeleri ve belirli çizimler hakkında daha fazla bilgi için lütfen yorumlanabilirlik hakkında nasıl yapılır belgesine bakın.

Sonraki adımlar

Otomatik ML dışındaki alanlarda model açıklamalarını ve özellik önemini nasıl etkinleştirebileceğiniz hakkında daha fazla bilgi için bkz. Model yorumlanabilirliği için daha fazla teknik.