Aracılığıyla paylaş


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 açıklamaları nasıl alacağınızı öğreneceksiniz. Otomatik ML, oluşturulan modellerin özellik önemini anlamanıza yardımcı olur.

Varsayılan olarak 1.0.85 sonrasındaki tüm SDK sürümleri 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 önerilmez. 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 özellikleri için açıklamaları içeren 'den best_runaçıklamasını alı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ı dosyasının 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ı hesaplar ve görselleştirirken, 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österilir.

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 edilen örneklerden öne çıkan veriler
  • Mühendislik özelliği ad listeleri
  • Sınıflandırma senaryolarında etiketlenmiş sütununuzda bulunabilen sınıflar

yukarıdaki automl_explainer_setup_obj 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şlatın

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çıklamaya ilişkin fitted_model vekil model

MimicWrapper, mühendislikle 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 kazandırıcıları tarafından oluşturulan mühendislik özelliklerine ait özellik önem değerlerinin açıklamaları pano görselleştirmesini görüntülemek için Azure Machine Learning stüdyosu'de 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. paketinden raiwidgets ile ExplanationDashboard açıklama sonuçlarını 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ümde yer alan açıklamaları hesaplamak için kullanılan açıklamayı kullanarak otomatik ml modelini kullanıma hazır hale getirme hakkında bilgi edineceksiniz.

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 kullanın. Puanlama açıklayıcısını daha önce hesaplanan ile feature_map 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ımlarda yer alan 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 yapın. 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 veri ve açıklamalardaki desenleri keşfetmek için görselleştirme

Azure Machine Learning stüdyosu'da çalışma alanınızdaki özellik önem grafiğini 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. Görselleştirmeleri açıklama panosunda 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 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.