特徴グループを作成する

特徴グループは、特徴データを含む BigQuery テーブルまたはビューに関連付けられている 特徴レジストリ リソースです。特徴グループには複数の特徴を含めることができます。各特徴は、特徴データソースの列に関連付けられています。特徴データソースを特徴レジストリに登録する場合は、特徴グループを作成して、それに特徴を追加します。

特徴グループを作成し、BigQuery データソースを関連付けたら、データソース内の列に関連付けられた特徴を作成できます。特徴グループの作成時にデータソースを関連付けることは省略可能ですが、その特徴グループ内に特徴を作成する前に、BigQuery テーブルまたはビューを関連付ける必要があります。各特徴は、特徴グループに関連付けられたデータソース内の列に対応しています。

特徴グループと特徴を使用する理由

特徴データソースの登録は任意です。ただし、次のシナリオでは、特徴グループと特徴を作成して特徴データを登録する必要があります。

  • 時系列形式の履歴データを使用してモデルをトレーニングする: 特徴データソースに、同じエンティティ ID の複数の特徴レコードを含む最新の特徴データと履歴の特徴データが含まれている場合は、feature_timestamp 列を追加して、このデータを時系列としてフォーマットします。このシナリオでは、特徴グループと特徴を使用してデータソースを登録する必要があります。その後、次のように特徴をサービングできます。

    • オンライン サービングを使用して、タイムスタンプに基づいて最新の特徴値をサービングし、リアルタイム予測を行います。

    • オフライン サービングを使用して、最新の特徴値と過去の特徴値の両方を提供し、モデルをトレーニングします。

  • 複数のソースから特徴を集計する: 特徴ビューのインスタンスを作成するときに、特徴グループを使用して複数の BigQuery データソースから特定の列を集計します。

  • null 特徴値をサービングする: オンライン サービングで、null 値を含む最新の特徴値のみをサービングする場合は、dense パラメータを true に設定して特徴グループを作成し、特徴データソースを登録します。

  • 特徴ビューで継続的なデータ同期を使用する: 特徴ビューで継続的なデータ同期を使用するには、特徴を登録する必要があります。

  • 特徴の異常をモニタリングする: 特徴の統計情報を取得して特徴ドリフトを検出するために特徴モニタリングを設定する場合は、特徴を登録する必要があります。

特徴グループと特徴を使用すべきでない場合

特徴データソースからエンベディングをサービングする場合は、特徴グループと特徴を作成してデータソースを登録しないでください。このシナリオでは、BigQuery テーブルまたはビューを特徴ビューに直接関連付けて、オンライン サービングを設定する必要があります。

特徴データソースを登録せずにオンライン サービングを設定する方法については、BigQuery ソースから特徴ビューを作成するをご覧ください。

アクセスを制御する

特徴グループへのアクセスは、次のレベルで制御できます。

  • FeatureGroup リソースへのアクセスを制御する: 特定の個人、Google グループ、ドメイン、サービス アカウントのフィーチャー グループへのアクセスを制御するには、フィーチャー グループの IAM ポリシーを設定します。

  • BigQuery データソースへのアクセスを制御する: デフォルトでは、特徴グループはプロジェクト用に構成されたデフォルトのサービス アカウントを使用します。Vertex AI Feature Store は、このサービス アカウントに BigQuery データ閲覧者の Identity and Access Management(IAM)ロールを割り当てます。これにより、プロジェクトで特徴グループの作成権限を持つユーザーは、BigQuery の特徴データソースにアクセスできます。BigQuery データソースへのアクセスの制限や、追加のユーザーへのアクセス権の付与を行うには、独自の専用サービス アカウントを使用するように特徴グループを設定します。Vertex AI Feature Store は、専用のサービス アカウントを持つように構成された特徴グループごとに一意のサービス アカウントのメールアドレスを生成します。

始める前に

