特徴をモニタリングする

Vertex AI Feature Store では、特徴モニタリング ジョブをスケジュールして実行し、特徴データをモニタリングし、特徴統計情報を取得し、特徴ドリフトを検出できます。特徴データをモニタリングできるのは、特徴データソースを特徴レジストリに登録している場合のみです。

特徴データをモニタリングするには、FeatureGroup リソースの下に FeatureMonitor リソースを作成します。FeatureMonitor リソースの作成時に、特徴データに対してモニタリング ジョブを定期的に実行するようにモニタリング スケジュールを構成できます。また、特徴モニタリング ジョブを手動で実行して、モニタリング スケジュール外で特徴データをモニタリングすることもできます。

実行されるモニタリング ジョブごとに、Vertex AI Feature Store は FeatureMonitorJob リソースを生成します。このリソースを取得すると、特徴統計情報と特徴データで検出されたドリフトに関する情報を表示できます。

始める前に

Vertex AI Feature Store を使用して特徴をモニタリングする前に、このセクションに記載されている前提条件を満たしてください。

特徴量データソースを登録する

特徴グループ特徴を作成して、BigQuery の特徴データソースを特徴レジストリに登録します。特徴統計情報の取得とモニタリングに使用される FeatureMonitor リソースは、特徴グループに関連付けられています。

Vertex AI に対する認証

まだ行っていない場合は、Vertex AI に対する認証を行います。

Select the tab for how you plan to use the samples on this page:

Python

ローカル開発環境でこのページの Python サンプルを使用するには、gcloud CLI をインストールして初期化し、ユーザー認証情報を使用してアプリケーションのデフォルト認証情報を設定します。

  1. Install the Google Cloud CLI.
  2. To initialize the gcloud CLI, run the following command:

    gcloud init
  3. If you're using a local shell, then create local authentication credentials for your user account:

    gcloud auth application-default login

    You don't need to do this if you're using Cloud Shell.

詳細については Set up authentication for a local development environment をご覧ください。

REST

このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。

    Install the Google Cloud CLI, then initialize it by running the following command:

    gcloud init

詳細については、 Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。

モニタリング スケジュールを使用して特徴量モニターを作成する

特徴統計情報を取得してモニタリングするには、特徴モニタリング ジョブを定期的に実行するスケジュールを指定して FeatureMonitor リソースを作成し、特徴グループに登録されている特徴の特徴統計情報を取得します。

次のサンプルを使用して、FeatureMonitor リソースを作成します。同じ特徴グループに複数のスケジュールを設定するには、複数の FeatureMonitor リソースを作成する必要があります。

REST

FeatureMonitor リソースを作成して特徴モニタリング ジョブをスケジュールするには、featureMonitors.create メソッドを使用して POST リクエストを送信します。

リクエストのデータを使用する前に、次のように置き換えます。

  • LOCATION_ID: 特徴モニタを作成するリージョン(us-central1 など)。
  • PROJECT_ID: プロジェクト ID。
  • FEATUREGROUP_NAME: 特徴モニタリングを設定する特徴グループの名前。
  • FEATURE_MONITOR_NAME: 作成する新しい特徴モニタの名前。
  • FEATURE_ID_1FEATURE_ID_2: モニタリングする特徴の ID。
  • DRIFT_THRESHOLD_1DRIFT_THRESHOLD_2: 特徴モニタに含まれる各特徴のドリフトしきい値。ドリフトしきい値は、特徴ドリフトなどの異常を検出するために使用されます。[0, 1) の範囲内の値を入力します。値を入力しない場合、しきい値はデフォルトで 0.3 に設定されます。
    Vertex AI Feature Store は、連続した特徴モニタリング ジョブの実行からのスナップショットを比較し、BigQuery の ML.TFDV_VALIDATE 関数を使用してドリフトを計算します。異常を分類するには、カテゴリ特徴にはチェビシェフ距離を使用し、数値特徴にはジェンセン・シャノン ダイバージェンスを使用します。
  • CRON: 特徴モニタリング ジョブの実行頻度を表す cron スケジュール式。詳細については、cron をご覧ください。

