Yorumlanabilirlik: Otomatikleştirilmiş modellerde model ML (önizleme)

Bu makalede, Python SDK'sı kullanarak otomatik makine öğrenmesi (otomatikleştirilmiş ML) modellerinin Azure Machine Learning hakkında bilgi edinebilirsiniz. Otomatik ML, oluşturulan modellerin özellik önemini anlamanıza yardımcı olur.

1.0.85 sonrasındaki tüm SDK sürümleri varsayılan model_explainability=True olarak ayarlanır. SDK sürüm 1.0.85 ve önceki sürümlerde kullanıcıların model yorumlanabilirliğini kullanmak model_explainability=TrueAutoMLConfig için nesnesinde ayarlamaları 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örmenizi sağlamak için görselleştirmeleri etkinleştirin.
  • Çıkarım veya puanlama sırasında yorumlanabilirliği uygulama.

Önkoşullar

  • Yorumlanabilirlik özellikleri. Gerekli pip install azureml-interpret paketi almak için çalıştırın.
  • Otomatik denemeler ve denemeler ML bilgi. Azure Machine Learning SDK'sı kullanma hakkında daha fazla bilgi için bu regresyon modeli öğreticiyi tamamlar veya denemeleri otomatikleştirilmiş ML bakın.

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

Hem ham hem de mühendislik best_run özelliklerine ilişkin açıklamalar içeren açıklamasını 'den alın.

Not

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

En iyi çalıştırmadan geliştirilmiş özellik önemlerini indirin

mühendislik özelliği ExplanationClient açıklamalarını, yapıt mağazasından indirmek için best_run kullanabilirsiniz.

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 önemlerini en iyi çalıştırmadan indirin

ham özellik ExplanationClient açıklamalarını yapıt mağazasından indirmek için best_run kullanabilirsiniz.

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ştirin, AutoML modeli için mevcut bir model açıklamasıyla sınırlı olmazsınız. Ayrıca farklı test verileriyle modeliniz için bir açıklama da eldeebilirsiniz. Bu bölümdeki adımlarda, test verilerinize göre tasarlanmış özellik önemlerini hesaplama ve görselleştirme adımları yer almaktadır.

Eğitimden diğer AutoML modellerini alma

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

Model açıklamalarını ayarlama

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

  • Eğitilen veya test örneklerinden öne çıkan veriler
  • Tasarlanmış özellik adı listeleri
  • Sınıflandırma senaryolarında etiketlenmiş sütunda bulunabilir sınıflar

automl_explainer_setup_objyukarıdaki listede yer alan 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'i başlatma

Otomatikleştirilmiş veri modelleri için bir ML oluşturmak için sınıfını MimicWrapper kullanın. MimicWrapper'ı şu parametrelerle başlatamazsiniz:

  • Açıklama kurulum nesnesi
  • Çalışma alanınız
  • Otomatikleştirilmiş veri modeline fitted_model açıklama ML modeli

MimicWrapper ayrıca automl_run mühendislikle geliştirilmiş açıklamaların yük yükl olduğu nesneyi de alı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)

Mühendislikle geliştirilmiş özellik önemlerini hesaplama ve görselleştirme için Mimic Explainer kullanma

Oluşturulan mühendislik özellikleri için özelliğin önemini elde etmek için dönüştürülmüş test örnekleriyle explain() MimicWrapper'da yöntemini çağırabilirsiniz. Azure Machine Learning Studio'da oturum açmanın yanı sıra otomatikleştirilmiş özellik kazandırıcıları tarafından oluşturulan özelliklerin özellik önem değerlerine ilişkin açıklamalar panosu görselleştirmesini ML edebilirsiniz.

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

Otomatikleştirilmiş verilerle eğitilen ML, yöntemini ve işlem açıklamalarını yerel get_output() olarak kullanarak en iyi modeli eldeabilirsiniz. Paketten açıklama sonuçlarını ExplanationDashboard ile raiwidgets görselleştirin.

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 özellik önemlerini hesaplama ve görselleştirme için Mimic Explainer kullanma

Ham özellikler için özellik önemini almak için dönüştürülmüş test örnekleriyle explain() MimicWrapper'da yöntemini çağırabilirsiniz. Machine Learning studio'da,ham özelliklerin özellik önemi 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 ML otomatik bir veri depolama modeli oluşturma hakkında bilgi edinebilirsiniz.

Modeli ve puanlama açıklamalarını kaydetme

Çıkarım zamanında mühendislik özelliği önem değerlerini hesaplayacak puanlama TreeScoringExplainer açıklamalarını oluşturmak için kullanın. Puanlama açıklamayı daha önce feature_map hesaplanan ile başlatmış oluruz.

Puanlama açıklamalarını kaydedin ve ardından modeli ve puanlama açıklamayı Model Yönetimi 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 ayarlamaya 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ği > için, sürüm = 1.0.45 ile azureml-defaults'ın pip bağımlılığı olarak listelenmiş olması gerektiğini 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ği oluşturma

Modelinizi yüken ve yeni bir veri toplu işlerine göre 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

Önceki adımlarda yer alan conda dosyasını ve 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

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

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 desenlerini ve açıklamaları keşfetmek için görselleştirin

Azure Machine Learning Studio'da çalışma alanınız içinde özellik önem Azure Machine Learning 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 panosunda görselleştirmeleri görmek için Açıklamalar sekmesini seçin.

Machine Learning Interpretability Architecture

Açıklama panosu görselleştirmeleri ve belirli çizimleri hakkında daha fazla bilgi için yorumlanabilirlik hakkında nasıl bilgi edinebilirsiniz? belgesine bakın.

Sonraki adımlar

Model açıklamalarını ve özellik önemlerini otomatikleştirilmiş uygulama dışında alanlarda etkinleştirme hakkında daha fazla bilgi ML model yorumlanabilirliği için daha fazla teknike bakın.