このページでは、 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 grouping
- Group by columns
- Group 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" }, ```
詳細については、ローリング ウィンドウ戦略をご覧ください。