11.4 オーストラリア国内旅行の予測

11.1節で述べたオーストラリア旅行データの予測を計算しましょう。2015年末までのデータを訓練セットとして使い、最後の2年(2016Q1–2017Q4の8四半期)は評価のためのテストセットとして取って置きます。以下のコードで、ボトムアップ、OLS、MinTの手法を使って一貫性のある予測を生成するワークフロー全体を実演します。

tourism_full <- tourism %>%
  aggregate_key((State/Region) * Purpose, Trips = sum(Trips))

fit <- tourism_full %>%
  filter(year(Quarter) <= 2015) %>%
  model(base = ETS(Trips)) %>%
  reconcile(
    bu = bottom_up(base),
    ols = min_trace(base, method = "ols"),
    mint = min_trace(base, method = "mint_shrink"),
  )

ここでのfitには、tourism_full内全ての系列のbaseというETSモデル(8章で議論しました)とreconcile()関数の中で指定した一貫性のある予測を生成する3つの手法が入っています。

fc <- fit %>% forecast(h = "2 years")

fitforecast()に渡すことで、集計構造の系列全てにわたる基礎予測と一貫性のある予測が生成されます。図11.12と図11.13は、オーストラリア全国と州ごと、そして旅行目的ごとに、4つのモデルからの宿泊客数の点予測をテストセットからの実際の観測値と並べてプロットしています。

fc %>%
  filter(is_aggregated(Region), is_aggregated(Purpose)) %>%
  autoplot(
    tourism_full %>% filter(year(Quarter) >= 2011),
    level = NULL
  ) +
  labs(y = "宿泊客数 (千人)") +
  facet_wrap(vars(State), scales = "free_y")
テスト期間2016Q1--2017Q4での、オーストラリア全国と州ごとの宿泊客数予測

図 11.12: テスト期間2016Q1–2017Q4での、オーストラリア全国と州ごとの宿泊客数予測

fc %>%
  filter(is_aggregated(State), !is_aggregated(Purpose)) %>%
  autoplot(
    tourism_full %>%
      filter(year(Quarter) >= 2011),
    level = NULL
  ) +
  labs(y = "宿泊客数 (千人)") +
  facet_wrap(vars(Purpose), scales = "free_y")
テスト期間2016Q1--2017Q4での、旅行目的ごとの宿泊客数予測

図 11.13: テスト期間2016Q1–2017Q4での、旅行目的ごとの宿泊客数予測

違いを見やすくするために、訓練データ最後の5年分だけを含め、区間予測は省きました。ほとんどのパネルで、特にテストセット後半の宿泊客数の増加はどの点予測よりも多くなっています。このことは、ACT、New South Wales、Queensland、Victoriaといった本土東部州と旅行目的別全てで特に顕著です。

テストセットでの予測の正確性はaccuracy()関数を使って評価できます。表11.2に、RMSEとMASEを使っていくつか結果を要約しています。

表 11.2: テストセット2016Q1–2017Q4でのオーストラリア宿泊客数予測の正確性
RMSE
MASE
Base Bottom-up MinT OLS Base Bottom-up MinT OLS
総計 1720.72 3070.41 2157.29 1803.52 1.53 3.16 2.09 1.63
旅行目的別集計 533.02 802.46 586.35 513.18 1.33 2.32 1.51 1.25
州別集計 306.85 417.15 329.73 294.66 1.40 1.88 1.45 1.27
地域別集計 52.64 55.12 47.39 46.95 1.13 1.18 1.02 1.00
ボトム 19.38 19.38 17.97 18.32 0.98 0.98 0.94 1.02
全系列 45.96 55.27 45.61 43.20 1.04 1.08 0.98 1.03

集計レベルが異なる系列の尺度は、集計の結果、全く違っています。そのため、RMSEのような尺度に依存する誤差指標をレベルを越えて比較したり、計算したりする際は、集計系列では値が大きくなるので注意を要します。ですから、一番下の行の全系列の誤差指標の前に、集計の各レベルごとに誤差指標を比較します。ボトムレベルから集計レベルが上がるごとにRMSEが増加していることに気付いてください。

以下のコードで、表の一番上の行に示した集計系列の正確性指標が生成されます。似たコードで他のレベルの予測も評価できます。

fc %>%
  filter(is_aggregated(State), is_aggregated(Purpose)) %>%
  accuracy(
    data = tourism_full,
    measures = list(rmse = RMSE, mase = MASE)
  ) %>%
  group_by(.model) %>%
  summarise(rmse = mean(rmse), mase = mean(mase))
#> # A tibble: 4 × 3
#>   .model  rmse  mase
#>   <chr>  <dbl> <dbl>
#> 1 base   1721.  1.53
#> 2 bu     3070.  3.16
#> 3 mint   2157.  2.09
#> 4 ols    1804.  1.63

基礎予測をOLSやMinTで和解させると、ボトムアップ・アプローチよりも正確な予測になっています。この結果は実務ではよくあることです。和解アプローチは構造の全てのレベルからの情報を使うので、限られた情報しか使わない古い伝統的な手法と比べ、より正確な一貫性のある予測になっているのです。さらに、ほぼ全てのレベルで、一貫性のない基礎予測よりも和解予測の方が改善しているのが普通です。