13.5 時期合計の区間予測

よくある問題は、高頻度データに当てはめたモデルを使って、データのいくつかの時期を合計して低頻度にした値を予測することです。例えば、月次データがあって、翌年合計を予測したい。あるいは、週次データがあって、次の4週の合計を予測したい、といった場合です。

点予測が平均なら、足し上げれば合計の良い推計値になります。しかし、区間予測は、予測誤差間の相関のせいでより難しくなります。

一般的な解決法はシミュレーションを使うことです。これは、オーストラリアの外食支出の適合ETSモデルを使って、次の12カ月合計の支出を予測したいと想定した例です。

fit <- auscafe %>%
  # データにモデルを適合させる
  model(ETS(Turnover))
futures <- fit %>%
  # それぞれ長さ12の将来の標本経路10000個をシミュレート
  generate(times = 10000, h = 12) %>%
  # 標本経路ごとに結果を集計
  as_tibble() %>%
  group_by(.rep) %>%
  summarise(.sim = sum(.sim)) %>%
  # 分布として保存
  summarise(total = distributional::dist_sample(list(.sim)))

以下のように、シミュレーションの平均と一緒に、区間予測も計算できます。

futures %>%
  mutate(
    mean = mean(total),
    pi80 = hilo(total, 80),
    pi95 = hilo(total, 95)
  )
#> # A tibble: 1 × 4
#>           total   mean             pi80             pi95
#>          <dist>  <dbl>           <hilo>           <hilo>
#> 1 sample[10000] 19212. [18330, 20118]80 [17851, 20628]95

予想通り、シミュレートされたデータの平均は個々の予測の合計に近くなっています。

forecast(fit, h = 12) %>%
  as_tibble() %>%
  summarise(total = sum(.mean))
#> # A tibble: 1 × 1
#>    total
#>    <dbl>
#> 1 19212.