特徴アトリビューションのスキューとドリフトをモニタリングする

このページでは、Vertex Explainable AI で Vertex AI Model Monitoring を使用して、カテゴリ入力特徴と数値入力特徴の特徴アトリビューションのスキューとドリフトを検出する方法について説明します。

特徴アトリビューション ベースのモニタリングの概要

特徴アトリビューションは、モデル内の各特徴が各インスタンスの予測にどの程度影響を及ぼしたかを示します。予測をリクエストすると、モデルに適した予測値を得られます。説明をリクエストすると、予測に加えて、特徴アトリビューションの情報を得られます。

アトリビューション スコアは、その特徴のモデルの予測への寄与度に比例します。これらは通常プラスマイナスの符号が付いており、ある特徴が予測の確度を上げたか下げたかを示します。すべての特徴のアトリビューションはモデルの予測スコアに加算される必要があります。

Model Monitoring は、特徴アトリビューションをモニタリングすることで、モデルの予測に対する特徴の影響の推移を追跡します。多くの場合、主要な特徴のアトリビューション スコアの変化は、モデルの予測の正確さに影響する変化があった可能性を示します。

モデルに元のトレーニング データセットを提供する場合は、スキュー検出を有効にできます。それ以外の場合は、ドリフト検出を有効にする必要があります。詳細については、Vertex AI Model Monitoring の概要をご覧ください。

前提条件

Vertex Explainable AI で Model Monitoring を使用するには、次の手順を行います。

  1. スキュー検出を有効にする場合は、トレーニング データ、またはトレーニング データセットのバッチ説明ジョブの出力を Cloud Storage または BigQuery にアップロードします。データの URI リンクを取得します。ドリフト検出の場合、トレーニング データまたは説明ベースラインは必要ありません。

  2. Vertex AI で、表形式の AutoML またはインポートされたカスタム トレーニングのいずれかのタイプのモデルを使用できるようにします。

Vertex Explainable AI を使用するようにモデルを構成する

カスタム トレーニング モデルで特徴アトリビューションのモニタリングを有効にするには、モデルの作成、インポート、またはデプロイを行うときに、Vertex Explainable AI を使用するようにモデルを構成します。

  1. ExplanationSpec.ExplanationParameters フィールドに入力します。

  2. ExplanationConfig.enableFeatureAttributes フィールドを true に設定します。

  3. (スキュー検出の場合のみ必須)次のいずれかを指定して、ExplanationConfig.explanationBaseline フィールドを指定します。

スキュー検出またはドリフト検出を有効にする

スキュー検出またはドリフト検出を設定するには、モデルのデプロイのモニタリング ジョブを作成します。

コンソール

Google Cloud コンソールを使用してモデルのデプロイのモニタリング ジョブを作成するには、エンドポイントを作成します。

  1. Google Cloud Console で、Vertex AI の [エンドポイント] ページに移動します。

    [エンドポイント] に移動

  2. [エンドポイントの作成] をクリックします。

  3. [新しいエンドポイント] ペインで、エンドポイントの名前を指定して、リージョンを設定します。

  4. [続行] をクリックします。

  5. [モデル名] フィールドで、インポートされたカスタム トレーニングまたは表形式の AutoML モデルを選択します。

  6. [バージョン] フィールドで、モデルのバージョンを選択します。

  7. [続行] をクリックします。

  8. [モデルのモニタリング] ペインで、[このエンドポイントのモデルのモニタリングを有効にする] がオンになっていることを確認します。構成したモニタリングの設定は、このエンドポイントにデプロイされたすべてのモデルに適用されます。

  9. モニタリング ジョブの表示名を入力します。

  10. [続行] をクリックします。[モニタリングの目標] ペインが開き、スキュー検出またはドリフト検出のオプションが表示されます。

    スキュー検出

    1. [トレーニング サービング スキューの検出] を選択します。
    2. [トレーニング データソース] で、トレーニング データソースを入力します。
    3. [ターゲット列] に、モデルをトレーニングして予測するトレーニング データの列名を入力します。このフィールドはモニタリング分析から除外されます。
    4. (省略可)[アラートのしきい値] で、アラートをトリガーするしきい値を指定します。しきい値の形式については、 ヘルプアイコンの上にポインタを置いてください。
    5. [作成] をクリックします。

    ドリフト検出

    1. [予測ドリフト検出] を選択します。
    2. (省略可)[アラートのしきい値] で、アラートをトリガーするしきい値を指定します。しきい値の形式については、 ヘルプアイコンの上にポインタを置いてください。
    3. [作成] をクリックします。

