8.3 季節性のある手法

Holt (1957)Winters (1960) は、Holt法を拡張して、季節性を取り込みました。Holt-Wintersの季節手法は、予測方程式と3つの平滑化方程式から成っています。平滑化方程式の一つは水準\(\ell_t\)、もう一つはトレンド\(b_t\)、そして最後の一つは季節成分\(s_t\)のもので、平滑化パラメータはそれぞれ\(\alpha\)\(\beta^*\)\(\gamma\)です。\(m\)は季節周期、つまり、1年内の季節の数を表します。例えば、四半期データなら\(m=4\)、月次データなら\(m=12\)です。

この手法には、季節成分の性質によって2種類あります。季節の振れ幅が系列を通してほぼ一定なら加法手法が望ましい一方、季節の振れ幅が系列の水準に比例して変化しているなら乗法手法が望ましいです。加法手法では、季節成分は観測値の尺度の値で表され、水準方程式で扱う系列は季節成分を引き算した季節調整値になります。各年内で季節成分の合計はほぼゼロになります。乗法手法では、季節成分は比率(パーセント)で表され、水準方程式で扱う系列は季節成分で割り算した季節調整値になります。各年内で季節成分の合計はほぼ\(m\)になります。

Holt-Wintersの加法手法

加法手法の成分表記は以下の通りです。 \[\begin{align*} \hat{y}_{t+h|t} &= \ell_{t} + hb_{t} + s_{t+h-m(k+1)} \\ \ell_{t} &= \alpha(y_{t} - s_{t-m}) + (1 - \alpha)(\ell_{t-1} + b_{t-1})\\ b_{t} &= \beta^*(\ell_{t} - \ell_{t-1}) + (1 - \beta^*)b_{t-1}\\ s_{t} &= \gamma (y_{t}-\ell_{t-1}-b_{t-1}) + (1-\gamma)s_{t-m} \end{align*}\] ただし、\(k\)\((h-1)/m\)の整数部分で、予測に使う季節インデックスの推計値が標本の最終年のものとなるようにしています。水準方程式は、季節調整値\((y_{t} - s_{t-m})\)\(t\)時点の季節調整値予測\((\ell_{t-1}+b_{t-1})\)の加重平均になっています。トレンド方程式は、Holtの線形手法と同じです。季節方程式は、現在の季節インデックス\((y_{t}-\ell_{t-1}-b_{t-1})\)と前年同季節(つまり、\(m\)時点前)の季節インデックスの加重平均になっています。

季節方程式は以下のように表すことが多いです。 \[ s_{t} = \gamma^* (y_{t}-\ell_{t})+ (1-\gamma^*)s_{t-m} \] この\(\ell_t\)に水準方程式を代入すると、次のようになります。 \[ s_{t} = \gamma^*(1-\alpha) (y_{t}-\ell_{t-1}-b_{t-1})+ [1-\gamma^*(1-\alpha)]s_{t-m} \] \(\gamma=\gamma^*(1-\alpha)\)とすれば、最初の季節方程式と同じになります。いつものパラメータ制約は\(0\le\gamma^*\le1\)で、\(\gamma\)に翻訳すると\(0\le\gamma\le 1-\alpha\)になります。

Holt-Wintersの乗法手法

乗法手法の成分表記は以下の通りです。 \[\begin{align*} \hat{y}_{t+h|t} &= (\ell_{t} + hb_{t})s_{t+h-m(k+1)} \\ \ell_{t} &= \alpha \frac{y_{t}}{s_{t-m}} + (1 - \alpha)(\ell_{t-1} + b_{t-1})\\ b_{t} &= \beta^*(\ell_{t}-\ell_{t-1}) + (1 - \beta^*)b_{t-1} \\ s_{t} &= \gamma \frac{y_{t}}{(\ell_{t-1} + b_{t-1})} + (1 - \gamma)s_{t-m} \end{align*}\]

事例: オーストラリア国内、休暇旅行

Holt-Wintersの手法を加法と乗法の両方の季節性で適用して、 14 オーストラリアの国内旅行の四半期宿泊客数を予測します。図8.7は、1998–2017年のデータと2018–2020年の予測です。データには明らかな季節パターンがあり、オーストラリアの夏に当たる3月の四半期に毎年山があります。

