해석력: 자동화된 ML의 모델 설명(미리 보기)

적용 대상:Python SDK azureml v1

이 문서에서는 Python SDK를 사용하여 Azure Machine Learning에서 자동화된 Machine Learning(자동화된 ML) 모델에 대한 설명을 가져오는 방법에 대해 알아봅니다. 자동화된 ML은 생성된 모델의 기능 중요도를 이해하는 데 도움이 됩니다.

1\.0.85 이후의 모든 SDK 버전은 기본적으로 model_explainability=True로 설정됩니다. SDK 버전 1.0.85 및 이전 버전에서 사용자는 모델 해석력을 사용하기 위해 AutoMLConfig 개체에 model_explainability=True을 설정해야 합니다.

이 문서에서는 다음 방법을 설명합니다.

  • 최적 모델 또는 모든 모델에 대한 학습 중에 해석력을 수행합니다.
  • 시각화를 사용하면 데이터 및 설명에서 패턴을 확인할 수 있습니다.
  • 유추 또는 채점 중 해석력을 구현합니다.

사전 요구 사항

  • 해석력 기능입니다. pip install azureml-interpret을 실행하여 필요한 패키지를 가져옵니다.
  • 자동화된 ML 실험 빌드에 대한 지식입니다. Azure Machine Learning SDK 사용 방법에 대한 자세한 내용은 이 개체 감지 모델 자습서를 완료하거나 자동화된 ML 실험 구성 방법을 참조하세요.

최적 모델에 대한 학습 중의 해석력

원시 및 엔지니어링된 기능에 대한 설명이 포함된 best_run에서 설명을 검색합니다.

참고

해석력, 모델 설명은 자동화된 ML 예측 실험에서 권장하는 TCNForecaster 모델에 사용할 수 없습니다.

최적 실행에서 엔지니어링된 기능 중요도 다운로드

ExplanationClient을 사용하여 best_run의 아티팩트 저장소에서 엔지니어링된 기능 설명을 다운로드 할 수 있습니다.

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

최적 실행에서 원시 기능 중요도 다운로드

ExplanationClient을 사용하여 best_run의 아티팩트 저장소에서 원시 기능 설명을 다운로드 할 수 있습니다.

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

모든 모델에 대한 학습 중의 해석력

모델 설명을 계산하고 시각화 할 때 자동화된 Machine Learning 모델에 대한 기존 모델의 설명에만 국한되지 않습니다. 다른 테스트 데이터로 모델에 대한 설명을 볼 수도 있습니다. 이 섹션의 단계에서는 테스트 데이터를 기반으로 엔지니어링된 기능 중요도를 계산하고 시각화 하는 방법을 보여줍니다.

학습에서 다른 자동화된 Machine Learning 모델 검색

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

모델 설명 설정

automl_setup_model_explanations을 사용하여 엔지니어링된 설명 및 원시 설명을 가져옵니다. fitted_model은 다음과 같은 항목을 생성할 수 있습니다:

  • 학습된 샘플 또는 테스트 샘플의 기능 데이터
  • 엔지니어링된 기능 이름 목록
  • 분류 시나리오의 레이블이 지정된 열에서 찾을 수 있는 클래스

automl_explainer_setup_obj은 위 목록의 모든 구조를 포함합니다.

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

기능 중요도에 대한 모방 설명자 초기화

자동화된 ML 모델에 대한 설명을 생성하려면 MimicWrapper 클래스를 사용합니다. 다음 매개 변수를 사용하여 MimicWrapper를 초기화할 수 있습니다:

  • 설명자 설정 개체
  • 작업 영역
  • 자동화된 ML 모델 fitted_model을 설명하는 서로게이트 모델

MimicWrapper는 엔지니어링된 설명이 업로드 될 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)

모방 설명자를 사용하여 엔지니어링된 기능 중요도를 계산 및 시각화

변환된 테스트 샘플을 사용하여 MimicWrapper에서 explain() 메서드를 호출하여 만들어진 엔지니어링된 기능에 대한 기능 중요도를 가져올 수 있습니다. 또한 Azure Machine Learning Studio에 로그인하여 자동화된 ML 기능화를 통해 생성한 엔지니어링된 기능의 기능 중요도 값에 대한 설명 대시보드 시각화를 확인할 수 있습니다.

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

자동화된 Machine Learning을 사용하여 학습된 모델의 경우 get_output() 메서드를 사용하여 최적의 모델을 가져오고 로컬에서 설명을 계산할 수 있습니다. raiwidgets 패키지의 ExplanationDashboard로 설명 결과를 시각화할 수 있습니다.

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)

모방 설명자를 사용하여 원시 기능 중요도 계산 및 시각화

변환된 테스트 샘플을 사용하여 MimicWrapper에서 explain() 메서드를 호출하여 원시 기능에 대한 기능 중요도를 가져올 수 있습니다. Machine Learning Studio에서 원시 기능의 기능 중요도 값에 대한 대시보드 시각화를 볼 수 있습니다.

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

유추 중의 해석력

이 섹션에서는 이전 섹션의 설명을 계산하는 데 사용된 설명자로 자동화된 ML 모델을 운영하는 방법을 알아봅니다.

모델 및 채점 설명자 등록

TreeScoringExplainer을 사용하여 유추 시 엔지니어링된 기능 중요도 값을 계산할 채점 설명자를 만듭니다. 이전에 계산된 feature_map로 채점 설명자를 초기화합니다.

채점 설명자를 저장한 후 모델 및 채점 설명자를 모델 관리 서비스에 등록합니다. 다음 코드를 실행하세요.

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

서비스 설정을 위한 Conda 종속성 만들기

그런 다음 배포된 모델 컨테이너에 필요한 환경 종속성을 만듭니다. 1.0.45 버전 이상의 azureml-defaults는 모델을 웹 서비스로 호스트하는데 필요한 기능을 포함하므로 pip 종속성으로 나열되어야 합니다.

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

채점 스크립트 만들기

모델을 로드하고 새 일괄 처리 데이터를 기반으로 예측과 설명을 생성하는 스크립트를 작성합니다.

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

서비스 배포

Conda 파일 및 이전 단계의 채점 파일을 사용하여 서비스를 배포합니다.

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)

테스트 데이터를 사용한 유추

일부 테스트 데이터로 유추하여 현재 Azure Machine Learning SDK에서만 지원되는 자동화된 Machine Learning 모델의 예측 값을 확인합니다. 예측 값에 기여하는 기능 중요도를 확인합니다.

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

학습 시간에 데이터 및 설명의 패턴을 발견하도록 시각화

Azure Machine LearningStudio의 작업 영역에서 기능 중요도 차트를 시각화 할 수 있습니다. 자동화된 Machine Learning 실행이 완료되면 모델 세부 정보 보기를 선택하여 특정 실행을 확인할 수 있습니다. 설명 대시보드에서 시각화를 보려면 설명 탭을 선택합니다.

Machine Learning 해석력 아키텍처

설명 대시보드 시각화 및 특정 플롯에 대한 자세한 내용은 해석력에 대한 방법 문서를 참조하세요.

다음 단계

자동화된 ML 이외의 영역에서 모델 설명 및 기능 중요도를 사용하도록 설정하는 방법에 대한 자세한 내용은 모델 해석력에 대한 추가 기술을 참조하세요.