このページでは、Vertex AI Model Monitoring の概要について説明します。Vertex AI Model Monitoring を有効にするには、Model Monitoring の使用をご覧ください。
概要
本番環境にデプロイされたモデルは、トレーニング データに類似した予測入力データに対して最高のパフォーマンスを発揮します。入力データがモデルのトレーニングに使用するデータから外れると、モデル自体に変化がなくても、モデルのパフォーマンスは低下する可能性があります。
モデルのパフォーマンスを維持するため、Model Monitoring はモデルの予測入力データをモニタリングし、特徴のスキューとドリフトをモニタリングします。
トレーニング / サービング スキューは、本番環境での特徴データの分布が、モデルのトレーニングに使用される特徴データの分布と異なる場合に発生します。元のトレーニング データを利用できる場合は、スキュー検出を有効にして、モデルのトレーニング / サービング スキューをモニタリングできます。
予測ドリフトは、本番環境において特徴データの分布が時間の経過とともに大きく変化した場合に発生します。元のトレーニング データが利用できない場合は、ドリフト検出を有効にして、時間の経過に伴う入力データの変化をモニタリングします。
スキュー検出とドリフト検出の両方を有効にできます。
Model Monitoring では、カテゴリ特徴と数値特徴に対する特徴のスキューとドリフトを検出できます。
カテゴリ特徴は取り得る値の数によって制限されるデータで、通常は定性的性質によって分類されます。たとえば、商品タイプ、国、顧客タイプなどのカテゴリがあります。
数値特徴とは、任意の数値を持つことができるデータです。たとえば、重量や高さなどです。
トレーニング / サービング スキューと予測ドリフトの計算
Model Monitoring は、次のプロセスを使用して、トレーニング / サービング スキューまたは予測ドリフトの特徴をモニタリングします。
ベースラインの統計的分布を計算します。
スキュー検出の場合、ベースラインはトレーニング データ内の特徴が持つ値の統計的分布です。
ドリフト検出の場合、ベースラインは、直近に本番環境で確認された特徴が持つ値の統計的分布です。
カテゴリ特徴と数値特徴の分布は次のように計算されます。
カテゴリ特徴の場合、計算される分布は、特徴が取り得る値それぞれのインスタンスの数か割合になります。
数値特徴の場合、Model Monitoring は取り得る特徴値の範囲を等間隔に分割し、各間隔ごとに該当する特徴値の数や割合を計算します。
本番環境で確認された最新の特徴値の統計的分布を計算します。
距離スコアを計算して、本番環境の最新の特徴値の分布をベースライン分布と比較します。
カテゴリ特徴の場合、距離スコアはチェビシェフ距離を使用して計算されます。
数値特徴の場合、距離スコアはジェンセン・シャノン ダイバージェンスを使用して計算されます。
2 つの統計的分布間の距離スコアが指定のしきい値を超えると、Model Monitoring はそれをスキューまたはドリフトと判断します。
次の例は、カテゴリ特徴のベースラインと最新の分布の間のスキューまたはドリフトを示しています。
ベースライン分布
最新の分布
次の例は、数値特徴のベースライン分布と最新の分布の間のスキューまたはドリフトを示しています。
ベースライン分布
最新の分布
Model Monitoring を使用する際の考慮事項
コスト効率を高めるために、予測リクエストのサンプリング レートを設定して、モデルに対する本番環境の入力のサブセットをモニタリングできます。
デプロイされたモデルに最近記録された入力のスキューまたはドリフトをモニタリングする頻度を設定できます。モニタリングの頻度によって、各モニタリング実行で分析されるログデータの期間(モニタリング ウィンドウ サイズ)が決まります。
モニタリング対象の特徴ごとにアラートのしきい値を指定できます。入力特徴の分布と対応するベースライン間の統計的距離が指定のしきい値を超えると、アラートがログに記録されます。デフォルトでは、すべてのカテゴリ特徴と数値特徴がモニタリングされ、しきい値は 0.3 になります。
オンライン予測エンドポイントは、複数のモデルをホストできます。エンドポイントでスキューまたはドリフトの検出を有効にすると、そのエンドポイントでホストされているすべてのモデルで、次の構成パラメータが共有されます。
- 検出のタイプ
- モニタリング頻度
- モニタリングされた入力リクエストの割合
その他の構成パラメータでは、モデルごとに異なる値を設定できます。
入力スキーマを使用したデータの解析
特徴値を取得するため、Model Monitoring は、モデルに対するオンライン予測リクエストのペイロードを解析します。入力スキーマは、入力ペイロードを正しく解析する方法を Model Monitoring に指示します。
AutoML モデルの場合、入力スキーマは自動的に解析されますが、Key-Value 入力形式を使用しないカスタム トレーニング モデルの場合は入力スキーマの指定が必要になることがあります。
自動スキーマ解析
通常、スキュー検出またはドリフト検出を有効にすると、Model Monitoring は入力スキーマを自動的に解析します。自動スキーマ解析の場合、Model Monitoring は最初の 1,000 個の入力リクエストを分析してスキーマを決定します。
自動スキーマ解析は、入力リクエストが Key-Value ペアの形式の場合に最適です。ここで、"key"
は特徴の名前、"value"
は特徴の値です。例:
"key":"value"
{"TenYearCHD":"0", "glucose":"5.4", "heartRate":"1", "age":"30", "prevalentStroke":"0", "gender":"f", "ethnicity":"latin american"}
入力が "key":"value"
形式でない場合、Model Monitoring は各特徴のデータ型を識別して、各入力にデフォルトの特徴名を自動的に割り当てます。
入力を解析するカスタム インスタンス スキーマ
Model Monitoring ジョブを作成するときに、独自の入力スキーマを指定すると、Model Monitoring でモデルの入力が正しく解析されます。
このスキーマは分析インスタンスのスキーマと呼ばれます。スキーマ ファイルは、入力ペイロードの形式、各特徴の名前、各特徴のタイプを指定します。
スキーマは、Open API スキーマ形式で YAML ファイルとして記述される必要があります。例:
type: object properties: BMI: type: number BPMeds: type: string TenYearCHD: type: string age: type: string cigsPerDay: type: array items: type: string required: - age - BMI - TenYearCHD - cigsPerDay - BPMeds
type
は、予測リクエストが次のいずれかの形式であることを示しています。- オブジェクト: Key-Value ペア
- 配列: 配列のようなもの
- 文字列: csv 文字列
properties
は個々の特徴のタイプを示しています。リクエストが配列形式または csv 文字列形式の場合は、各リクエストで特徴が表示される順序を
required
フィールドに指定します。
予測リクエストが配列形式または csv 文字列形式の場合、欠損特徴を null 値として表現します。たとえば、5 つの特徴を含む予測リクエストについて考えてみます。
[feature_a, feature_b, feature_c, feature_d, feature_e]
feature_c
で欠損値が許容される場合、feature_c
が欠損しているサンプル リクエストは、{[1, 2, , 4, 6]}
のようになります。リストの長さは 5 のままで、その中央に null 値が 1 つあります。
次のステップ
- モデルのスキューとドリフトの検出を有効にする。
- Colab でサンプル ノートブックを試すか、GitHub で表示する。
- TensorFlow データ検証異常リファレンスを見る。