変換専用モデルの 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
次の例では、デフォルト プロジェクトの mydataset
に mymodel
という名前のモデルを作成します。このモデルは、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
次の例では、デフォルト プロジェクトの mydataset
に mymodel
という名前のモデルを作成します。このモデルは、変換専用モデルを使用して前処理されたデータでトレーニングされます。
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;