aus_holidays <- tourism %>%
  filter(Purpose == "Holiday") %>%
  summarise(Trips = sum(Trips)/1e3)
fit <- aus_holidays %>%
  model(
    "加法季節性" = ETS(Trips ~ error("A") + trend("A") +
                                                season("A")),
    "乗法季節性" = ETS(Trips ~ error("M") + trend("A") +
                                                season("M"))
  )
fc <- fit %>% forecast(h = "3 years")
fc %>%
  mutate(.model = factor(.model, levels = c("加法季節性", "乗法季節性"))) %>% 
  autoplot(aus_holidays, level = NULL) +
  labs(title="オーストラリア国内、休暇旅行",
       y="宿泊客数 (百万)") +
  guides(colour = guide_legend(title = "予測"))
Holt-Winters手法を加法と乗法の両方の季節性で使ったオーストラリア国内、休暇旅行の宿泊客数の予測

図 8.7: Holt-Winters手法を加法と乗法の両方の季節性で使ったオーストラリア国内、休暇旅行の宿泊客数の予測

表 8.3: Holt-Wintersの手法を加法季節性で適用したオーストラリア国内、休暇旅行の宿泊客数予測。加法季節成分は足すとほぼゼロになることに留意。平滑化パラメータは、\(\alpha = 0.2620\)\(\beta^* = 0.1646\)\(\gamma = 0.0001\)。そして、RMSE \(=0.4169\)
四半期 時点 観測値 水準 傾き 季節 予測
\(t\) \(y_t\) \(\ell_t\) \(b_t\) \(s_t\) \(\hat{y}_{t+1\vert t}\)
1997 Q1 0 1.5
1997 Q2 1 -0.3
1997 Q3 2 -0.7
1997 Q4 3 9.8 0.0 -0.5
1998 Q1 4 11.8 9.9 0.0 1.5 11.3
1998 Q2 5 9.3 9.9 0.0 -0.3 9.7
1998 Q3 6 8.6 9.7 -0.0 -0.7 9.2
1998 Q4 7 9.3 9.8 0.0 -0.5 9.2
2017 Q1 80 12.4 10.9 0.1 1.5 12.3
2017 Q2 81 10.5 10.9 0.1 -0.3 10.7
2017 Q3 82 10.5 11.0 0.1 -0.7 10.3
2017 Q4 83 11.2 11.3 0.1 -0.5 10.6
\(h\) \(\hat{y}_{T+h\vert T}\)
2018 Q1 1 12.9
2018 Q2 2 11.2
2018 Q3 3 11.0
2018 Q4 4 11.2
2019 Q1 5 13.4
2019 Q2 6 11.7
2019 Q3 7 11.5
2019 Q4 8 11.7
2020 Q1 9 13.9
2020 Q2 10 12.2
2020 Q3 11 11.9
2020 Q4 12 12.2
表 8.4: Holt-Wintersの手法を乗法季節性で適用したオーストラリア国内、休暇旅行の宿泊客数予測。乗法季節成分は足すとほぼ\(m=4\)になることに留意。平滑化パラメータは、\(\alpha = 0.2237\), \(\beta^* = 0.1360\), \(\gamma = 0.0001\)。そして、RMSE \(=0.4122\)
四半期 時点 観測値 水準 傾き 季節 予測
\(t\) \(y_t\) \(\ell_t\) \(b_t\) \(s_t\) \(\hat{y}_{t+1\vert t}\)
1997 Q1 0 1.2
1997 Q2 1 1.0
1997 Q3 2 0.9
1997 Q4 3 10.0 -0.0 0.9
1998 Q1 4 11.8 10.0 -0.0 1.2 11.6
1998 Q2 5 9.3 9.9 -0.0 1.0 9.7
1998 Q3 6 8.6 9.8 -0.0 0.9 9.2
1998 Q4 7 9.3 9.8 -0.0 0.9 9.2
2017 Q1 80 12.4 10.8 0.1 1.2 12.6
2017 Q2 81 10.5 10.9 0.1 1.0 10.6
2017 Q3 82 10.5 11.1 0.1 0.9 10.2
2017 Q4 83 11.2 11.3 0.1 0.9 10.5
\(h\) \(\hat{y}_{T+h\vert T}\)
2018 Q1 1 13.3
2018 Q2 2 11.2
2018 Q3 3 10.8
2018 Q4 4 11.1
2019 Q1 5 13.8
2019 Q2 6 11.7
2019 Q3 7 11.3
2019 Q4 8 11.6
2020 Q1 9 14.4
2020 Q2 10 12.2
2020 Q3 11 11.7
2020 Q4 12 12.1

