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_run
açı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_run
mü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_run
indirmek 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.
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.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin