8.2 トレンドのある手法

Holtの線形トレンド法

Holt (1957) は、トレンドのあるデータでも予測できるよう、単純指数平滑化を拡張しました。この手法は、1つの予測方程式と2つの(一つは水準の、もう一つはトレンドの)平滑化方程式から成ります。 \[\begin{align*} \text{予測方程式}&& \hat{y}_{t+h|t} &= \ell_{t} + hb_{t} \\ \text{水準方程式} && \ell_{t} &= \alpha y_{t} + (1 - \alpha)(\ell_{t-1} + b_{t-1})\\ \text{トレンド方程式} && b_{t} &= \beta^*(\ell_{t} - \ell_{t-1}) + (1 -\beta^*)b_{t-1} \end{align*}\] ただし、\(\ell_t\)は系列の\(t\)時点の推計された水準を、\(b_t\)は系列の\(t\)時点の推計されたトレンド(傾き)を表し、\(\alpha\)は水準の平滑化パラメータ\(0\le\alpha\le1\)\(\beta^*\)はトレンドの平滑化パラメータで\(0\le\beta^*\le1\)です。(\(\beta\)ではなく、\(\beta^*\)と表記する理由は8.5節で説明します。)

単純指数平滑化と同じく、水準方程式では、\(\ell_t\)\(\ell_t\)が、観測値\(y_t\)と訓練データでの1期先\(t\)時点の予測、ここでは\(\ell_{t-1} + b_{t-1}\)ですが、の加重平均になっています。トレンド方程式では、\(b_t\)が、\(t\)時点で\(\ell_{t} - \ell_{t-1}\)に基づいて推計されたトレンドと1つ前の推計されたトレンド\(b_{t-1}\)の加重平均になっています。

予測方程式はもはや平らではなく、トレンドがあります。\(h\)期先予測は、最後に推計された水準プラス、最後に推計されたトレンド値掛ける\(h\)になっています。ですから、予測は\(h\)の線形関数です。

事例: オーストラリアの人口

aus_economy <- global_economy %>%
  filter(Code == "AUS") %>%
  mutate(Pop = Population / 1e6)
autoplot(aus_economy, Pop) +
  labs(y = "百万人", title = "オーストラリアの人口")
オーストラリアの人口、1960-2017年

図 8.3: オーストラリアの人口、1960-2017年

8.3は、1960年から2017年までのオーストラリアの年次人口です。この系列にHolt法を適用してみましょう。平滑化パラメータ\(\alpha\)\(\beta^*\)、初期値\(\ell_0\)\(b_0\)は、8.1節で述べたように、訓練データでの1期先予測でのSSEの最小化によって推計します。

fit <- aus_economy %>%
  model(
    AAN = ETS(Pop ~ error("A") + trend("A") + season("N"))
  )
fc <- fit %>% forecast(h = 10)

水準の推計された平滑化係数\(\hat{\alpha} = 0.9999\)。このとても大きい値は、強いトレンドのある系列を捉えるために水準が急速に変化することを示しています。傾きの推計された平滑化係数\(\hat{\beta}^* = 0.3267\)。これは比較的大きい値で、トレンドもまた頻繁に変化(たとえ、その変化は小さいとしても)していることを示唆しています。

8.2ではこれらの値を使って、Holt法の適用結果を示します。

表 8.2: Holtの線形トレンド法を使ったオーストラリアの年次人口の予測
時点 観測値 水準 傾き 予測
\(t\) \(y_t\) \(\ell_t\) \(\hat{y}_{t+1\mid t}\)
1959 0 10.05 0.22
1960 1 10.28 10.28 0.22 10.28
1961 2 10.48 10.48 0.22 10.50
1962 3 10.74 10.74 0.23 10.70
1963 4 10.95 10.95 0.22 10.97
1964 5 11.17 11.17 0.22 11.17
1965 6 11.39 11.39 0.22 11.39
1966 7 11.65 11.65 0.23 11.61
2014 55 23.50 23.50 0.37 23.52
2015 56 23.85 23.85 0.36 23.87
2016 57 24.21 24.21 0.36 24.21
2017 58 24.60 24.60 0.37 24.57
\(h\) \(\hat{y}_{T+h\mid T}\)
2018 1 24.97
2019 2 25.34
2020 3 25.71
2021 4 26.07
2022 5 26.44
2023 6 26.81
2024 7 27.18
2025 8 27.55
2026 9 27.92
2027 10 28.29