両方(加法と乗法の季節性)の手法を適用した結果を、それぞれ表8.3と表8.4に示しました。両モデルで推計するパラメータの数が全く同じなので、訓練データでのRMSEを比較することができます。このケースでは、乗法季節性の手法の方が少しばかりより良くデータに当てはまっています。

8.8は、両モデルの推計をプロットしています。乗法モデルの\(\gamma\)値が小さいことは、季節成分が時を経てもほとんど変化しないことを意味しています。\(\beta^{*}\)値が小さいことは、傾き成分が時を経てもほとんど変化しないことを意味しています。(傾き成分と水準成分の縦軸の尺度を比べてください。)

加法と乗法の季節性を持つHolt-Winters法で推計された成分

図 8.8: 加法と乗法の季節性を持つHolt-Winters法で推計された成分

Holt-Wintersの減衰手法

減衰は、加法と乗法の両方のHolt-Wintersの手法で可能です。季節性のあるデータで、正確でロバストな予測を提供してくれることが多いのが、減衰トレンドと乗法季節性を持つHolt-Winters法です。 \[\begin{align*} \hat{y}_{t+h|t} &= \left[\ell_{t} + (\phi+\phi^2 + \dots + \phi^{h})b_{t}\right]s_{t+h-m(k+1)} \\ \ell_{t} &= \alpha(y_{t} / s_{t-m}) + (1 - \alpha)(\ell_{t-1} + \phi b_{t-1})\\ b_{t} &= \beta^*(\ell_{t} - \ell_{t-1}) + (1 - \beta^*)\phi b_{t-1} \\ s_{t} &= \gamma \frac{y_{t}}{(\ell_{t-1} + \phi b_{t-1})} + (1 - \gamma)s_{t-m} \end{align*}\]

事例: 日次データでのHolt-Winters法

季節周期\(m=7\)で、\(h\)の適切な時間単位が日である日次タイプのデータにも、Holt-Winters法は使えます。ここでは、人の往来が多いメルボルンのある鉄道駅の2016年7月の歩行者数を予測します。

sth_cross_ped <- pedestrian %>%
  filter(Date >= "2016-07-01",
         Sensor == "Southern Cross Station") %>%
  index_by(Date) %>%
  summarise(Count = sum(Count)/1000)
sth_cross_ped %>%
  filter(Date <= "2016-07-31") %>%
  model(
    hw = ETS(Count ~ error("M") + trend("Ad") + season("M"))
  ) %>%
  forecast(h = "2 weeks") %>%
  autoplot(sth_cross_ped %>% filter(Date <= "2016-08-14")) +
  labs(title = "日次の往来: Southern Cross 駅", level = "区間予測",
       y="歩行者数 (千人)")
メルボルンのSouthern Cross 駅での日次歩行者数の予測

図 8.9: メルボルンのSouthern Cross 駅での日次歩行者数の予測

週の季節パターンとデータの最後の増加トレンドをモデルは明らかに特定しており、予測はテストデータにほぼ一致しています。

参考文献

Holt, C. E. (1957). Forecasting seasonals and trends by exponentially weighted averages (O.N.R. Memorandum No. 52). Carnegie Institute of Technology, Pittsburgh USA. [DOI]
Winters, P. R. (1960). Forecasting sales by exponentially weighted moving averages. Management Science, 6(3), 324–342. [DOI]

  1. HoltとWintersは元々2乗誤差和を最小化していましたが、ここでは8.6節で述べる最尤法を使います。乗法季節性では、パラメータ推計が少し違ってきます。ETS()の中でopt_crit="mse"と設定すれば、2乗誤差和による最適化が得られます。↩︎