特徴グループを作成する前に、次の前提条件を満たしてください。

  • 新しいオンライン ストア インスタンスを作成する場合でも、プロジェクトに少なくとも 1 つのオンライン ストア インスタンスが作成されていることを確認します。新しいプロジェクトを使用している場合は、特徴グループを作成する前にオンライン ショップ インスタンスを作成します。

  • データソース準備ガイドラインに適合するように、BigQuery テーブルまたはビューで特徴データの形式を設定します。

  • BigQuery データソースに、string 値または int 値を含むエンティティ ID 列が 1 つ以上含まれていることを確認します。

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

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

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    Python

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

      Google Cloud CLI をインストールします。

      外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。

      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.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

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

    REST

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

      Google Cloud CLI をインストールします。

      外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。

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

特徴グループを作成して特徴データソースを登録する

次のサンプルを使用して、特徴グループを作成し、BigQuery テーブルやビューなどの特徴データソースを関連付けます。

コンソール

Google Cloud コンソールを使用して特徴グループを作成するには、次の操作を行います。

  1. Google Cloud コンソールの [Vertex AI] セクションで、[Feature Store] ページに移動します。

    [Feature Store] ページに移動

  2. [特徴グループ] セクションで [作成] をクリックし、[特徴グループの作成] ページの [基本情報] ペインを開きます。

  3. [特徴グループ名] を指定します。

  4. 省略可: ラベルを追加するには、[ラベルを追加] をクリックし、ラベル名と値を指定します。特徴グループには複数のラベルを追加できます。

  5. [BigQuery のパス] フィールドで [参照] をクリックし、BigQuery のソーステーブルまたはビューを選択して、そのテーブルまたはビューを特徴グループに関連付けます。

  6. [エンティティ ID 列] リストで、BigQuery ソーステーブルまたはビューのエンティティ ID 列を選択します。

    BigQuery ソーステーブルまたはビューに entity_id という名前の列がある場合は、省略可能です。このとき、エンティティ ID 列を選択しない場合、特徴グループは entity_id 列をデフォルトのエンティティ ID 列として使用します。

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

  8. [登録] ペインで、次のいずれかのオプションをクリックして、新しい特徴グループに特徴を追加するかどうかを指定します。

    • BigQuery テーブルのすべての列を含める - BigQuery ソーステーブルまたはビュー内のすべての列の特徴グループ内に特徴を作成します。

    • 手動で特徴を入力する - BigQuery ソースの特定の列に基づいて特徴を作成します。特徴ごとに特徴名を入力し、リストの対応する BigQuery ソース列名をクリックします。

      別の特徴を追加するには、[他の特徴を追加] をクリックします。

    • 空の特徴グループを作成する - 特徴を追加せずに特徴グループを作成します。

  9. [作成] をクリックします。

Python

Vertex AI SDK for Python のインストールまたは更新の方法については、Vertex AI SDK for Python をインストールするをご覧ください。詳細については、Python API リファレンス ドキュメントをご覧ください。


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


def create_feature_group_sample(
    project: str,
    location: str,
    feature_group_id: str,
    bq_table_uri: str,
    entity_id_columns: List[str],
):
    aiplatform.init(project=project, location=location)
    fg = feature_store.FeatureGroup.create(
        name=feature_group_id,
        source=feature_store.utils.FeatureGroupBigQuerySource(
            uri=bq_table_uri, entity_id_columns=entity_id_columns
        ),
    )
    return fg

  • project: プロジェクト ID。
  • location: 特徴グループを作成するリージョン(us-central1 など)。
  • feature_group_id: 作成する新しい特徴グループの名前。
  • bq_table_uri: 特徴グループに登録する BigQuery ソーステーブルまたはビューの URI。
  • entity_id_columns: エンティティ ID を含む列の名前。1 つまたは複数の列を指定できます。
    • エンティティ ID 列を 1 つだけ指定するには、列名を次の形式で指定します。
      "entity_id_column_name"
    • 複数のエンティティ ID 列を指定するには、列名を次の形式で指定します。
      ["entity_id_column_1_name", "entity_id_column_2_name", ...]