HTTP メソッドと URL:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors?feature_monitor_id=FEATURE_MONITOR_NAME

リクエストの本文(JSON):

{
  "feature_selection_config": {
    "feature_configs": [
      {"feature_id":"FEATURE_ID_1", "drift_threshold": "DRIFT_THRESHOLD_1" },
      {"feature_id":"FEATURE_ID_2", "drift_threshold": "DRIFT_THRESHOLD_2" }
    ],
  },
  "schedule_config": {
    "cron": "CRON"
  }
}

リクエストを送信するには、次のいずれかのオプションを選択します。

curl

リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors?feature_monitor_id=FEATURE_MONITOR_NAME"

PowerShell

リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors?feature_monitor_id=FEATURE_MONITOR_NAME" | Select-Object -Expand Content

次のような JSON レスポンスが返されます。

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.aiplatform.v1beta1.CreateFeatureMonitorOperationMetadata",
    "genericMetadata": {
      "createTime": "2024-12-15T19:35:03.975958Z",
      "updateTime": "2024-12-15T19:35:03.975958Z"
    }
  }
}

Python

このサンプルを試す前に、Vertex AI クイックスタート: クライアント ライブラリの使用にある Python の設定手順を完了してください。詳細については、Vertex AI Python API のリファレンス ドキュメントをご覧ください。

Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。

from google.cloud import aiplatform
from vertexai.resources.preview import feature_store

def create_feature_monitor_sample(
    project: str,
    location: str,
    existing_feature_group_id: str,
    feature_monitor_id: str,
    feature_selection_configs: List[Tuple[str, float]]
    schedule_config: str # Cron string. For example, "0 * * * *" indicates hourly execution.
):
    aiplatform.init(project="PROJECT_ID", location="LOCATION_ID")
    feature_group = feature_store.FeatureGroup("FEATUREGROUP_NAME")
    feature_monitor = feature_group.create_feature_monitor(
        name= "FEATURE_MONITOR_NAME",
        feature_selection_configs=[("FEATURE_ID_1", DRIFT_THRESHOLD_1),("FEATURE_ID_2", DRIFT_THRESHOLD_2)],
        schedule_config="CRON"
        )

次のように置き換えます。

  • LOCATION_ID: 特徴モニタを作成するリージョン(us-central1 など)。
  • PROJECT_ID: プロジェクト ID。
  • FEATUREGROUP_NAME: 特徴モニタリングを設定する特徴グループの名前。
  • FEATURE_MONITOR_NAME: 作成する新しい特徴モニタの名前。
  • FEATURE_ID_1FEATURE_ID_2: モニタリングする特徴の ID。
  • DRIFT_THRESHOLD_1DRIFT_THRESHOLD_2: 特徴モニターに含まれる各特徴のドリフトしきい値。ドリフトしきい値は、特徴ドリフトの検出に使用されます。01 の値を入力してください。値を入力しない場合、しきい値はデフォルトで 0.3 に設定されます。
    Vertex AI Feature Store は、現在の特徴モニタリング ジョブのデータ スナップショットを、前の特徴モニタリング ジョブのデータ スナップショットと比較します。ドリフト スコアを計算するために、Vertex AI Feature Store は BigQuery の ML.TFDV_VALIDATE 関数を使用します。
    統計の比較に使用される指標では、カテゴリ特徴にはチェビシェフ距離が、数値特徴にはジェンセン・シャノン ダイバージェンスが使用されます。
  • CRON: 特徴モニタリング ジョブの実行頻度を表す cron スケジュール式。詳細については、cron をご覧ください。

特徴量モニタリング ジョブを手動で実行する

連続してスケジュールされた特徴モニタリング ジョブ間の待機をスキップし、特徴モニタリング ジョブを手動で実行できます。これは、次回のスケジュールされたモニタリング ジョブの実行を待たずに、モニタリング情報を取得して特徴データの異常をすぐに検出する場合に便利です。

REST

