このページでは、階層予測の概要とその目的について説明します。また、予測モデルのバイアスを軽減するために使用できるトレーニング戦略についても説明します。
API を使用して予測モデルをトレーニングするときに階層予測を構成する方法については、予測モデルをトレーニングするをご覧ください。
階層予測とは
多くの場合、時系列はネストされた階層で構造化されます。たとえば、小売業者が販売する商品の在庫全体を、いくつかの商品カテゴリに分割できます。カテゴリは、商品ごとにさらに細かく分割できます。将来の売上を予測する場合、1 つのカテゴリの商品に対する予測は、カテゴリ自体の予測と階層の上位からの予測の合計になります。
同様に、単一の時系列の時間ディメンションも階層を示します。たとえば、個別の商品の 1 日の表示回数の予測の合計は、商品の週あたりの売り上げに加算されます。次の図に、このグループと時間階層をマトリックスで示します。
階層予測には次の 3 つの目標があります。
- バイアスを軽減して、すべての時系列の指標(総売上)を改善する。
- 時間によるバイアスを軽減して、期間全体(季節売上)の指標を改善する。
- グループレベルのバイアスを軽減して、1 つの時系列グループ(商品売上)の指標を改善する。
Vertex AI の階層予測では、集計された予測に追加の損失項目を組み込むことで、時系列の階層構造を考慮しています。
Hierarchical loss = (1 x loss) +
(temporal total weight x temporal total loss) +
(group total weight x group total loss) +
(group temporal total weight x group temporal total loss)
たとえば、階層グループが「カテゴリ」の場合、カテゴリレベルの予測は、カテゴリ内のすべての商品の予測合計になります。モデルの目標が絶対誤差(MAE)である場合、損失には商品レベルとカテゴリレベルの両方の予測の MAE が含まれます。これにより、階層のさまざまなレベルでの予測の一貫性が改善されます。最下位レベルで指標が改善されることもあります。
モデル トレーニングの階層集計を構成する
Vertex AI SDK で AutoMLForecastingTrainingJob
を構成するか、Vertex AI API で hierarchyConfig
を構成することで、予測モデルをトレーニングするときに階層集計を構成できます。
AutoMLForecastingTrainingJob
と hierarchyConfig
で使用可能なパラメータは次のとおりです。
group_columns
group_total_weight
temporal_total_weight
group_temporal_total_weight
このパラメータにより、グループと時間で集計される損失のさまざまな組み合わせが可能になります。また、重みを割り当てて、個々の損失と比べて集計された損失が最小になるように、優先度を上げることもできます。たとえば、重みが 2.0
に設定されている場合、個々の損失の 2 倍の重み付けが行われます。
group_columns
階層レベルのグループ化を表すトレーニング入力テーブルの列名。列は time_series_attribute_columns
にする必要があります。グループ列が設定されていない場合、すべての時系列は同じグループの一部として扱われ、すべての時系列で集計されます。
group_total_weight
個々の損失に対してグループで集計される損失の重み。0.0
に設定するか未設定のままにした場合は無効になります。
temporal_total_weight
個々の損失に対して時間で集計された損失の重み。0.0
に設定するか未設定のままにした場合は無効になります。
group_temporal_total_weight
個々の損失に対する合計損失(グループ × 時間)の重み。0.0
に設定するか未設定のままにした場合は無効になります。グループ列が設定されていない場合、すべての時系列は同じグループの一部として扱われ、すべての時系列で集計されます。
バイアスを減らすための戦略
最初に 1 種類の集計(グループまたは時間)を使用して、重みを 10.0
に設定します。その後、結果に応じて、値を半分または 2 倍にすることを検討してください。
全体的なバイアスを減らす
商品 x 店舗 x 日付レベルの加重絶対パーセント誤差(WAPE)を予測指標として使用して、店舗間でのきめ細かい在庫分布を予測する場合、集計レベルでは過小予測になることが少なくありません。この全体的なバイアスを補正するには、次のことを試します。
group_total_weight
を10.0
に設定します。group_columns
は未設定のままにします。- 他の重みは設定しません。
これにより、すべての時系列が集計され、全体的なバイアスが軽減されます。
時間的バイアスを減らす
長期的な計画では、商品 x リージョン x 週レベルで予測が行われますが、季節的な合計に関して、関連する指標が測定される場合があります。この時間的バイアスを補正するには、次のことを試します。
temporal_total_weight
を10.0
に設定します。group_columns
は未設定のままにします。- 他の重みは設定しません。
これにより、時系列のすべての日付で集計され、時間的バイアスが軽減されます。
グループレベルのバイアスを減らす
補充プロセスで多目的の予測を行う場合、商品 x 店舗 x 日付または週レベルでのきめ細かな予測から、商品 x 流通センター x 日付レベル(配送)または商品カテゴリ x 日付レベル(材料注文)に集計できます。手順は次のとおりです。
group_total_weight
を10.0
に設定します。group_columns
を設定します。たとえば、["region"] または ["region", "category"] を使用します。複数のグループ列を設定すると、結合された値によってグループが定義されます。最適な結果を得るには、個別の値を組み合わせて 100 以下のグループ列を使用します。- 他の重みは設定しません。
これにより、同じ日付の同じグループ内のすべての時系列が集計され、グループレベルのバイアスが軽減されます。
上限
- 時系列の集計レベルは 1 つだけです。「product, store」などの複数のグループ化列が指定されている場合、時系列が「product」と「store」の両方の同じ値を共有する場合にのみ、同じグループに入ります。
- 100 個以下のグループを使用することをおすすめします。