13.4 予測の組み合わせ

予測正確性を改善する簡単な方法は、同じ時系列にいくつか異なった手法を使い、結果として出てきた予測を平均することです。50年以上前、John BatesとClive Grangerは、有名な論文 (Bates & Granger, 1969) を書いて、予測を組み合わせると多くの場合で予測はより正確になる、と示しました。20年後に Clemen (1989) は、こう書いています。

結果は事実上、全会一致でした。複数の予測を組み合わせると、予測はより正確になります。多くのケースで、単に複数の予測を平均するだけで、劇的に性能を改善できます。

加重平均を使ったり、その他のより複雑な組み合わせアプローチについて多くの研究がなされてきましたが、単純平均を打ち負かすのは難しいと証明されてきました。

以下は、オーストラリアの月次外食支出の1982年4月から2018年12月までを使った例です。ETS、STL-ETS、ARIMAの3つのモデルからの予測を使い、最近5年(60カ月)の観測値を使って結果を比較しましょう。

auscafe <- aus_retail %>%
  filter(stringr::str_detect(Industry, "Takeaway")) %>%
  summarise(Turnover = sum(Turnover))
train <- auscafe %>%
  filter(year(Month) <= 2013)
STLF <- decomposition_model(
  STL(log(Turnover) ~ season(window = Inf)),
  ETS(season_adjust ~ season("N"))
)
cafe_models <- train %>%
  model(
    ets = ETS(Turnover),
    stlf = STLF,
    arima = ARIMA(log(Turnover))
  ) %>%
  mutate(combination = (ets + stlf + arima) / 3)
cafe_fc <- cafe_models %>%
  forecast(h = "5 years")

mutate()関数の中で推計モデルの線形関数を書くだけで、組み合わせ(combination)が作られていることに留意してください。このとても単純な語法で、含めたモデルの予測誤差間の相関を自動的に考慮して、予測の分布を適切に取り扱います。ただ、以下のプロットでは、簡素化のため区間予測は省いています。

cafe_fc %>%
  autoplot(auscafe %>% filter(year(Month) > 2008),
           level = NULL) +
  labs(y = "10億ドル",
       title = "オーストラリアの月次外食支出")
オーストラリアの月次外食支出に適用したさまざまな手法からの点予測

図 13.6: オーストラリアの月次外食支出に適用したさまざまな手法からの点予測

cafe_fc %>%
  accuracy(auscafe) %>%
  arrange(RMSE)
#> # A tibble: 4 × 10
#>   .model      .type     ME  RMSE   MAE    MPE  MAPE  MASE RMSSE  ACF1
#>   <chr>       <chr>  <dbl> <dbl> <dbl>  <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 combination Test    8.09  41.0  31.8  0.401  2.19 0.776 0.790 0.747
#> 2 arima       Test  -25.4   46.2  38.9 -1.77   2.65 0.949 0.890 0.786
#> 3 stlf        Test  -36.9   64.1  51.7 -2.55   3.54 1.26  1.23  0.775
#> 4 ets         Test   86.5  122.  101.   5.51   6.66 2.46  2.35  0.880

この系列では、ARIMAが特に優秀ですが、組み合わせアプローチ(combination)は(RMSE、MAEを含むほとんどの指標で)さらに優秀です。他のデータでは、ARIMAは全くだめかもしれませんが、組み合わせアプローチは最良の成分手法とそれほど違わないか、さらに良いのが通常です。

組み合わせ予測の分布

cafe_fcオブジェクトには、そこからどんな区間予測も通常計算できる、予測の分布が入っています。予測期間の最初の月で区間を見てみましょう。

cafe_fc %>% filter(Month == min(Month))
#> # A fable: 4 x 4 [1M]
#> # Key:     .model [4]
#>   .model         Month           Turnover .mean
#>   <chr>          <mth>             <dist> <dbl>
#> 1 ets         2014 Jan      N(1289, 1118) 1289.
#> 2 stlf        2014 Jan t(N(7.2, 0.00063)) 1326.
#> 3 arima       2014 Jan t(N(7.2, 0.00061)) 1283.
#> 4 combination 2014 Jan               1299 1299.

1から3までは、正規分布と変換後正規分布が混じっています。そうした多様な分布の合算をパッケージはまだできないので、combinationの出力は単なる平均になっています。

しかし、シミュレートした標本経路を使えば、組み合わせ予測でも予測の分布を作り出すことができます。

cafe_futures <- cafe_models %>%
  # 1000個の将来の標本経路を生成
  generate(h = "5 years", times = 1000) %>%
  # 将来の標本経路から予測の分布を計算
  as_tibble() %>%
  group_by(Month, .model) %>%
  summarise(
    dist = distributional::dist_sample(list(.sim))
  ) %>%
  ungroup() %>%
  # fableオブジェクトを作成
  as_fable(index = Month, key = .model,
           distribution = dist, response = "Turnover")
# h=1での予測の分布
cafe_futures %>% filter(Month == min(Month))
#> # A fable: 4 x 3 [1M]
#> # Key:     .model [4]
#>      Month .model              dist
#>      <mth> <chr>             <dist>
#> 1 2014 Jan arima       sample[1000]
#> 2 2014 Jan combination sample[1000]
#> 3 2014 Jan ets         sample[1000]
#> 4 2014 Jan stlf        sample[1000]

今や、組み合わせを含む4つのモデル全てが実験による分布として保存されたので、図13.7のように、組み合わせ予測の区間予測をプロットできます。

cafe_futures %>%
  filter(.model == "combination") %>%
  autoplot(auscafe %>% filter(year(Month) > 2008)) +
  labs(y = "10億ドル", level = "区間予測",
       title = "オーストラリアの月次外食支出")
オーストラリアの月次外食支出の組み合わせ予測の区間予測

図 13.7: オーストラリアの月次外食支出の組み合わせ予測の区間予測

95%区間予測の正確性をチェックするのに、(5.9節で定義した)Winklerスコアが使えます。

cafe_futures %>%
  accuracy(auscafe, measures = interval_accuracy_measures,
    level = 95) %>%
  arrange(winkler)
#> # A tibble: 4 × 3
#>   .model      .type winkler
#>   <chr>       <chr>   <dbl>
#> 1 combination Test     420.
#> 2 stlf        Test     596.
#> 3 ets         Test     731.
#> 4 arima       Test     766.

小さいほど良いので、ここでもcombination予測は成分モデルのどれよりも良くなっています。

参考文献

Bates, J. M., & Granger, C. W. J. (1969). The combination of forecasts. Operational Research Quarterly, 20(4), 451–468. [DOI]
Clemen, R. (1989). Combining forecasts: A review and annotated bibliography. International Journal of Forecasting, 5(4), 559–583. [DOI]