FeatureMonitorJob リソースを作成して特徴モニタリング ジョブを手動で実行するには、featureMonitorJobs.create メソッドを使用して POST リクエストを送信します。

リクエストのデータを使用する前に、次のように置き換えます。

  • LOCATION_ID: 特徴モニタリング ジョブを実行するリージョン(us-central1 など)。
  • FEATUREGROUP_NAME: FeatureMonitor リソースを含む特徴グループの名前。
  • PROJECT_ID: プロジェクト ID。
  • FEATURE_MONITOR_NAME: 特徴モニタリング ジョブを実行する FeatureMonitor リソースの名前。

HTTP メソッドと URL:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_ID/featureMonitorJobs

リクエストを送信するには、次のいずれかのオプションを選択します。

curl

次のコマンドを実行します。

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d "" \
"https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_ID/featureMonitorJobs"

PowerShell

次のコマンドを実行します。

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_ID/featureMonitorJobs" | Select-Object -Expand Content

次のような JSON レスポンスが返されます。

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/featureMonitorJobs/FEATURE_MONITOR_JOB_ID"
}

Python

このサンプルを試す前に、Vertex AI クイックスタート: クライアント ライブラリの使用にある Python の設定手順を完了してください。詳細については、Vertex AI Python API のリファレンス ドキュメントをご覧ください。

Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。

from google.cloud import aiplatform
from vertexai.resources.preview import feature_store

aiplatofrm.init(project="PROJECT_ID", location="LOCATION_ID")

feature_group = FeatureGroup.get("FEATUREGROUP_NAME}")
feature_monitor = feature_group.get_feature_monitor(FEATURE_MONITOR_NAME)
feature_monitor_job = feature_monitor.create_feature_monitor_job()

次のように置き換えます。

  • LOCATION_ID: 特徴モニタリング ジョブを実行するリージョン(us-central1 など)。
  • PROJECT_ID: プロジェクト ID。
  • FEATUREGROUP_NAME: FeatureMonitor リソースを含む特徴グループの名前。
  • FEATURE_MONITOR_NAME: 特徴モニタリング ジョブを実行する FeatureMonitor リソースの名前。

モニタリング ジョブから特徴統計情報を取得する

特徴モニタリング ジョブの実行中に生成された特徴モニタリング ジョブ ID を使用して FeatureMonitorJob リソースを取得すると、特徴モニタリング ジョブ内のすべての特徴の特徴統計情報を取得できます。最新のモニタリング ジョブの特定のリソースの特徴統計情報を取得することもできます。

特徴モニタリング ジョブを一覧表示する

次のサンプルは、特定の FeatureMonitor リソース用に作成されたすべての FeatureMonitorJob リソースのリストを取得する方法を示しています。

REST

指定した FeatureMonitor リソースの FeatureMonitorJob リソースのリストを取得するには、featureMonitorJobs.list メソッドを使用して GET リクエストを送信します。

リクエストのデータを使用する前に、次のように置き換えます。

  • LOCATION_ID: Feature リソースが配置されているリージョン(us-central1 など)。
  • PROJECT_ID: プロジェクト ID。
  • FEATUREGROUP_NAME: FeatureMonitor リソースを含む特徴グループの名前。
  • FEATURE_MONITOR_NAME: 特徴モニタリング ジョブを一覧表示する FeatureMonitor リソースの名前。

HTTP メソッドと URL:

GET https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/featureMonitorJobs

リクエストを送信するには、次のいずれかのオプションを選択します。

curl

次のコマンドを実行します。

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/featureMonitorJobs"

PowerShell

次のコマンドを実行します。

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/featureMonitorJobs" | Select-Object -Expand Content

次のような JSON レスポンスが返されます。

