11.2 単一レベルからのアプローチ

階層化時系列やグループ化時系列の伝統的な予測手順は、まず集計構造のあるレベルを選択して、そのレベルの予測を生成する。そして、生成した予測をより高いレベルに集計するか、より低いレベルに分解するかして、構造内の残りの一貫性のある予測一式を得る、というものです。

ボトムアップ・アプローチ

一貫性のある予測を生成する単純な手法は、「ボトムアップ」・アプローチです。このアプローチは、まずボトムレベル系列それぞれの予測を生成し、次にそれらを足し上げて構造内の全ての系列の予測を作成します。

例えば、図11.1の階層では、まずボトムレベル系列それぞれの\(h\)期先予測を、以下生成します。 \[ \yhat{AA}{h},~~\yhat{AB}{h},~~\yhat{AC}{h},~~ \yhat{BA}{h},~~\yhat{BB}{h} \] (ここでは簡潔に記すため、前に使った\(\hat{y}_{T+h|T}\)表記を簡素化しています。)

以下のようにこれらを足し上げて、残りの系列の一貫性のある\(h\)期先予測を得ます。 \[\begin{align*} \tilde{y}_{h} & =\yhat{AA}{h}+\yhat{AB}{h}+\yhat{AC}{h}+\yhat{BA}{h}+\yhat{BB}{h} \\ \ytilde{A}{h} & = \yhat{AA}{h}+\yhat{AB}{h}+\yhat{AC}{h} \\ \text{}\quad \ytilde{B}{h} &= \yhat{BA}{h}+\yhat{BB}{h} \end{align*}\] (本章では、一貫性のある予測を指すのに「チルダ」記号を使います。)

このアプローチの利点は、構造のボトムレベルを予測するので、集計によって失われる情報がないことです。他方、ボトムレベルのデータはとてもノイズが多いので、モデル化も予測も難しくなります。

事例: ボトムアップ予測の生成

オーストラリア旅行データで全国と州別の予測は欲しいが、地域別や旅行目的別には興味がない、としましょう。まず全国と州別の四半期宿泊客数だけの単純なtsibbleオブジェクトを作成します。

tourism_states <- tourism %>%
  aggregate_key(State, Trips = sum(Trips))

以下のように、まずボトムレベルの州別予測を生成し、次にそれらを足し上げて全国の予測を得ることもできます。

fcasts_state <- tourism_states %>%
  filter(!is_aggregated(State)) %>%
  model(ets = ETS(Trips)) %>%
  forecast()

# ボトムレベルの予測を足し上げて、トップレベルの予測を得る
fcasts_national <- fcasts_state %>%
  summarise(value = sum(Trips), .mean = mean(value))

しかし、以下では、本章で議論する全ての予測手法で機能する、より一般的なアプローチを使って予測を得てみましょう。reconcile()関数を使って、一貫性のある予測をどう計算したいか、指定します。

tourism_states %>%
  model(ets = ETS(Trips)) %>%
  reconcile(bu = bottom_up(ets)) %>%
  forecast()
#> # A fable: 144 x 5 [1Q]
#> # Key:     State, .model [18]
#>    State  .model Quarter         Trips .mean
#>    <chr*> <chr>    <qtr>        <dist> <dbl>
#>  1 ACT    ets    2018 Q1  N(701, 7651)  701.
#>  2 ACT    ets    2018 Q2  N(717, 8032)  717.
#>  3 ACT    ets    2018 Q3  N(734, 8440)  734.
#>  4 ACT    ets    2018 Q4  N(750, 8882)  750.
#>  5 ACT    ets    2019 Q1  N(767, 9368)  767.
#>  6 ACT    ets    2019 Q2  N(784, 9905)  784.
#>  7 ACT    ets    2019 Q3 N(800, 10503)  800.
#>  8 ACT    ets    2019 Q4 N(817, 11171)  817.
#>  9 ACT    bu     2018 Q1  N(701, 7651)  701.
#> 10 ACT    bu     2018 Q2  N(717, 8032)  717.
#> # ℹ 134 more rows

reconcile()の行は、ボトムアップ予測を作成する新しい「モデル」を作り出しています。このfableオブジェクトには、8つの州と全国系列の、ets予測と一貫性のあるbu予測の両方が含まれています。州レベルではこれらの予測は同一ですが、全国ではets予測とbu予測は異なるでしょう。

ボトムアップ予測では、全国のETSモデルに興味がなく、作成されるfableには重複が大量にあるので、このやり方はかなり非効率です。しかし、後ほど紹介するより高度な手法では、全ての集計レベルのモデルが必要で、一貫性のある予測は元の予測と異なります。

集計構造を予測するワークフロー

上のコードは、階層化やグループ化された予測を生成する、一般的なワークフローの例になっています。以下のように関数をパイプでつなぐのです。

