5.7 分解を用いた予測

時系列分解(3章で議論しました)は、予測生成に役立つ手段になり得ます。

加法分解なら、分解された時系列は以下のように書けます。 \[ y_t = \hat{S}_t + \hat{A}_t \] ただし、\(\hat{A}_t = \hat{T}_t+\hat{R}_{t}\)で、これは季節調整値成分です。乗法分解なら、以下のように書けます。 \[ y_t = \hat{S}_t\hat{A}_t \] ただし、\(\hat{A}_t = \hat{T}_t\hat{R}_{t}\)です。

分解された時系列を予測するには、季節成分\(\hat{S}_t\)と季節調整値成分\(\hat{A}_t\)を別々に予測します。季節成分は、不変か、とてもゆっくりと変化すると普通想定できるので、推計された成分の昨年分を持ってきて予測とするだけです。言い換えれば、季節成分には季節ナイーブ法を使う、ということです。

季節調整値成分を予測するには、季節性を持たない系列用の予測手法がどれも使えます。例えば、ドリフト法、Holt法(8章で議論します)、非季節性ARIMAモデル(9章で議論します)が使えます。

事例: 米国小売業の就業者数

us_retail_employment <- us_employment %>%
  filter(year(Month) >= 1990, Title == "Retail Trade")
dcmp <- us_retail_employment %>%
  model(STL(Employed ~ trend(window = 7), robust = TRUE)) %>%
  components() %>%
  select(-.model)
dcmp %>%
  model(NAIVE(season_adjust)) %>%
  forecast() %>%
  autoplot(dcmp) +
  labs(y = "人 (千)", level = "区間予測",
       title = "米国小売業の就業者数")
米国小売業の就業者数: STL分解から得た季節調整値のナイーブ予測

図 5.18: 米国小売業の就業者数: STL分解から得た季節調整値のナイーブ予測

5.18は、米国小売業の就業者数の季節調整値のナイーブ予測です。これに季節成分の季節ナイーブ予測を加えて、「再季節化」します。

この作業はdecomposition_model()関数を使うと簡単にできます。加法分解して、分解後の各成分ごとに異なるモデル関数が使えます。季節成分については、別のモデルが特定されていなければ、自動的にSNAIVE()を使って予測します。この関数は元データの予測が得られるよう再季節化もしてくれます。図5.19は、これらを示しています。

fit_dcmp <- us_retail_employment %>%
  model(stlf = decomposition_model(
    STL(Employed ~ trend(window = 7), robust = TRUE),
    NAIVE(season_adjust)
  ))
fit_dcmp %>%
  forecast() %>%
  autoplot(us_retail_employment)+
  labs(y = "人 (千)", level = "区間予測",
       title = "米国小売業の就業者数")
米国小売業の就業者数: STL分解後の季節調整値のナイーブ予測と季節成分の季節ナイーブ予測に基づく予測

図 5.19: 米国小売業の就業者数: STL分解後の季節調整値のナイーブ予測と季節成分の季節ナイーブ予測に基づく予測

このグラフで示している区間予測は、点予測と同じやり方で構築しています。つまり、季節調整値の区間予測の上限と下限に、季節成分の予測を加えて「再季節化」しています。

5.20に示した残差のACFは、有意な自己相関があることを示しています。ナイーブ法では季節調整値の変化するトレンドを取り込めていないことが原因です。

fit_dcmp %>% gg_tsresiduals()
残差のチェック

図 5.20: 残差のチェック

次章以降で、季節調整値成分を予測するのに、ナイーブ法より適した手法を学んでいきます。