{
  "featureMonitorJobs": [
    {
      "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/featureMonitorJobs/FEATURE_MONITOR_JOB_ID_1",
      "createTime": "2024-12-18T19:18:18.077161Z",
      "finalStatus": {},
      "featureSelectionConfig": {
        "featureConfigs": [
          {
            "featureId": "feature_name_1",
            "driftThreshold": 0.2
          },
          {
            "featureId": "feature_name_2",
            "driftThreshold": 0.2
          }
        ]
      }
    },
    {
      "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/featureMonitorJobs/FEATURE_MONITOR_JOB_ID_2",
      "createTime": "2024-12-19T19:18:30.859921Z",
      "finalStatus": {},
      "featureSelectionConfig": {
        "featureConfigs": [
          {
            "featureId": "feature_name_1",
            "driftThreshold": 0.2
          },
          {
            "featureId": "feature_name_2",
            "driftThreshold": 0.2
          }
        ]
      }
    }
  ]
}

Python

このサンプルを試す前に、Vertex AI クイックスタート: クライアント ライブラリの使用にある Python の設定手順を完了してください。詳細については、Vertex AI Python API のリファレンス ドキュメントをご覧ください。

Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。

from google.cloud import aiplatform
from vertexai.resources.preview import feature_store

aiplatofrm.init(project="PROJECT_ID", location="LOCATION_ID")

feature_group = FeatureGroup.get("FEATUREGROUP_NAME")
feature_monitor = feature_group.get_feature_monitor(FEATURE_MONITOR_NAME)
feature_monitor_jobs = feature_monitor.list_feature_monitor_jobs()

次のように置き換えます。

  • LOCATION_ID: Feature リソースが配置されているリージョン(us-central1 など)。
  • PROJECT_ID: プロジェクト ID。
  • FEATUREGROUP_NAME: FeatureMonitor リソースを含む特徴グループの名前。
  • FEATURE_MONITOR_NAME: 特徴モニタリング ジョブを一覧表示する FeatureMonitor リソースの名前。

モニタリング ジョブの特徴統計情報を表示する

次のサンプルは、特徴モニタリング ジョブ内のすべての特徴の特徴統計情報を表示する方法を示しています。特徴ごとに、統計情報と異常が FeatureNameStatistics 形式で表示されます。

REST

FeatureMonitorJob リソースを取得してモニタリング ジョブの特徴統計情報を表示するには、featureMonitorJobs.get メソッドを使用して GET リクエストを送信します。

リクエストのデータを使用する前に、次のように置き換えます。

  • LOCATION_ID: 特徴モニタリング ジョブが実行されたリージョン(us-central1 など)。
  • PROJECT_ID: プロジェクト ID。
  • FEATUREGROUP_NAME: FeatureMonitor リソースを含む特徴グループの名前。
  • FEATURE_MONITOR_NAME: 特徴モニタリング ジョブが実行された FeatureMonitor リソースの名前。
  • FEATURE_MONITOR_JOB_ID: 取得する FeatureMonitorJob リソースの ID。

HTTP メソッドと URL:

GET https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/featureMonitorJobs/FEATURE_MONITOR_JOB_ID

リクエストを送信するには、次のいずれかのオプションを選択します。

curl

次のコマンドを実行します。

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/featureMonitorJobs/FEATURE_MONITOR_JOB_ID"

PowerShell

次のコマンドを実行します。

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/featureMonitorJobs/FEATURE_MONITOR_JOB_ID" | Select-Object -Expand Content

