قابلية التفسير: إمكانية شرح النموذج في التعلم الآلي التلقائي (معاينة)

ينطبق على: Python SDK azureml v1

في هذه المقالة، ستتعلم كيفية الحصول على تفسيرات لنماذج التعلم الآلي التلقائي (ML التلقائي) في Azure التعلم الآلي باستخدام Python SDK. يساعدك التعلم الآلي التلقائي على فهم أهمية ميزة النماذج التي يتم إنشاؤها.

تعيّن جميع إصدارات SDK بعد 1.0.85 model_explainability=True بشكل افتراضي. في الإصدار 1.0.85 من SDK والإصدارات السابقة، يحتاج المستخدمون إلى تعيين model_explainability=True في الكائن AutoMLConfig من أجل استخدام قابلية تفسير النموذج.

في هذه المقالة، ستتعرف على كيفية:

  • تنفيذ قابلية التفسير أثناء التدريب للحصول على أفضل نموذج أو أي نموذج.
  • تمكين المرئيات لمساعدتك على رؤية الأنماط في البيانات والتفسيرات.
  • تنفيذ قابلية التفسير في أثناء الاستدلال أو التسجيل.

المتطلبات الأساسية

هام

تُعد هذه الميزة قيد الإصدار الأولي العام في الوقت الحالي. يجري توفير إصدار المعاينة هذا دون اتفاقية على مستوى الخدمة، ولا نوصي باستخدامه لأحمال عمل الإنتاج. بعض الميزات ربما لا تكون مدعمة أو بها بعض القدرات المقيدة.

لمزيد من المعلومات، راجع ⁧⁩شروط الاستخدام التكميلية لمعاينات Microsoft Azure⁧⁩.

قابلية التفسير في أثناء التدريب للحصول على أفضل نموذج

استرداد الشرح من best_run، والذي يتضمن تفسيرات لكل من الميزات الأولية والمهندسة.

إشعار

لا تتوفر إمكانية التفسير، تفسير النموذج، لنموذج TCNForecaster الموصى به من خلال تجارب التنبؤ التلقائي بـML.

تنزيل أهمية الميزة الهندسية من أفضل تشغيل

يمكنك استخدام 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())

قابلية التفسير في أثناء التدريب لأي نموذج

عند حساب تفسيرات النموذج وتصورها، لا تقتصر على شرح نموذج موجود لنموذج AutoML. يمكنك أيضًا الحصول على شرح للنموذج الخاص بك مع بيانات اختبار مختلفة. توضح لك الخطوات الواردة في هذا القسم كيفية حساب وتصور أهمية الميزة الهندسية استنادًا إلى بيانات الاختبار الخاصة بك.

استرداد أي نموذج AutoML آخر من التدريب

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

تهيئة Mimic Explainer لأهمية الميزة

لإنشاء شرح لنماذج التعلم الآلي التلقائي، استخدم الفئة MimicWrapper. يمكنك تهيئة MimicWrapper باستخدام هذه المعلمات:

  • كائن إعداد المفسر
  • مساحة العمل
  • نموذج بديل لشرح نموذج التعلم الآلي التلقائي 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)

استخدام Mimic Explainer للحوسبة وتصور أهمية الميزة الهندسية

يمكنك استدعاء الطريقة explain() في MimicWrapper مع عينات الاختبار المحولة للحصول على أهمية الميزة للميزات الهندسية التي تم إنشاؤها. يمكنك أيضًا تسجيل الدخول إلى Azure Machine Learning studio لعرض تصور لوحة معلومات التفسيرات لقيم أهمية الميزة للميزات الهندسية التي تم إنشاؤها بواسطة ميزات التعلم الآلي التلقائي.

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

بالنسبة للنماذج المدربة باستخدام التعلم الآلي التلقائي، يمكنك الحصول على أفضل نموذج باستخدام الطريقة get_output() وحساب التفسيرات محليًا. يمكنك تصور نتائج التفسير مع ExplanationDashboard من الحزمة raiwidgets.

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)

استخدام Mimic Explainer للحوسبة وتصور أهمية الميزة الأولية

يمكنك استدعاء الطريقة explain() في MimicWrapper مع عينات الاختبار المحولة للحصول على أهمية الميزة للميزات الأولية. في 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())

قابلية التفسير في أثناء الاستدلال

في هذا القسم، ستتعلم كيفية تشغيل نموذج التعلم الآلي التلقائي مع المفسر الذي تم استخدامه لحساب التفسيرات في القسم السابق.

تسجيل النموذج ومفسر التسجيل

استخدم 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 لإعداد الخدمة

بعد ذلك، قم بإنشاء تبعيات البيئة الضرورية في الحاوية للنموذج المنشور. يرجى ملاحظة أنه يجب إدراج azureml-defaults مع الإصدار >= 1.0.45 كتبعية 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)

الاستدلال مع بيانات الاختبار

الاستدلال مع بعض بيانات الاختبار لمشاهدة القيمة المتوقعة من نموذج AutoML، المدعومة حاليًا فقط في Azure Machine Learning SDK. عرض أهمية الميزة التي تساهم في تحقيق قيمة متوقعة.

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 Learning studio. بعد اكتمال تشغيل AutoML، حدد عرض تفاصيل النموذج لعرض تشغيل معين. حدد علامة التبويب Explanations لمشاهدة المرئيات في لوحة معلومات التفسير.

هندسة تفسير التعلم الآلي

لمزيد من المعلومات حول مرئيات لوحة معلومات التفسير والمخططات المحددة، يرجى الرجوع إلى مستند الكيفية حول قابلية التفسير.

الخطوات التالية

لمزيد من المعلومات حول كيفية تمكين تفسيرات النموذج وأهمية الميزات في مجالات أخرى غير التعلم الآلي التلقائي، راجع المزيد من التقنيات لترجمة النموذج.