data %>% aggregate_key() %>% model() %>%
  reconcile() %>% forecast()
  1. ボトムレベル系列一つ一つを含むtsibbleオブジェクト(ここではdata)から開始。
  2. aggregate_key()の中で集計構造を定義して、集計系列も含むtsibbleオブジェクトを構築。
  3. 集計の全てのレベルで系列それぞれのmodel()を特定。
  4. reconcile()の中で選択されたモデルから一貫性のある予測を生成するやり方を指定。
  5. forecast()関数を使って、集計構造全体の予測を生成。

トップダウン・アプローチ

トップダウン・アプローチは、まずTotal系列\(y_t\)の予測を生成し、次にそれを階層の下に向かって分解します。

構造のボトムレベル系列の予測は、Total系列の予測からの分解比率を\(p_1,\dots,p_{m}\)として、それらを掛けて得ます。例えば、図11.1の階層では、\(p_1,\dots,p_{5}\)比率を使って、以下のように得ます。 \[ \ytilde{AA}{t}=p_1\hat{y}_t,~~~\ytilde{AB}{t}=p_2\hat{y}_t,~~~\ytilde{AC}{t}=p_3\hat{y}_t,~~~\ytilde{BA}{t}=p_4\hat{y}_t,~~~\ytilde{BB}{t}=p_5\hat{y}_t \] ボトムレベルの\(h\)期先予測をこうして生成して、これらを集計して残りのレベルにある系列の一貫性のある予測を生成します。

トップダウン予測は、reconcile()関数の中でtop_down()を使えば生成できます。

指定できるトップダウン手法にはいくつかあります。最も広く使われている2つのトップダウン・アプローチでは、データの過去の比率に基づいて分解比率を指定します。 Gross & Sohl (1990) の研究によると、これらが上手く機能していました。

過去比率の平均

\[ p_j=\frac{1}{T}\sum_{t=1}^{T}\frac{y_{j,t}}{{y_t}} \] ただし、\(j=1,\dots,m\)です。各比率\(p_j\)は、ボトムレベル系列\(y_{j,t}\)のTotal系列\(y_t\)に対する比率の過去の\(t=1,\dots,T\)期間にかけての平均です。

このアプローチは、top_down()関数でmethod = "average_proportions"と設定すれば実行されます。

過去値平均の比率

\[ p_j={\sum_{t=1}^{T}\frac{y_{j,t}}{T}}\Big/{\sum_{t=1}^{T}\frac{y_t}{T}} \] ただし、\(j=1,\dots,m\)です。各比率\(p_j\)は、ボトムレベル系列\(y_{j,t}\)の過去値平均のTotal系列\(y_t\)の過去値平均に対する比率です。

このアプローチは、top_down()関数でmethod = "proportion_averages"と設定すれば実行されます。

こうしたトップダウン・アプローチの便利なところはその単純さです。最も集計されたトップレベル系列だけをモデル化して予測すれば済みます。一般的に、このアプローチは集計レベルではとても信頼できる予測を生成するようで、数が少ないデータでは役に立ちます。他方で、弱点の一つは集計による情報の喪失です。こうしたトップダウン・アプローチでは、個々の系列の経時的な強弱、特別なイベント、異なる季節パターンなどの特徴を取り込んで利用することができません。

予測比率

過去の比率に基づくトップダウン・アプローチは、分解に使う比率の経時変化を考慮しないため、ボトムアップ・アプローチに比べて階層の下層レベルでの予測が不正確になる傾向があります。この問題に対処するため、過去のデータではなく予測に基づく比率を使うことができます。 (G. Athanasopoulos et al., 2009)

1レベル(トップレベルとボトムレベルだけ)の階層を考えてみましょう。まず系列全ての\(h\)期先の予測を生成します。これらの予測は直接使いませんし、一貫性がありません(正しく足し上がりません)。これらを「初期」予測と呼びましょう。ボトムレベルでの\(h\)期先の初期予測の全てを集計し、集計値に対するそれぞれの比率を計算します。それらを予測比率と呼びます。そして、トップレベルの\(h\)期先初期予測を予測比率で分解して、階層全体の一貫性のある予測を生成します。

\(K\)レベルの階層では、このプロセスをトップレベルからボトムレベルに向けて各ノードで繰り返します。このプロセスを適用すると、予測比率を得る一般ルールは以下のようになります。 \[ p_j=\prod^{K-1}_{\ell=0}\frac{\hat{y}_{j,h}^{(\ell)}}{\hat{S}_{j,h}^{(\ell+1)}} \] ただし、ボトムレベルのノード\(j=1,2,\dots,m\)\(\hat{y}_{j,h}^{(\ell)}\)はノード\(j\)よりも\(\ell\)だけ上のレベルのノードに該当する系列の\(h\)期先初期予測、\(\hat{S}_{j,h}^{(\ell)}\)はノード\(j\)よりも\(\ell\)だけ上のレベルのノードの下に直接つながっている\(h\)期先初期予測の合計です。これらの予測比率でTotal系列の\(h\)期先初期予測を分解して、ボトムレベル系列の\(h\)期先の一貫性のある予測を得ます。