次のような JSON レスポンスが返されます。

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/featureMonitorJobs/FEATURE_MONITOR_JOB_ID",
  "createTime": "2024-12-19T19:18:18.077161Z",
  "finalStatus": {},
  "jobSummary": {
    "featureStatsAndAnomalies": [
      {
        "featureId": "feature_id_1",
        "featureStats": {
          "name": "feature_name_1",
          "type": "STRING",
          "stringStats": {
            "commonStats": {
              "numNonMissing": "6",
              "minNumValues": "1",
              "maxNumValues": "1",
              "avgNumValues": 1,
              "numValuesHistogram": {
                "buckets": [
                  {
                    "lowValue": 1,
                    "highValue": 1,
                    "sampleCount": 0.6
                  },
                  {
                    "lowValue": 1,
                    "highValue": 1,
                    "sampleCount": 0.6
                  }
                ],
                "type": "QUANTILES"
              },
              "totNumValues": "6"
            },
            "unique": "2",
            "topValues": [
              {
                "value": "59",
                "frequency": 2
              },
              {
                "value": "19",
                "frequency": 1
              }
            ],
            "avgLength": 2,
            "rankHistogram": {
              "buckets": [
                {
                  "label": "59",
                  "sampleCount": 2
                },
                {
                  "lowRank": "1",
                  "highRank": "1",
                  "label": "19",
                  "sampleCount": 1
                }
              ]
            }
          }
        },
        "statsTime": "2024-12-19T19:18:18.077161Z",
        "featureMonitorJobId": "FEATURE_MONITOR_JOB_ID",
        "featureMonitorId": "FEATURE_MONITOR_NAME"
      },
      {
        "featureId": "feature_id_2",
        "featureStats": {
          "name": "feature_name_1",
          "type": "STRING",
          "stringStats": {
            "commonStats": {
              "numNonMissing": "6",
              "minNumValues": "1",
              "maxNumValues": "1",
              "avgNumValues": 1,
              "numValuesHistogram": {
                "buckets": [
                  {
                    "lowValue": 1,
                    "highValue": 1,
                    "sampleCount": 0.6
                  },
                  {
                    "lowValue": 1,
                    "highValue": 1,
                    "sampleCount": 0.6
                  }
                ],
                "type": "QUANTILES"
              },
              "totNumValues": "6"
            },
            "unique": "2",
            "topValues": [
              {
                "value": "59",
                "frequency": 2
              },
              {
                "value": "19",
                "frequency": 1
              }
            ],
            "avgLength": 2,
            "rankHistogram": {
              "buckets": [
                {
                  "label": "59",
                  "sampleCount": 2
                },
                {
                  "lowRank": "1",
                  "highRank": "1",
                  "label": "19",
                  "sampleCount": 1
                }
              ]
            }
          }
        },
        "statsTime": "2024-12-19T19:18:18.077161Z",
        "featureMonitorJobId": "FEATURE_MONITOR_JOB_ID",
        "featureMonitorId": "FEATURE_MONITOR_NAME"
      }
    ]
  },
  "driftBaseFeatureMonitorJobId": "2250003330000300000",
  "driftBaseSnapshotTime": "2024-12-12T16:00:01.211686Z",
  "featureSelectionConfig": {
    "featureConfigs": [
      {
        "featureId": "feature_id_1",
        "driftThreshold": 0.2
      },
      {
        "featureId": "feature_id_2",
        "driftThreshold": 0.2
      }
    ]
  },
  "triggerType": "FEATURE_MONITOR_JOB_TRIGGER_ON_DEMAND"
}

Python

このサンプルを試す前に、Vertex AI クイックスタート: クライアント ライブラリの使用にある Python の設定手順を完了してください。詳細については、Vertex AI Python API のリファレンス ドキュメントをご覧ください。

Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。

from google.cloud import aiplatform
from vertexai.resources.preview import feature_store

aiplatofrm.init(project="PROJECT_ID", location="LOCATION_ID")
feature_group = FeatureGroup.get("FEATUREGROUP_NAME"})

feature_monitor = feature_group.get_feature_monitor("FEATURE_MONITOR_NAME")
feature_monitor_job = feature_monitor.get_feature_monitor_job("FEATURE_MONITOR_JOB_ID)")

# Retrieve feature stats and anomalies
feature_stats_and_anomalies = feature_monitor_job.feature_stats_and_anomalies
print(feature_stats_and_anomalies)

次のように置き換えます。

  • LOCATION_ID: 特徴モニタリング ジョブが実行されたリージョン(us-central1 など)。
  • PROJECT_ID: プロジェクト ID。
  • FEATUREGROUP_NAME: FeatureMonitor リソースを含む特徴グループの名前。
  • FEATURE_MONITOR_NAME: 特徴モニタリング ジョブが実行された FeatureMonitor リソースの名前。
  • FEATURE_MONITOR_JOB_ID: 取得する FeatureMonitorJob リソースの ID。

