変換専用モデルの CREATE MODEL ステートメント

このドキュメントでは、BigQuery で変換専用モデルを作成する CREATE MODEL ステートメントについて説明します。変換専用モデルは、TRANSFORMを使用して前処理関数を入力データに適用し、前処理されたデータを返します。変換専用モデルでは、データの前処理がモデルのトレーニングから切り離されているため、一連のデータ前処理ルールのキャプチャと再利用が容易になります。

変換専用モデルを ML.TRANSFORM 関数と組み合わせて使用すると、前処理されたデータを他のモデルに提供できます。

  • 別のモデルを作成するときに、変換済みのデータをそのモデルのトレーニング データとして使用するには、変換専用モデルをクエリ ステートメントで使用します。
  • ターゲット モデルが想定する方法で処理された予測用データを提供するには、ML.PREDICT 関数の query statement 引数で変換専用モデルを使用できます。

変換専用モデルでは大量のデータを短期間で処理できるので、一括特徴変換では変換専用モデルを使用することをおすすめします。オンラインでの特徴変換では、低レイテンシでレスポンスを提供する Vertex AI Feature Store を使用することをおすすめします。

モデル内の特徴変換に関する情報を返すには、変換専用モデルを ML.FEATURE_INFO 関数で使用できます。

各モデルタイプでサポートされている SQL ステートメントと関数については、各モデルのエンドツーエンドのユーザー ジャーニーをご覧ください。

CREATE MODEL の構文

{CREATE MODEL | CREATE MODEL IF NOT EXISTS | CREATE OR REPLACE MODEL} model_name
TRANSFORM (select_list)
OPTIONS(MODEL_TYPE = 'TRANSFORM_ONLY')
AS query_statement

CREATE MODEL

指定したデータセットに新しいモデルを作成し、トレーニングします。モデル名が存在する場合、CREATE MODEL はエラーを返します。

CREATE MODEL IF NOT EXISTS

指定したデータセットにモデルが存在しない場合にのみ、新しいモデルを作成してトレーニングします。

CREATE OR REPLACE MODEL

モデルを作成してトレーニングし、指定したデータセット内の同じ名前をもつ既存のモデルを置き換えます。

model_name

作成または置換するモデルの名前。モデル名は、データセット内で一意である必要があります。他のモデルやテーブルに同じ名前を付けることはできません。モデル名は、BigQuery テーブルと同じ命名規則に従う必要があります。モデル名の条件は次のとおりです。

  • 1,024 文字以内
  • 英字(大文字または小文字)、数字、アンダースコアだけが含まれている

model_name では、大文字と小文字は区別されません。

デフォルト プロジェクトを構成していない場合は、次の形式でプロジェクト ID をモデル名の前に付加する必要があります(バッククォートを含みます)。

`[PROJECT_ID].[DATASET].[MODEL]`

たとえば `myproject.mydataset.mymodel` です。

select_list

** EXCEPT() を使用するか、列名を直接リスト化することにより、変換を使用せずに、query_statement の列をモデル トレーニングに渡すことができます。

query_statement の列のすべてを TRANSFORM 句に表示する必要はないので、TRANSFORM 句から列を省略することにより、query_statement に表示される列を削除できます。

select_list の式を使って、query_statement の入力を変換できます。select_list は、通常の SELECT ステートメントと似ています。select_list は、次の構文をサポートします。

  • *
  • * EXCEPT()
  • * REPLACE()
  • expression
  • expression.*

以下は、select_list 内に表示できません。

  • 集計関数
  • 非 BigQuery ML 分析関数。サポートされている関数の詳細については、手動での特徴の前処理をご覧ください。
  • UDF
  • サブクエリ
  • 匿名の列。たとえば a + b as c は許可されますが、a + b は許可されません。

select_list の出力列は、BigQuery で利用できる任意のデータ型にできます。

以下の列は存在する場合、変換なしに select_list に表示されます。

  • label
  • data_split_col
  • kmeans_init_col
  • instance_weight_col

これらの列が query_statement により返される場合、いかなる式にもない列名により、または * を使用することにより、select_list で参照する必要があります。これらの列ではエイリアスを使用できません。

MODEL_TYPE

構文

MODEL_TYPE = 'TRANSFORM_ONLY'

説明

モデルタイプを指定します。このオプションは必須です。

query_statement

前処理するデータを含む GoogleSQL クエリ。このデータの変換時に計算される統計は、モデルを使用するすべての関数の入力データに適用されます。

以下の例で、変換専用モデルを作成して使用する方法を説明します。

例 1

次の例では、デフォルト プロジェクトの mydatasetmymodel という名前のモデルを作成します。このモデルは、BigQuery 一般公開テーブル bigquery-public-data.ml_datasets.penguins のいくつかの列を変換します。

CREATE MODEL `mydataset.transform_model`
  TRANSFORM(
    species,
    island,
    ML.MAX_ABS_SCALER(culmen_length_mm) OVER () AS culmen_length_mm,
    ML.MAX_ABS_SCALER(culmen_depth_mm) OVER () AS culmen_depth_mm,
    ML.MAX_ABS_SCALER(flipper_length_mm) OVER () AS flipper_length_mm,
    sex,
    body_mass_g)
  OPTIONS (
    model_type = 'transform_only')
AS (
  SELECT *
  FROM `bigquery-public-data.ml_datasets.penguins`
);

例 2

次の例では、デフォルト プロジェクトの mydatasetmymodel という名前のモデルを作成します。このモデルは、変換専用モデルを使用して前処理されたデータでトレーニングされます。

CREATE MODEL `mydataset.mymodel`
OPTIONS
  ( MODEL_TYPE = 'LINEAR_REG',
    MAX_ITERATIONS = 5,
    INPUT_LABEL_COLS = ['body_mass_g'] ) AS
SELECT
  *
FROM
  ML.TRANSFORM(
    MODEL `mydataset.transform_model`,
    TABLE `bigquery-public-data.ml_datasets.penguins`)
WHERE body_mass_g IS NOT NULL;