REST

FeatureGroup リソースを作成するには、featureGroups.create メソッドを使用して POST リクエストを送信します。

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

  • LOCATION_ID: 特徴グループを作成するリージョン(us-central1 など)。
  • SERVICE_AGENT_TYPE: 省略可。特徴グループのサービス アカウントの構成。特徴グループに専用のサービス アカウントを使用するには、SERVICE_AGENT_TYPE_FEATURE_GROUP と入力します。
  • PROJECT_ID: プロジェクト ID。
  • ENTITY_ID_COLUMNS: エンティティ ID を含む列の名前。1 つまたは複数の列を指定できます。
    • エンティティ ID 列を 1 つだけ指定するには、列名を次の形式で指定します。
      "entity_id_column_name"
    • 複数のエンティティ ID 列を指定するには、列名を次の形式で指定します。
      ["entity_id_column_1_name", "entity_id_column_2_name", ...]
  • FEATUREGROUP_NAME: 作成する新しい特徴グループの名前。
  • BIGQUERY_SOURCE_URI: 特徴グループに登録する BigQuery ソーステーブルまたはビューの URI。
  • TIMESTAMP_COLUMN: 省略可。BigQuery のソーステーブルまたはビューに特徴のタイムスタンプを含む列の名前を指定します。
    タイムスタンプ列の名前を指定する必要があるのは、データが時系列としてフォーマットされ、特徴のタイムスタンプを含む列の名前が feature_timestamp でない場合のみです。
  • STATIC_DATA_SOURCE: 省略可。データが時系列としてフォーマットされていない場合は、「true」と入力します。デフォルトの設定は false です。
  • DENSE: 省略可。特徴グループに関連付けられた特徴ビューからデータを提供するときに、Vertex AI Feature Store が null 値を処理する方法を指定します。
    • false - これはデフォルトの設定です。Vertex AI Feature Store は、最新の null 以外の特徴値のみを指定します。特徴の最新の値が null の場合、Vertex AI Feature Store は、null 以外の過去の値の中で最新の値を指定します。ただし、その特徴の現在の値と過去の値が null の場合、Vertex AI Feature Store は特徴値として null を指定します。
    • true - データ同期がスケジュール設定されている特徴ビューの場合、Vertex AI Feature Store は最新の特徴値(null 値を含む)のみを指定します。継続的なデータ同期を使用する特徴ビューの場合、Vertex AI Feature Store は最新の null 以外の特徴値のみを指定します。ただし、特徴の現在の値と過去の値が null の場合、Vertex AI Feature Store は特徴値として null を指定します。データ同期の種類と、特徴ビューでデータ同期の種類を構成する方法については、特徴ビューでデータを同期するをご覧ください。

HTTP メソッドと URL:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups?feature_group_id=FEATUREGROUP_NAME

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

{
  "service_agent_type": "SERVICE_AGENT_TYPE",
  "big_query": {
    "entity_id_columns": "ENTITY_ID_COLUMNS",
    "big_query_source": {
      "input_uri": "BIGQUERY_SOURCE_URI",
    }
    "time_series": {
      "timestamp_column": ""TIMESTAMP_COLUMN"",
    },
    "static_data_source": STATIC_DATA_SOURCE,
    "dense": DENSE
  }
}

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

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/v1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups?feature_group_id=FEATUREGROUP_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/v1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups?feature_group_id=FEATUREGROUP_NAME" | Select-Object -Expand Content

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

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.aiplatform.v1.UpdateFeatureGroupOperationMetadata",
    "genericMetadata": {
      "createTime": "2023-09-18T03:00:13.060636Z",
      "updateTime": "2023-09-18T03:00:13.060636Z"
    }
  }
}

次のステップ