特徴の特徴統計情報を表示する

特定の特徴の詳細を取得し、統計情報を取得するモニタリング ジョブの数を指定して、最近実行された特徴モニタリング ジョブから特定の特徴の特徴統計情報を取得できます。統計情報と異常は FeatureNameStatistics 形式で表示されます。

次のサンプルは、指定した数の最近の特徴モニタリング ジョブから特定の特徴の特徴統計情報を表示する方法を示しています。

REST

Feature リソース内の特定の特徴の特徴統計情報を表示するには、features.get メソッドを使用して GET リクエストを送信し、統計情報を取得するモニタリング ジョブの数を指定します。

リクエストのデータを使用する前に、次のように置き換えます。

  • LOCATION_ID: 特徴モニタリング ジョブが実行されたリージョン(us-central1 など)。
  • PROJECT_ID: プロジェクト ID。
  • FEATUREGROUP_NAME: 特徴を含む特徴グループの名前。
  • FEATURE_NAME: 特徴統計情報を取得する Feature リソースの名前。
  • LATEST_STATS_COUNT: 特徴統計情報を取得する最新のモニタリング ジョブの数。

HTTP メソッドと URL:

GET https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/features/FEATURE_NAME?feature_stats_and_anomaly_spec.latest_stats_count=LATEST_STATS_COUNT

リクエストを送信するには、次のいずれかのオプションを選択します。

curl

次のコマンドを実行します。

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/features/FEATURE_NAME?feature_stats_and_anomaly_spec.latest_stats_count=LATEST_STATS_COUNT"

PowerShell

次のコマンドを実行します。

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/features/FEATURE_NAME?feature_stats_and_anomaly_spec.latest_stats_count=LATEST_STATS_COUNT" | Select-Object -Expand Content

次のような JSON レスポンスが返されます。

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/features/FEATURE_NAME",
  "createTime": "2024-12-19T21:17:23.373559Z",
  "updateTime": "2024-12-19T21:17:23.373559Z",
  "etag": "sample_etag",
  "featureStatsAndAnomaly": [
    {
      "featureStats": {
        "name": "FEATURE_NAME",
        "type": "STRING",
        "stringStats": {
          "commonStats": {
            "numNonMissing": "4",
            "minNumValues": "1",
            "maxNumValues": "1",
            "avgNumValues": 1,
            "numValuesHistogram": {
              "buckets": [
                {
                  "lowValue": 1,
                  "highValue": 1,
                  "sampleCount": 0.4
                },
                {
                  "lowValue": 1,
                  "highValue": 1,
                  "sampleCount": 0.4
                },
                {
                  "lowValue": 1,
                  "highValue": 1,
                  "sampleCount": 0.4
                },
                {
                  "lowValue": 1,
                  "highValue": 1,
                  "sampleCount": 0.4
                }
              ],
              "type": "QUANTILES"
            },
            "totNumValues": "4"
          },
          "unique": "4",
          "topValues": [
            {
              "value": "feature_value_1",
              "frequency": 1
            },
            {
              "value": "feature_value_2",
              "frequency": 1
            },
            {
              "value": "feature_value_3",
              "frequency": 1
            },
            {
              "value": "feature_value_4",
              "frequency": 1
            }
          ],
          "avgLength": 4,
          "rankHistogram": {
            "buckets": [
              {
                "label": "label_1",
                "sampleCount": 1
              },
              {
                "lowRank": "1",
                "highRank": "1",
                "label": "label_2",
                "sampleCount": 1
              },
              {
                "lowRank": "2",
                "highRank": "2",
                "label": "label_3",
                "sampleCount": 1
              },
              {
                "lowRank": "3",
                "highRank": "3",
                "label": "label_4",
                "sampleCount": 1
              }
            ]
          }
        }
      },
      "driftDetectionThreshold": 0.1,
      "statsTime": "2024-12-19T22:00:02.734796Z",
      "featureMonitorJobId": "feature_monitor_job_id_1",
      "featureMonitorId": "feature_monitor_name_1"
    }
  ],
  "versionColumnName": "version_column_name"
}