gcloud

gcloud CLI を使用してモデルデプロイのモニタリング ジョブを作成するには、まず、エンドポイントにモデルをデプロイします。

モニタリング ジョブの構成は、エンドポイントにデプロイされたすべてのモデルに適用されます。

gcloud ai model-monitoring-jobs create コマンドを実行します。

gcloud ai model-monitoring-jobs create \
  --project=PROJECT_ID \
  --region=REGION \
  --display-name=MONITORING_JOB_NAME \
  --emails=EMAIL_ADDRESS_1,EMAIL_ADDRESS_2 \
  --endpoint=ENDPOINT_ID \
  --feature-thresholds=FEATURE_1=THRESHOLD_1,FEATURE_2=THRESHOLD_2 \
  --prediction-sampling-rate=SAMPLING_RATE \
  --monitoring-frequency=MONITORING_FREQUENCY \
  --target-field=TARGET_FIELD \
  --bigquery-uri=BIGQUERY_URI

ここで

  • PROJECT_ID は、Google Cloud プロジェクトの ID です。例: my-project

  • REGION は、モニタリング ジョブのロケーションです。例: us-central1

  • MONITORING_JOB_NAME は、モニタリング ジョブの名前です。例: my-job

  • EMAIL_ADDRESS は、Model Monitoring からアラートを受け取るメールアドレスです。例: example@example.com

  • ENDPOINT_ID は、モデルがデプロイされるエンドポイントの ID です。例: 1234567890987654321

  • (省略可)FEATURE_1=THRESHOLD_1 は、モニタリングする各特徴のアラートしきい値です。例: housing-latitude=0.4入力特徴の分布と対応するベースライン間の[統計的距離][stat-distance]が指定のしきい値を超えると、アラートがログに記録されます。デフォルトでは、すべてのカテゴリ特徴と数値特徴がモニタリングされ、しきい値は 0.3 になります。

  • (省略可)SAMPLING_RATE は、ログに記録する受信予測リクエストの割合です。例: 0.5指定しない場合、Model Monitoring はすべての予測リクエストをログに記録します。

  • (省略可)MONITORING_FREQUENCY は、最近ログに記録された入力に対してモニタリング ジョブを実行する頻度です。最小粒度は 1 時間です。デフォルトは 24 時間です。例: 2

  • (スキュー検出の場合のみ必須)TARGET_FIELD は、モデルによって予測されるフィールドです。このフィールドはモニタリング分析から除外されます。例: housing-price

  • (スキュー検出の場合のみ必須)BIGQUERY_URI は、次の形式で BigQuery に保存されているトレーニング データセットへのリンクです。

    bq://\PROJECT.\DATASET.\TABLE
    

    例: bq://\my-project.\housing-data.\san-francisco

    bigquery-uri フラグは、トレーニング データセットへの代替リンクに置き換えることができます。

    • Cloud Storage バケットに保存されている CSV ファイルの場合は、--data-format=csv --gcs-uris=gs://BUCKET_NAME/OBJECT_NAME を使用します。

    • Cloud Storage バケットに保存されている TFRecord ファイルの場合は、--data-format=tf-record --gcs-uris=gs://BUCKET_NAME/OBJECT_NAME を使用します。

    • [表形式の AutoML マネージド データセット][dataset-id]の場合は、--dataset=DATASET_ID を使用します。