減衰トレンド法

Holtの線形法で生成した予測は、将来にわたって無限に(増加か減少し続ける)一定のトレンドを示します。この手法による予測は、特に予測期間が長くなるほど顕著に、過大になりがちなことが、経験的証拠から分かっています。この観察に動機付けられて、 Gardner & McKenzie (1985) は、トレンドを将来のどこかの時点で平らに「減衰」させるパラメータを導入しました。減衰トレンドを含む手法は大成功と分かり、多くの系列で予測を自動生成する必要がある場合では、間違いなく最も人気のある手法になっています。

平滑化パラメータ\(\alpha\)\(\beta^*\)(Holt法では、値は0と1の間)に加えて、この手法では減衰パラメータ\(0<\phi<1\)も含めます。 \[\begin{align*} \hat{y}_{t+h|t} &= \ell_{t} + (\phi+\phi^2 + \dots + \phi^{h})b_{t} \\ \ell_{t} &= \alpha y_{t} + (1 - \alpha)(\ell_{t-1} + \phi b_{t-1})\\ b_{t} &= \beta^*(\ell_{t} - \ell_{t-1}) + (1 -\beta^*)\phi b_{t-1} \end{align*}\] \(\phi=1\)の場合、Holtの線形手法と同じになります。\(0\)\(1\)の間の場合、\(\phi\)は将来のどこかの時点で予測が一定の値に近付くようトレンドを減衰させます。実際、\(0<\phi<1\)である限り、\(h\rightarrow\infty\)で予測は\(\ell_T+\phi b_T/(1-\phi)\)に収束します。つまり、短期予測にはトレンドがあるが、長期予測は横ばいということです。

実務上、\(\phi\)を小さい値にすると減衰が強くなり過ぎるので、0.8未満にすることはまずありません。\(\phi\)の値が1に近いと、減衰モデルと非減衰モデルの差が出なくなります。こうした理由で、\(\phi\)を0.8から0.98までの間に制約するのが普通です。

事例: オーストラリアの人口 (続き)

8.4は、Holtの線形トレンド法と減衰トレンド法から生成された2018–2032年予測を示しています。

aus_economy %>%
  model(
    "Holtの線形トレンド法" = ETS(Pop ~ error("A") +
                       trend("A") + season("N")),
    "減衰トレンド法" = ETS(Pop ~ error("A") +
                       trend("Ad", phi = 0.9) + season("N"))
  ) %>%
  forecast(h = 15) %>%
  autoplot(aus_economy, level = NULL) +
  labs(title = "オーストラリアの人口",
       y = "百万人") +
  guides(colour = guide_legend(title = "予測"))
オーストラリア年次人口(百万人)2018-2032年予測。減衰トレンド法での$\phi=0.90$

図 8.4: オーストラリア年次人口(百万人)2018-2032年予測。減衰トレンド法での\(\phi=0.90\)

比較のため、減衰の効果が大げさに出るよう、減衰パラメータは比較的小さく\((\phi=0.90)\)しています。通常は、他のパラメータと合わせて、\(\phi\)も推計します。予測期間(\(h=15\))をかなり長くしたのも、減衰トレンドと線形トレンドの差を強調するためです。

事例: インターネット利用者数

この事例では、これまで検討してきた3つの指数平滑化法を使って、サーバーを介してインターネットに接続する利用者数を予測し、その予測性能を比較します。データは100分にわたって観測されており、図8.5に示しています。