Python

このサンプルを試す前に、Vertex AI クイックスタート: クライアント ライブラリの使用にある Python の設定手順を完了してください。詳細については、Vertex AI Python API のリファレンス ドキュメントをご覧ください。

Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。

from google.cloud import aiplatform
from vertexai.resources.preview import feature_store

aiplatofrm.init(project="PROJECT_ID", location="LOCATION_ID")

feature_group = FeatureGroup.get("FEATUREGROUP_NAME"})
feature_stats_and_anomalies = feature_group.get_feature("FEATURE_NAME", latest_stats_count=LATEST_STATS_COUNT)
print(feature_stats_and_anomalies)

次のように置き換えます。

  • LOCATION_ID: 特徴モニタリング ジョブが実行されたリージョン(us-central1 など)。
  • PROJECT_ID: プロジェクト ID。
  • FEATUREGROUP_NAME: FeatureMonitor リソースを含む特徴グループの名前。
  • FEATURE_NAME: 特徴統計情報を取得する特徴の名前。
  • LATEST_STATS_COUNT: 特徴統計情報を取得する最新のモニタリング ジョブの数。

ユースケースの例: 特徴モニタリングを使用して特徴ドリフトを検出する

特徴モニタリングを使用すると、特徴ドリフトと呼ばれる特徴データの異常を検出できます。ドリフトとは、時間の経過とともに BigQuery 内の特徴データに予期しない大きな変化が生じることを指します。Vertex AI Feature Store は、モニタリング ジョブの実行時のスナップショットを、前のモニタリング ジョブの実行時のデータ スナップショットと比較することで、特徴のドリフトを特定するのに役立ちます。

特徴モニタに含まれる特徴について、2 つのスナップショットの差が drift_threshold パラメータで指定されたしきい値を超えると、Vertex AI Feature Store は特徴のドリフトを特定し、FeatureMonitorJob リソースに次の情報を返します。

  • driftDetected パラメータが true に設定されている。

  • 2 つのスナップショット間の分布の偏差。数値特徴の場合、Vertex AI Feature Store はジェンセン・シャノン ダイバージェンスを使用してこの値を計算します。カテゴリ特徴の場合、Vertex AI Feature Store はチェビシェフ距離を使用してこの値を計算します。

  • ドリフト スコアによって超過したしきい値。

次のサンプルは、FeatureMonitorJob リソースを取得して、ドリフトが検出されたかどうかを確認する方法を示しています。

REST

FeatureMonitorJob リソースを取得するには、featureMonitorJobs.get メソッドを使用して GET リクエストを送信します。

リクエストのデータを使用する前に、次のように置き換えます。

  • LOCATION_ID: 特徴モニタリング ジョブが実行されたリージョン(us-central1 など)。
  • PROJECT_ID: プロジェクト ID。
  • FEATUREGROUP_NAME: FeatureMonitor リソースを含む特徴グループの名前。
  • FEATURE_MONITOR_NAME: 特徴モニタリング ジョブが実行された FeatureMonitor リソースの名前。
  • FEATURE_MONITOR_JOB_ID: 取得する FeatureMonitorJob リソースの ID。

HTTP メソッドと URL:

GET https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/featureMonitorJobs/FEATURE_MONITOR_JOB_ID

リクエストを送信するには、次のいずれかのオプションを選択します。

curl

次のコマンドを実行します。

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/featureMonitorJobs/FEATURE_MONITOR_JOB_ID"

PowerShell

次のコマンドを実行します。

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/featureMonitorJobs/FEATURE_MONITOR_JOB_ID" | Select-Object -Expand Content