11.1の階層を使って、この表記を説明し、どうやってこの一般ルールに至るのか実演します。階層内の各系列の初期予測は生成済みと想定します。どのトップダウン・アプローチでも、トップレベルの”Total”系列では\(\tilde{y}_{h}=\hat{y}_{h}\)であることを思い起こしましょう。上の表記を使ったいくつかの例は以下の通りです。

  • \(\hat{y}_{\text{A},h}^{(1)}=\hat{y}_{\text{B},h}^{(1)}=\hat{y}_{h}= \tilde{y}_{h}\)
  • \(\hat{y}_{\text{AA},h}^{(1)}=\hat{y}_{\text{AB},h}^{(1)}=\hat{y}_{\text{AC},h}^{(1)}= \hat{y}_{\text{A},h}\)
  • \(\hat{y}_{\text{AA},h}^{(2)}=\hat{y}_{\text{AB},h}^{(2)}= \hat{y}_{\text{AC},h}^{(2)}=\hat{y}_{\text{BA},h}^{(2)}= \hat{y}_{\text{BB},h}^{(2)}=\hat{y}_{h}= \tilde{y}_{h}\)
  • \(\Shat{AA}{h}{1} = \Shat{AB}{h}{1}= \Shat{AC}{h}{1}= \yhat{AA}{h}+\yhat{AB}{h}+\yhat{AC}{h}\)
  • \(\Shat{AA}{h}{2} = \Shat{AB}{h}{2}= \Shat{AC}{h}{2}= \Shat{A}{h}{1} = \Shat{B}{h}{1}= \hat{S}_{h}= \yhat{A}{h}+\yhat{B}{h}\)

各階層の一番左の支流をたどると、一貫性のある予測は以下のようになります。 \[ \ytilde{A}{h} = \Bigg(\frac{\yhat{A}{h}}{\Shat{A}{h}{1}}\Bigg) \tilde{y}_{h} = \Bigg(\frac{\yhat{AA}{h}^{(1)}}{\Shat{AA}{h}{2}}\Bigg) \tilde{y}_{h} \] そして \[ \ytilde{AA}{h} = \Bigg(\frac{\yhat{AA}{h}}{\Shat{AA}{h}{1}}\Bigg) \ytilde{A}{h} =\Bigg(\frac{\yhat{AA}{h}}{\Shat{AA}{h}{1}}\Bigg) \Bigg(\frac{\yhat{AA}{h}^{(1)}}{\Shat{AA}{h}{2}}\Bigg)\tilde{y}_{h} \] となります。従って、 \[ p_1=\Bigg(\frac{\yhat{AA}{h}}{\Shat{AA}{h}{1}}\Bigg) \Bigg(\frac{\yhat{AA}{h}^{(1)}}{\Shat{AA}{h}{2}}\Bigg) \] となります。他の比率も同様に得られます。

このアプローチは、top_down()関数でmethod = "forecast_proportions"と設定すれば実行されます。他のトップダウン手法よりこのアプローチの方が上手く機能する傾向があるので、top_down()関数でmethod引数に何も指定しない場合、デフォルトとして選択されるのはこのアプローチです。

全てのトップダウン・アプローチの弱点の一つは、たとえ基礎予測にバイアスがなくても、生成する一貫性のある予測にはバイアスがあることです。 (Hyndman et al., 2011)

中間から始めるアプローチ

中間から始めるアプローチは、ボトムアップとトップダウンの両アプローチを組み合わせたものです。ここでも、使える対象は厳密に階層化された集計構造だけです。

まず「中間」レベルを選び、そのレベルの全ての系列の予測を生成します。中間レベルよりも上の系列では、「中間レベル」予測を上に足し上げるボトムアップ・アプローチを使って一貫性のある予測を生成します。「中間レベル」よりも下の系列では、「中間レベル」予測を下に分解するトップダウン・アプローチを使って一貫性のある予測を生成します。

このアプローチは、middle_out()関数でlevel引数で適切な中間レベルを指定して、method引数でトップダウン・アプローチを選択すれば実行されます。

参考文献

Athanasopoulos, G., Ahmed, R. A., & Hyndman, R. J. (2009). Hierarchical forecasts for Australian domestic tourism. International Journal of Forecasting, 25, 146–166. [DOI]
Gross, C. W., & Sohl, J. E. (1990). Disaggregation methods to expedite product line forecasting. Journal of Forecasting, 9, 233–254. [DOI]
Hyndman, R. J., Ahmed, R. A., Athanasopoulos, G., & Shang, H. L. (2011). Optimal combination forecasts for hierarchical time series. Computational Statistics and Data Analysis, 55(9), 2579–2589. [DOI]