www_usage <- as_tsibble(WWWusage)
www_usage %>% autoplot(value) +
  labs(x="分", y="利用者数",
       title = "分ごとのインターネット利用者数")
あるサーバーを通じたインターネット利用者数

図 8.5: あるサーバーを通じたインターネット利用者数

時系列交差検証を使って、3つの手法の1期先予測の正確性を比較します。

www_usage %>%
  stretch_tsibble(.init = 10) %>%
  model(
    "単純" = ETS(value ~ error("A") + trend("N") + season("N")),
    "線形トレンド" = ETS(value ~ error("A") + trend("A") + season("N")),
    "減衰トレンド" = ETS(value ~ error("A") + trend("Ad") +
                   season("N"))
  ) %>%
  forecast(h = 1) %>%
  accuracy(www_usage) %>% 
  arrange(RMSE)
#> # A tibble: 3 × 10
#>   .model       .type     ME  RMSE   MAE   MPE  MAPE  MASE RMSSE  ACF1
#>   <chr>        <chr>  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 減衰トレンド Test  0.288   3.69  3.00 0.347  2.26 0.663 0.636 0.336
#> 2 線形トレンド Test  0.0610  3.87  3.17 0.244  2.38 0.701 0.668 0.296
#> 3 単純         Test  1.46    6.05  4.81 0.904  3.55 1.06  1.04  0.803

MAEとRMSEのどちらで比較しても、減衰トレンドが最良です。なので、減衰トレンドを使って先に進み、全データセットに適用して将来の予測を得ましょう。

fit <- www_usage %>%
  model(
    "減衰トレンド" = ETS(value ~ error("A") + trend("Ad") +
                   season("N"))
  )
# Estimated parameters:
tidy(fit)
#> # A tibble: 5 × 3
#>   .model       term  estimate
#>   <chr>        <chr>    <dbl>
#> 1 減衰トレンド alpha   1.00  
#> 2 減衰トレンド beta    0.997 
#> 3 減衰トレンド phi     0.815 
#> 4 減衰トレンド l[0]   90.4   
#> 5 減衰トレンド b[0]   -0.0173

傾きの平滑化パラメータはほぼ1と推計されており、トレンドの変化は、インターネット利用者数の直近2分の傾きを主に反映していることを示しています。\(\alpha\)値はとても1に近く、水準は新しい観測値が出るたびに強く反応することを示しています。

fit %>%
  forecast(h = 10) %>%
  autoplot(www_usage) +
  labs(x="分", y="利用者数", level = "区間予測",
       title = "分ごとのインターネット利用者数")
減衰トレンドを使ったインターネット利用者数の予測

図 8.6: 減衰トレンドを使ったインターネット利用者数の予測

生成された予測は、減衰パラメータの値が小さい(0.815)ため減少トレンドは平らに向かいつつあり、もっともらしく見えます。区間予測は、過去のデータの変動を反映して比較的広くなっています。区間予測は8.7節で述べる手法を使って計算しています。

この事例では、RMSEとMAEの両方が同じ手法(減衰トレンド)をお薦めしていたので、手法の選択は比較的容易でした。しかし、異なる正確性指標が異なる予測手法をお薦めすることも時としてあり、その場合、どの予測手法を優先して使うべきか決断する必要が出てきます。予測業務は多くの次元(予測期間の長さ、テストセットの規模、予測誤差の指標、データの頻度など)で異なることがあるので、一つの手法が全ての予測場面で優れている、なんてことはありそうにありません。予測手法に求めるものは、一貫して意味のある予測です。そして、手元にある業務に対してそうなっているか、頻繁に評価するべきです。

参考文献

Gardner, E. S., & McKenzie, E. (1985). Forecasting trends in time series. Management Science, 31(10), 1237–1246. [DOI]
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]