Python SDK

エンドツーエンドの Model Monitoring API ワークフローの詳細については、サンプル ノートブックをご覧ください。

REST API

スキュー検出またはドリフト検出の詳細については、Vertex AI REST リファレンスの projects.locations.modelDeploymentMonitoringJobs をご覧ください。

モニタリング ジョブが作成されると、Model Monitoring は、PROJECT_ID.model_deployment_monitoring_ENDPOINT_ID.serving_predict という名前の生成された BigQuery テーブルに受信予測リクエストを記録します。リクエスト / レスポンス ロギングが有効になっている場合、Model Monitoring は、リクエスト / レスポンス ロギングと同じ BigQuery テーブルに受信リクエストを記録します。

次の省略可能なタスクを行う方法については、Model Monitoring の使用をご覧ください。

  • Model Monitoring ジョブを更新する

  • モデル モニタリング ジョブのアラートを構成する。

  • 異常値に対するアラートを構成する。

スキューデータとドリフトデータを分析する

Google Cloud コンソールを使用すると、モニタリング対象の各特徴のアトリビューションを可視化し、スキューやドリフトの原因となった変化を特定できます。特徴値の分布は、時系列またはヒストグラムとして表示できます。

スキュー検出のための予測データ特徴アトリビューションとトレーニング データ特徴アトリビューションの例を示すスコアカード

安定版の機械学習システムでは、特徴量の相対的な重要度は時間の経過とともに比較的安定します。重要な特徴の重要度が低い場合、その特徴についてなんらかの変更が発生した可能性があります。特徴量のドリフトまたはスキューの一般的な原因は次のとおりです。

  • データソースの変更。
  • データスキーマとロギングの変更。
  • エンドユーザー ミックスや行動の変化(季節的な変化や外れ値イベントなど)。
  • 別の機械学習モデルによって生成された特徴のアップストリームの変更。以下に例を示します。
    • カバレッジ(全体または個別の分類値)の増減を引き起こすモデルの更新。
    • モデルのパフォーマンスの変化(特徴の意味が変化する)。
    • データ パイプラインの更新。全体的なカバレッジが低下することがあります。

特徴アトリビューションのスキューとドリフトデータを分析する際は、次の点も考慮してください。

  • 重要度の高い特徴を追跡する。ある特徴のアトリビューションが大きく変化した場合は、その特徴の予測に対する寄与度が変化したことを意味します。予測スコアは特徴量の寄与の合計と等しいため、アトリビューションの大きなドリフト(特に重要な特徴の場合)は、通常、モデル予測の大きなドリフトを示します。

  • すべての特徴表現をモニタリングする。特徴アトリビューションは、基になる特徴タイプにかかわらず、常に数値です。その加法的な性質から、多次元的な特徴(エンベディングなど)のアトリビューションを次元を越えて合計することで、単一の数値に集約できます。これにより、すべての特徴タイプで標準的な一変量のドリフト検出方法を使用できます。

  • 特徴の相互作用を考慮する。ある特徴のアトリビューションは、その特徴単独での予測に対する寄与度と、他の特徴との相互作用を通じた寄与度の両方を説明します。ある特徴と他の特徴との相互作用が変化すると、その特徴の周辺分布が変わらなくても、特徴のアトリビューションの分布が変化します。

  • 特徴グループをモニタリングする。アトリビューションは加法的なので、関連する複数の特徴のアトリビューションを加算して特徴グループのアトリビューションを得ることができます。たとえば、クレジット融資モデルでは、融資タイプに関連するすべての特徴(たとえば、「grad」、「sub_grad」、「purpose」)のアトリビューションを加算して単一の融資アトリビューションを算出できます。その後、このグループレベルのアトリビューションを追跡して特徴グループの変化をモニタリングできます。

次のステップ