次のような JSON レスポンスが返されます。

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/featureMonitorJobs/FEATURE_MONITOR_JOB_ID",
  "createTime": "2024-12-14T19:45:30.026522Z",
  "finalStatus": {},
  "jobSummary": {
    "featureStatsAndAnomalies": [
      {
        "featureId": "feature_id_1",
        "featureStats": {
          "name": "feature_name_1",
          "type": "STRING",
          "stringStats": {
            "commonStats": {
              "numNonMissing": "3",
              "minNumValues": "1",
              "maxNumValues": "1",
              "avgNumValues": 1,
              "numValuesHistogram": {
                "buckets": [
                  {
                    "lowValue": 1,
                    "highValue": 1,
                    "sampleCount": 0.9
                  },
                  {
                    "lowValue": 1,
                    "highValue": 1,
                    "sampleCount": 0.9
                  },
                  {
                    "lowValue": 1,
                    "highValue": 1,
                    "sampleCount": 0.9
                  }
                ],
                "type": "QUANTILES"
              },
              "totNumValues": "3"
            },
            "unique": "3",
            "topValues": [
              {
                "value": "sample_value_1",
                "frequency": 1
              },
              {
                "value": "sample_value_2",
                "frequency": 1
              },
              {
                "value": "sample_value_3",
                "frequency": 1
              }
            ],
            "avgLength": 3,
            "rankHistogram": {
              "buckets": [
                {
                  "label": "sample_label_1",
                  "sampleCount": 1
                },
                {
                  "lowRank": "1",
                  "highRank": "1",
                  "label": "sample_label_2",
                  "sampleCount": 1
                },
                {
                  "lowRank": "2",
                  "highRank": "3",
                  "label": "sample_label_3",
                  "sampleCount": 1
                }
              ]
            }
          }
        },
        "distributionDeviation": 0.1388880008888000,
        "driftDetectionThreshold": 0.1,
        "driftDetected": true,
        "statsTime": "2024-12-15T19:45:37.026522Z",
        "featureMonitorJobId": "FEATURE_MONITOR_JOB_ID",
        "featureMonitorId": "FEATURE_MONITOR_NAME"
      }
    ]
  },
  "driftBaseFeatureMonitorJobId": "2250003330000300000",
  "driftBaseSnapshotTime": "2024-12-12T18:18:18.077161Z",
  "description": "sample_feature_monitor_job_description",
  "featureSelectionConfig": {
    "featureConfigs": [
      {
        "featureId": "feature_name",
        "driftThreshold": 0.1
      }
    ]
  },
  "triggerType": "FEATURE_MONITOR_JOB_TRIGGER_ON_DEMAND"
}

Python

このサンプルを試す前に、Vertex AI クイックスタート: クライアント ライブラリの使用にある Python の設定手順を完了してください。詳細については、Vertex AI Python API のリファレンス ドキュメントをご覧ください。

Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。

from google.cloud import aiplatform
from vertexai.resources.preview import feature_store

aiplatofrm.init(project="PROJECT_ID", location="LOCATION_ID")
feature_group = FeatureGroup.get("FEATUREGROUP_NAME"})
feature_monitor = feature_group.get_feature_monitor("FEATURE_MONITOR_NAME")
feature_monitor_job = feature_monitor.get_feature_monitor_job("FEATURE_MONITOR_JOB_ID)")

# Retrieve feature stats and anomalies
feature_stats_and_anomalies = feature_monitor_job.feature_stats_and_anomalies
print(feature_stats_and_anomalies)

# Check whether drifts are detected
for feature_stats_and_anomalies in feature_monitor_job.feature_stats_and_anomalies:
    print("feature: ", feature_stats_and_anomalies.feature_id)
    print("drift score: ", feature_stats_and_anomalies.distribution_deviation)
    print("drift detected: ", feature_stats_and_anomalies.drift_detected)

次のように置き換えます。

  • LOCATION_ID: 特徴モニタリング ジョブが実行されたリージョン(us-central1 など)。
  • PROJECT_ID: プロジェクト ID。
  • FEATUREGROUP_NAME: FeatureMonitor リソースを含む特徴グループの名前。
  • FEATURE_MONITOR_NAME: 特徴モニタリング ジョブが実行された FeatureMonitor リソースの名前。
  • FEATURE_MONITOR_JOB_ID: 取得する FeatureMonitorJob リソースの ID。