Microsoft Azure ML Service を使用して、ペイロードのロギング、フィードバックのロギング、パフォーマンス精度の測定、実行時のバイアス検出、説明可能性、モデル評価のための自動デビアス機能を実行できます。
以下の Microsoft Azure Machine Learning サービスフレームワークは、モデル評価用にサポートされています:
表 1. フレームワークのサポート詳細
フレームワーク | 問題タイプ | データ・タイプ |
---|---|---|
ネイティブ | 分類 | 構造化 |
scikit-learn | 分類 | 構造化 |
scikit-learn | 回帰分析 | 構造化 |
ドリフト検出モデルを生成するには、ノートブックで scikit-learn バージョン 0.20.2 を使用する必要があります。
Azure 自動化された Machine Learning 管理エンドポイントと Azure モデルは、モデル評価用のノートブックで管理されます。
Microsoft AzureMLサービスの追加
Microsoft AzureML Service で動作するようにモデル評価を設定するには、以下のいずれかの方法を使用します:
- 機械学習プロバイダーを初めて追加する場合、設定インターフェースを使用することができる。 詳しくは、Microsoft Azure ML Service インスタンスの指定を参照してください。
- Python SDK を使用して、機械学習プロバイダーを追加することもできます。 複数のプロバイダーが必要な場合は、この方法を使用する必要があります。 詳しくは、 Microsoft Azure 機械学習エンジンの追加を参照してください。
AzureML Serviceとやりとりするために必要な、さまざまなRESTエンドポイントが呼び出される。 そのためには、Azure Machine LearningServiceをバインドする必要がある。
- Azure Active Directory のサービス・プリンシパルを作成します。
- UI またはPythonSDK を使ってAzureML Service サービスバインディングを追加するときに、クレデンシャルの詳細を指定します。
JSON 要求ファイルおよび応答ファイルの要件
モデル評価をAzureML Serviceで動作させるには、作成するWebサービスデプロイが特定の要件を満たしている必要があります。 作成する Web サービス・デプロイメントは、以下の要件に従って、JSON 要求を受け入れ、JSON 応答を返す必要があります。
Web サービスの JSON 要求に求められる形式
- REST API 要求の本体は、JSON オブジェクトの JSON 配列 1 つを指定した JSON 文書でなければなりません。
- JSON 配列の名前は
"input"
でなければなりません。 - 各 JSON オブジェクトに含めることができるのは、単純なキーと値のペアのみです。値には、ストリング、数値、
true
、false
、またはnull
のいずれかです - 値を JSON オブジェクトや配列にすることはできません
- 使用可能な
null
以外の値があるかどうかに関係なく、配列内の各 JSON オブジェクトには、すべて同じキー (およびキーの数) が指定されている必要があります
以下のサンプル JSON ファイルは前述の要件を満たしているので、ユーザー独自の JSON 要求ファイルを作成するためのテンプレートとして使用できます。
{
"input": [
{
"field1": "value1",
"field2": 31,
"field3": true,
"field4": 2.3
},
{
"field1": "value2",
"field2": 15,
"field3": false,
"field4": 0.1
},
{
"field1": null,
"field2": 5,
"field3": true,
"field4": 6.1
}
]
}
Web サービスの JSON 応答に求められる形式
JSON 応答ファイルを作成するときには、以下の点に注意してください。
REST API 応答の本体は、JSON オブジェクトの JSON 配列 1 つを指定した JSON 文書でなければなりません。
JSON 配列の名前は
"output"
でなければなりません。各 JSON オブジェクトには、キーと値のペアのみを含めることができます。この値は、ストリング、数値、
true
、false
、null
、またはその他の JSON オブジェクトや配列を含まない配列のいずれかです値を JSON オブジェクトにすることはできません
使用可能な
null
以外の値があるかどうかに関係なく、配列内の各 JSON オブジェクトには、すべて同じキー (およびキーの数) が指定されている必要があります分類モデルの場合: Web サービスは、各クラスの確率を含む配列を返す必要があります。確率の順序は、配列内のすべての JSON オブジェクトで一貫していなければなりません。
- 例: 信用リスクを予測する二項分類モデルでクラス
Risk
またはクラスNo Risk
に分類する場合 - "output" 配列で返されるあらゆる結果において、オブジェクト内のキーと値のペアに含まれている確率の順序が、以下の形式で固定されていなければなりません。
{ "output": [ { "Scored Probabilities": ["Risk" probability,"No Risk" probability ] }, { "Scored Probabilities": ["Risk" probability,"No Risk" probability ] } ]
- 例: 信用リスクを予測する二項分類モデルでクラス
Azure ML Studio と Azure ML Service の両方で使用される Azure ML ビジュアル・ツールとの整合性を維持するには、以下のキー名を使用します。
- モデルの予測値を示す、出力キーのキー名
"Scored Labels"
- 各クラスの確率の配列を示す、出力キーのキー名
"Scored Probabilities"
。
以下のサンプル JSON ファイルは、前述の要件を満たしているので、ユーザー独自の JSON 応答ファイルを作成するためのテンプレートとして使用できます。
{
"output": [
{
"Scored Labels": "No Risk",
"Scored Probabilities": [
0.8922524675865824,
0.10774753241341757
]
},
{
"Scored Labels": "No Risk",
"Scored Probabilities": [
0.8335192848546905,
0.1664807151453095
]
}
]
}
サンプル・ノートブック
以下のノートブックは、Microsoft Azure ML Service と連携する方法を示しています。
Microsoft Azure ML Service インスタンスの指定
モデル評価を構成する最初のステップは、Microsoft AzureML Serviceインスタンスを指定することです。 Azure ML Service インスタンスが、AI モデルとデプロイメントが保管されている場所です。
AIモデルとデプロイメントは、モデル評価のためにAzureML Serviceインスタンスに接続される。 サービスを接続するには、「Configure'タブで機械学習プロバイダーを追加し、「Edit'アイコンをクリックする。 名前と説明、および環境が 実動前 であるか 生産であるかに加えて、以下の情報を指定する必要があります:
- クライアント ID: クライアント ID の実際の文字列値。これにより、本人確認を行い、Azure Service に対する呼び出しを認証および許可します。
- クライアント・シークレット: シークレットの実際の文字列値。これにより、本人確認を行い、Azure Service に対する呼び出しを認証および許可します。
- テナント: テナント ID は、組織に対応する Azure AD の専用インスタンスです。 テナント ID を見つけるには、アカウント名の上にカーソルを移動してディレクトリーとテナント ID を取得するか、Azure ポータルで Azure Active Directory > Properties > Directory ID 選択してください。
- サブスクリプション ID: Microsoft Azure サブスクリプションを一意に識別するサブスクリプション資格情報。 すべてのサービス呼び出しの URI に、このサブスクリプション ID が含まれます。
Microsoft Azure 資格情報の取得方法の手順に関しては、How to: Use the portal to create an Azure AD application and service principal that can access resources を参照してください。
これで、デプロイされたモデルを選択し、モニターを構成する準備ができました。 ダッシュボードに追加]をクリックすると、インサイトダッシュボードにデプロイされたモデルが表示されます。 モニターするデプロイメントを選択し、 構成をクリックしてください。
詳しくは、モニタリングの構成を参照してください。
Microsoft Azure ML Service エンジンのペイロード・ロギング
Microsoft Azure ML Service エンジンの追加
IBM以外のwatsonx.aiランタイム・エンジンはカスタムとしてバインドされ、メタデータで構成される。 IBM以外のwatsonx.aiRuntimeサービスとの直接的な統合はありません。
service_type = "azure_machine_learning_service"
added_service_provider_result = wos_client.service_providers.add(
name=SERVICE_PROVIDER_NAME,
description=SERVICE_PROVIDER_DESCRIPTION,
service_type = service_type,
credentials=AzureCredentials(
subscription_id= AZURE_ENGINE_CREDENTIALS['subscription_id'],
client_id = AZURE_ENGINE_CREDENTIALS['client_id'],
client_secret= AZURE_ENGINE_CREDENTIALS['client_secret'],
tenant = AZURE_ENGINE_CREDENTIALS['tenant']
),
background_mode=False
).result
次のコマンドを使用してサービス・バインディングを表示できます。
client.service_providers.list()
出力例:
uid name service_type created
410e730f-8462-45fe-8b41-a029d6d6043a My Azure ML Service engine azure_machine_learning_service2019-06-10T22:10:29.398Z
Microsoft Azure ML Service サブスクリプションの追加
サブスクリプションを追加します
asset_deployment_details = wos_client.service_providers.list_assets(data_mart_id=data_mart_id, service_provider_id=service_provider_id).result
asset_deployment_details
deployment_id=''
for model_asset_details in asset_deployment_details['resources']:
if model_asset_details['metadata']['guid']==deployment_id:
break
azure_asset = Asset(
asset_id=model_asset_details["entity"]["asset"]["asset_id"],
name=model_asset_details["entity"]["asset"]["name"],
url=model_asset_details["entity"]["asset"]["url"],
asset_type=model_asset_details['entity']['asset']['asset_type'] if 'asset_type' in model_asset_details['entity']['asset'] else 'model',
input_data_type=InputDataType.STRUCTURED,
problem_type=ProblemType.BINARY_CLASSIFICATION
)
deployment_scoring_endpoint = model_asset_details['entity']['scoring_endpoint']
scoring_endpoint = ScoringEndpointRequest(url = model_asset_details['entity']['scoring_endpoint']['url'],request_headers = model_asset_details['entity']['scoring_endpoint']['request_headers'],
credentials = None)
deployment = AssetDeploymentRequest(
deployment_id=model_asset_details['metadata']['guid'],
url=model_asset_details['metadata']['url'],
name=model_asset_details['entity']['name'],
description=model_asset_details['entity']['description'],
deployment_type=model_asset_details['entity']['type'],
scoring_endpoint = scoring_endpoint
)
asset_properties = AssetPropertiesRequest(
label_column="Risk ",
prediction_field='Scored Labels',
probability_fields=['Scored Probabilities'],
training_data_reference=training_data_reference,
training_data_schema=None,
input_data_schema=None,
output_data_schema=None,
)
subscription_details = wos_client.subscriptions.add(
data_mart_id=data_mart_id,
service_provider_id=service_provider_id,
asset=azure_asset,
deployment=deployment,
asset_properties=asset_properties,
background_mode=False
).result
サブスクリプション・リストを取得します
subscription_id = subscription_details.metadata.id
subscription_id
details: wos_client.subscriptions.get(subscription_id).result.to_dict()
ペイロード・ロギングの有効化
サブスクリプションでペイロード・ロギングを有効にします
payload_data_set_id = None
payload_data_set_id = wos_client.data_sets.list(type=DataSetTypes.PAYLOAD_LOGGING,
target_target_id=subscription_id,
target_target_type=TargetTypes.SUBSCRIPTION).result.data_sets[0].metadata.id
ロギングの詳細を取得します
subscription.payload_logging.get_details()
評価とペイロード・ロギング
モデルを評価します。 完全な例については、Azure Machine Learning Service エンジン・ノートブックの操作を参照してください。
ペイロード・ロギング・テーブルに要求と応答を格納します。
wos_client.data_sets.store_records(data_set_id=payload_data_set_id, request_body=[PayloadRecord(
scoring_id=str(uuid.uuid4()),
request=request_data,
response=response_data,
response_time=460
)])
Python 以外の言語の場合は、REST API を使用してペイロードをログに記録することもできます。