Aracılığıyla paylaş


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

ŞUNUN 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çıklama almayı öğreneceksiniz. Otomatik ML, oluşturulan modellerin özellik önemini anlamanıza yardımcı olur.

1.0.85'in ardından 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 nesnede 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.
  • Verilerde ve açıklamalarda desenleri görmenize yardımcı olması için görselleştirmeleri etkinleştirin.
  • Çıkarım veya puanlama sırasında yorumlanabilirlik uygulama.

Önkoşullar

  • Yorumlanabilirlik özellikleri. Gerekli paketi almak için komutunu çalıştırın pip install azureml-interpret .
  • Otomatik ML denemeleri oluşturma bilgisi. Azure Machine Learning SDK'sını kullanma hakkında daha fazla bilgi için bu nesne algılama modeli öğreticisini tamamlayın veya otomatik ML denemelerini yapılandırma konusuna bakın.

Ö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 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 '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 özellik ö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 modeli için 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 mühendislik özelliği önemini hesaplama ve görselleştirme adımları gösterilmektedir.

Eğitimden diğer tüm AutoML modellerini 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 açıklamalarını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 özelliklerine ilişkin özellik önem değerlerinin açıklama panosu görselleştirmesini görüntülemek için Azure Machine Learning stüdyosu oturum da 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. ile açıklama sonuçlarını ExplanationDashboard paketten 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 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 öğ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-default değerlerinin 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 veri ve açıklamalardaki desenleri 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. 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.