このページでは、 Google Cloud コンソールまたは Vertex AI API を使用して表形式のデータセットから予測モデルをトレーニングする方法について説明します。
始める前に
予測モデルをトレーニングする前に、次の操作を行います。
モデルをトレーニングする
Google Cloud コンソール
Google Cloud コンソールの Vertex AI セクションで、[データセット] ページに移動します。
モデルのトレーニングに使用するデータセットの名前をクリックして、詳細ページを開きます。
目的のデータ型でアノテーション セットが使用されている場合は、モデルで使用するアノテーション セットを選択します。
[新しいモデルのトレーニング] をクリックします。
[その他] を選択します。
[トレーニング方法] ページで、次のように構成します。
モデルのトレーニング方法を選択します。詳細については、モデルのトレーニング方法をご覧ください。
[続行] をクリックします。
[モデルの詳細] ページで、次のように構成します。
新しいモデルの表示名を入力します。
ターゲット列を選択します。
ターゲット列は、モデルが予測する値です。ターゲット列の要件をご覧ください。
データセットに [シリーズ識別子] 列と [タイムスタンプ] 列を設定していない場合は、ここで選択します。
[データの粒度] を選択します。休日効果のモデリングを使用する場合は、
Dailyを選択します。詳しくは、データの粒度を選択する方法をご覧ください。省略可: [地域の休日] プルダウンで、1 つ以上の地域を選択して、休日効果のモデリングを有効にします。トレーニング中に、Vertex AI は [タイムスタンプ] 列の日付と指定された地理的地域に基づいて、モデル内で休日のカテゴリ特徴を作成します。このオプションは、[データの粒度] が
Dailyに設定されている場合にのみ選択できます。デフォルトでは、休日効果のモデリングは無効になっています。休日効果のモデリングに使用される地理的リージョンについては、地域の休日をご覧ください。[Context window] と [Forecast horizon] を入力します。
(省略可)予測ホライズンでは、推論データの各行のターゲット値について、モデルがどの程度の未来の期間を推論するかを決定します。[予測ホライズン] は [データ粒度] の単位で指定されます。
コンテキスト ウィンドウでは、トレーニング時(および予測用)のモデルのルックバック期間を設定します。つまり、各トレーニング データポイントにおいて、コンテキスト ウィンドウの設定によって、モデルが予測パターンをどの程度の期間さかのぼるかが決まります。[コンテキスト期間] は [データの粒度] の単位で指定されます。
詳細。
テスト データセットを BigQuery にエクスポートする場合は、[Export test dataset to BigQuery] をオンにして、テーブルの名前を指定します。
データ分割を手動で制御する場合や、予測ウィンドウを構成する場合は、[詳細オプション] を開きます。
デフォルトのデータ分割は時系列で、標準の 80 / 10 / 10 パーセントです。どの分割をどの分割に割り当てるかを手動で指定するには、[手動] を選択してデータ分割列を指定します。
データ分割をご覧ください。
予測ウィンドウを生成するローリング ウィンドウ戦略を選択します。デフォルトの戦略は [カウント] です。
- カウント: 表示されるテキスト ボックスの最大ウィンドウ数を設定します。
- ストライド: 表示されるテキスト ボックスでストライドの長さの値を設定します。
- 列: 表示されるプルダウンから、適切な列名を選択します。
詳細については、ローリング ウィンドウ戦略をご覧ください。
[続行] をクリックします。
[トレーニング オプション] ページで、次のように構成します。
まだクリックしていない場合は、[統計情報を生成] をクリックします。
このメニューにより、[変換] プルダウン メニューが生成されます。
列のリストを確認して、モデルのトレーニングに使用すべきではない列を除外します。
データ分割列を使用する場合は、それを含める必要があります。
含めた特徴に対して選択されている変換を確認し、必要な更新を行います。
選択した変換で無効なデータを含む行は、トレーニングから除外されます。詳細は、変換をご覧ください。
トレーニングに含める列ごとに、[特徴タイプ] で、その特徴と時系列との関係性と、予測時にその特徴が使用可能かどうかを指定します。詳細については、特徴タイプと利用可否をご覧ください。
重み列を指定する場合、最適化目標をデフォルトから変更する場合、階層予測を有効にする場合は、[詳細オプション] を開きます。
(省略可)重み列を指定する場合は、プルダウン リストから選択します。詳しくは、重み列をご覧ください。
(省略可)最適化の目標を選択する場合は、リストから選択します。最適化の目標の詳細をご確認ください。
(省略可)階層予測を使用する場合は、[階層予測を有効にする] を選択します。以下の 3 つのグループ オプションから選択できます。
No groupingGroup by columnsGroup all
次の集約損失の重みを設定することもできます。
Group total weightです。このフィールドは、Group by columnsオプションまたはGroup allオプションを選択した場合にのみ設定できます。Temporal total weight。Group temporal total weightです。このフィールドは、Group by columnsオプションまたはGroup allオプションを選択した場合にのみ設定できます。
階層予測の詳細を確認してください。
[続行] をクリックします。
[コンピューティングと料金] ページで、次のように構成します。
モデルのトレーニングの最大時間数を入力します。この設定により、トレーニング費用に上限を設定できます。新しいモデルの作成には他のオペレーションも必要なため、実際の経過時間がこの値より長くなることがあります。
推奨されるトレーニング時間は、予測ホライズンのサイズとトレーニング データに関連します。次の表では、予測トレーニングの実行例と、高品質のモデルをトレーニングするために必要なトレーニング時間を示します。
行 特徴 予測ホライズン トレーニング時間 1,200 万 10 6 3~6 時間 2,000 万 50 13 6~12 時間 1,600 万 30 365 24~48 時間 トレーニングの料金については、料金ページをご覧ください。
[トレーニングを開始] をクリックします。
データのサイズ、複雑さ、トレーニング予算(指定された場合)に応じて、モデルのトレーニングに何時間もかかることがあります。このタブを閉じて、後で戻ることもできます。モデルのトレーニングが完了すると、メールが送られてきます。
API
お使いの言語または環境に応じて、以下のタブを選択してください。
REST
trainingPipelines.create コマンドを使用してモデルをトレーニングします。
リクエストのデータを使用する前に、次のように置き換えます。
- LOCATION: 使用するリージョン。
- PROJECT: 実際のプロジェクト ID。
- TRAINING_PIPELINE_DISPLAY_NAME: このオペレーション用に作成されたトレーニング パイプラインの表示名。
- TRAINING_TASK_DEFINITION: モデルのトレーニング方法。
- 時系列高密度エンコーダ(TiDE)
gs://google-cloud-aiplatform/schema/trainingjob/definition/time_series_dense_encoder_forecasting_1.0.0.yaml - Temporal Fusion Transformer(TFT)
gs://google-cloud-aiplatform/schema/trainingjob/definition/temporal_fusion_transformer_time_series_forecasting_1.0.0.yaml - AutoML(L2L)
gs://google-cloud-aiplatform/schema/trainingjob/definition/automl_forecasting_1.0.0.yaml - Seq2Seq+
gs://google-cloud-aiplatform/schema/trainingjob/definition/seq2seq_plus_time_series_forecasting_1.0.0.yaml
- 時系列高密度エンコーダ(TiDE)
- TARGET_COLUMN: このモデルに予測させる列(値)。
- TIME_COLUMN: 時間列。詳細。
- TIME_SERIES_IDENTIFIER_COLUMN: 時系列識別子の列。詳細。
- WEIGHT_COLUMN: (省略可)重み列。詳細。
- TRAINING_BUDGET: モデルをトレーニングするミリノード時間単位の最大時間(1,000 ミリノード時間は 1 ノード時間に等しい)。
-
GRANULARITY_UNIT: トレーニング データの粒度、予測ホライズン、コンテキスト ウィンドウに使用する単位。
minute、hour、day、week、month、yearのいずれかを指定します。休日効果のモデリングを使用する場合は、dayを選択します。詳しくは、データの粒度を選択する方法をご覧ください。 - GRANULARITY_QUANTITY: トレーニング データの観測の間隔を構成する粒度単位の数。minute 以外のすべての単位では 1 になります。minute には 1、5、10、15、30 を指定できます。詳しくは、データの粒度を選択する方法をご覧ください。
- GROUP_COLUMNS: 階層レベルのグループ化を表すトレーニング入力テーブルの列名。この列は time_series_attribute_columns にする必要があります。 詳細
- GROUP_TOTAL_WEIGHT: 個々の損失に対するグループの合計損失の重み。0.0 に設定するか未設定のままにした場合は無効になります。グループ列が設定されていない場合、すべての時系列は同じグループの一部として扱われ、すべての時系列で集計されます。詳細。
- TEMPORAL_TOTAL_WEIGHT: 個々の損失に対する合計損失時間の重み。0.0 に設定するか未設定のままにした場合は無効になります。 詳細。
- GROUP_TEMPORAL_TOTAL_WEIGHT: 個々の損失に対する合計損失(グループ × 時間)の重み。0.0 に設定するか未設定のままにした場合は無効になります。グループ列が設定されていない場合、すべての時系列は同じグループの一部として扱われ、すべての時系列で集計されます。詳細。
-
HOLIDAY_REGIONS: (省略可)1 つ以上の地理的地域を選択して、休日効果のモデリングを有効にできます。トレーニング中に、Vertex AI は TIME_COLUMN の日付と指定された地理的地域に基づいて、モデル内に休日のカテゴリ特徴を作成します。有効にするには、GRANULARITY_UNIT を
dayに設定し、HOLIDAY_REGIONS フィールドに 1 つ以上のリージョンを指定します。デフォルトでは、休日効果のモデリングは無効になっています。詳しくは、地域の休日をご覧ください。 - FORECAST_HORIZON: 予測ホライズンでは、推論データの各行のターゲット値について、モデルがどの程度の未来の期間を予測するかが決まります。予測ホライズンは、データの粒度(GRANULARITY_UNIT)の単位で指定されます。詳しくはこちらをご覧ください。
- CONTEXT_WINDOW: コンテキスト ウィンドウでは、トレーニング時(および予測用)のモデルのルックバック期間を設定します。つまり、各トレーニング データポイントにおいて、コンテキスト ウィンドウの設定によって、モデルが予測パターンをどの程度の期間さかのぼるかが決まります。コンテキスト ウィンドウはデータの粒度(GRANULARITY_UNIT)の単位で指定されます。 詳細。
- OPTIMIZATION_OBJECTIVE: デフォルトでは、Vertex AI は二乗平均平方根誤差(RMSE)を最小化します。予測モデルに対して別の最適化目標が必要な場合は、予測モデルの最適化目標のいずれかのオプションを選択します。 分位点損失を最小限に抑える場合は、QUANTILES の値も指定する必要があります。
-
PROBABILISTIC_INFERENCE: (省略可)
trueに設定すると、Vertex AI は予測の確率分布をモデル化します。確率的推論により、ノイズの多いデータを処理し、不確実性を定量化することで、モデルの品質を改善できます。QUANTILES を指定すると、Vertex AI により確率分布の分位数も返されます。確率的推論は、Time series Dense Encoder (TiDE)とAutoML (L2L)のトレーニング方法のみと互換性があります。階層予測とminimize-quantile-loss最適化目標には対応していません。 -
QUANTILES:
minimize-quantile-lossの最適化目標と確率論的推論に使用する分位数。最大 5 つの一意の数字を0~1の範囲(両端を除く)で指定します。 - TIME_SERIES_ATTRIBUTE_COL: 時系列属性である列の名前。詳細。
- AVAILABLE_AT_FORECAST_COL: 予測時に値がわかっている共変量列の名前。詳細。
- UNAVAILABLE_AT_FORECAST_COL: 予測時に値が不明な共変量列の名前。詳細。
- TRANSFORMATION_TYPE: モデルのトレーニングに使用される列ごとに変換タイプが指定されます。詳細。
- COLUMN_NAME: 列の名前および指定された変換タイプ。モデルのトレーニングに使用するすべての列を指定する必要があります。
- MODEL_DISPLAY_NAME: 新しくトレーニングされたモデルの表示名。
- DATASET_ID: トレーニング データセットの ID。
-
Splitオブジェクトを指定すれば、データ分割を制御できます。データ分割の制御については、REST を使用したデータ分割の制御をご覧ください。 -
windowConfigオブジェクトを指定して、予測ウィンドウを生成するローリング ウィンドウ戦略を構成できます。詳細については、REST を使用してローリング ウィンドウ戦略を構成するをご覧ください。 - PROJECT_NUMBER: プロジェクトに自動生成されたプロジェクト番号
HTTP メソッドと URL:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT/locations/LOCATION/trainingPipelines
リクエストの本文(JSON):
{
"displayName": "TRAINING_PIPELINE_DISPLAY_NAME",
"trainingTaskDefinition": "TRAINING_TASK_DEFINITION",
"trainingTaskInputs": {
"targetColumn": "TARGET_COLUMN",
"timeColumn": "TIME_COLUMN",
"timeSeriesIdentifierColumn": "TIME_SERIES_IDENTIFIER_COLUMN",
"weightColumn": "WEIGHT_COLUMN",
"trainBudgetMilliNodeHours": TRAINING_BUDGET,
"dataGranularity": {"unit": "GRANULARITY_UNIT", "quantity": GRANULARITY_QUANTITY},
"hierarchyConfig": {"groupColumns": GROUP_COLUMNS, "groupTotalWeight": GROUP_TOTAL_WEIGHT, "temporalTotalWeight": TEMPORAL_TOTAL_WEIGHT, "groupTemporalTotalWeight": GROUP_TEMPORAL_TOTAL_WEIGHT}
"holidayRegions" : ["HOLIDAY_REGIONS_1", "HOLIDAY_REGIONS_2", ...]
"forecast_horizon": FORECAST_HORIZON,
"context_window": CONTEXT_WINDOW,
"optimizationObjective": "OPTIMIZATION_OBJECTIVE",
"quantiles": "QUANTILES",
"enableProbabilisticInference": "PROBABILISTIC_INFERENCE",
"time_series_attribute_columns": ["TIME_SERIES_ATTRIBUTE_COL_1", "TIME_SERIES_ATTRIBUTE_COL_2", ...]
"available_at_forecast_columns": ["AVAILABLE_AT_FORECAST_COL_1", "AVAILABLE_AT_FORECAST_COL_2", ...]
"unavailable_at_forecast_columns": ["UNAVAILABLE_AT_FORECAST_COL_1", "UNAVAILABLE_AT_FORECAST_COL_2", ...]
"transformations": [
{"TRANSFORMATION_TYPE_1": {"column_name" : "COLUMN_NAME_1"} },
{"TRANSFORMATION_TYPE_2": {"column_name" : "COLUMN_NAME_2"} },
...
},
"modelToUpload": {"displayName": "MODEL_DISPLAY_NAME"},
"inputDataConfig": {
"datasetId": "DATASET_ID",
}
}
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような JSON レスポンスが返されます。
{
"name": "projects/PROJECT_NUMBER/locations/LOCATION/trainingPipelines/TRAINING_PIPELINE_ID",
"displayName": "myModelName",
"trainingTaskDefinition": "gs://google-cloud-aiplatform/schema/trainingjob/definition/automl_tabular_1.0.0.yaml",
"modelToUpload": {
"displayName": "myModelName"
},
"state": "PIPELINE_STATE_PENDING",
"createTime": "2020-08-18T01:22:57.479336Z",
"updateTime": "2020-08-18T01:22:57.479336Z"
}
Python
Vertex AI SDK for Python のインストールまたは更新の方法については、Vertex AI SDK for Python をインストールするをご覧ください。詳細については、Python API リファレンス ドキュメントをご覧ください。
REST を使用してデータ分割を制御する
トレーニング セット、検証セット、テストセットの間でトレーニング データをどのように分割するかを制御できます。分割列を使用して各行のデータ分割を手動で指定し、JSON リクエストの inputDataConfig の PredefinedSplit Split オブジェクトの一部として指定します。
DATA_SPLIT_COLUMN は、データ分割値(TRAIN、VALIDATION、TEST)を含む列です。
"predefinedSplit": {
"key": DATA_SPLIT_COLUMN
},
データ分割の詳細をご確認ください。
REST を使用してローリング ウィンドウ戦略を構成する
windowConfig オブジェクトを指定して、予測ウィンドウの生成のローリング ウィンドウ戦略を構成します。デフォルトの戦略は maxCount です。
maxCountオプションを使用するには、JSON リクエストのtrainingTaskInputsに次の内容を追加します。MAX_COUNT_VALUE は、ウィンドウの最大数を指します。"windowConfig": { "maxCount": MAX_COUNT_VALUE }, ```strideLengthオプションを使用するには、JSON リクエストのtrainingTaskInputsに次を追加します。STRIDE_LENGTH_VALUE は、ストライドの長さの値を参照します。"windowConfig": { "strideLength": STRIDE_LENGTH_VALUE }, ```columnオプションを使用するには、JSON リクエストのtrainingTaskInputsに次の内容を追加します。COLUMN_NAME は、TrueまたはFalseの値を含む列の名前を指します。"windowConfig": { "column": "COLUMN_NAME" }, ```
詳細については、ローリング ウィンドウ戦略をご覧ください。