9.10 ARIMA 対 ETS

ARIMAモデルの方が指数平滑化よりも普遍的だというのは、よくある神話です。線形の指数平滑化モデルは全てARIMAモデルの特殊ケースである一方、非線形の指数平滑化モデルはARIMAモデルに同値なものはありません。他方、指数平滑化に同値なものがないARIMAモデルも数多くあります。特に、全てのETSモデルは非定常である一方、ARIMAモデルには定常なものもあります。図9.27は、2つのモデル・クラスの間の重なり具合を示しています。

加法だけのETSモデルには同値のARIMA表記がある、などのETSとARIMAのモデル・クラス間の重なり具合

図 9.27: 加法だけのETSモデルには同値のARIMA表記がある、などのETSとARIMAのモデル・クラス間の重なり具合

季節性と減衰しないトレンドのどちらか、あるいは両方、のあるETSモデルには、2つの単位根があります(つまり、定常にするには、2回の差分化が必要)。他のETSモデル全てには、1つの単位根があります(定常にするには、1回の差分化が必要)。

9.4は、2つのモデル・クラスの同値関係を示しています。季節性モデルでは、ARIMAモデルには数多くの制約があります。

表 9.4: ETSモデルとARIMAモデル間の同値関係
ETSモデル ARIMAモデル パラメータ
ETS(A,N,N) ARIMA(0,1,1) \(\theta_1=\alpha-1\)
ETS(A,A,N) ARIMA(0,2,2) \(\theta_1=\alpha+\beta-2\)
\(\theta_2=1-\alpha\)
ETS(A,A\(_d\),N) ARIMA(1,1,2) \(\phi_1=\phi\)
\(\theta_1=\alpha+\phi\beta-1-\phi\)
\(\theta_2=(1-\alpha)\phi\)
ETS(A,N,A) ARIMA(0,1,\(m\))(0,1,0)\(_m\)
ETS(A,A,A) ARIMA(0,1,\(m+1\))(0,1,0)\(_m\)
ETS(A,A\(_d\),A) ARIMA(1,0,\(m+1\))(0,1,0)\(_m\)

AICcは、同じクラスのモデル間の選択に役立ちます。例えば、候補になる複数のARIMAモデルの中から1つのARIMAモデルを選択17したり、候補になる複数のETSモデルの中から1つのETSモデルを選択したりするのに使えます。しかし、ETSモデルとARIMAモデルの比較には使えません。モデル・クラスが異なり、尤度が異なった方法で計算されるからです。以下の事例で、異なるモデル・クラス間でのモデル選択を実演してみます。

非季節性データでのARIMA()ETS()の比較

ARIMAモデルとETSモデルの比較には、時系列交差検証が使えます。8.2節で紹介したglobal_economyデータセットからオーストラリアの人口を考えてみましょう。

aus_economy <- global_economy %>%
  filter(Code == "AUS") %>%
  mutate(Population = Population/1e6)

aus_economy %>%
  slice(-n()) %>%
  stretch_tsibble(.init = 10) %>%
  model(
    ETS(Population),
    ARIMA(Population)
  ) %>%
  forecast(h = 1) %>%
  accuracy(aus_economy) %>%
  select(.model, RMSE:MAPE)
#> # A tibble: 2 × 5
#>   .model              RMSE    MAE   MPE  MAPE
#>   <chr>              <dbl>  <dbl> <dbl> <dbl>
#> 1 ARIMA(Population) 0.194  0.0789 0.277 0.509
#> 2 ETS(Population)   0.0774 0.0543 0.112 0.327

このケースでは、交差検証での性能指標では、ETSモデルの方が正確です。以下、ETSモデルから次の5年の予測を生成し、プロットします。

aus_economy %>%
  model(ETS(Population)) %>%
  forecast(h = "5 years") %>%
  autoplot(aus_economy %>% filter(Year >= 2000)) +
  labs(title = "オーストラリアの人口",
       y = "人数 (百万人)", level = "区間予測")
オーストラリアの人口に適合させたETSモデルからの予測

図 9.28: オーストラリアの人口に適合させたETSモデルからの予測

季節性データでのARIMA()ETS()の比較

このケースでは、(aus_productionから)セメントの四半期生産量に適用する季節性ARIMAモデルとETSモデルを比較しましょう。系列が比較的長いので、時系列交差検証ではなく、訓練セットとテストセットを使う余裕があります。そうする利点はずっと速いことです。1988年初から2007年末までを訓練セットとして、ARIMA()ETS()関数をそれぞれ使って、ARIMAモデルとETSモデルを1つずつ選択しましょう。

cement <- aus_production %>%
  select(Cement) %>%
  filter_index("1988 Q1" ~ .)
train <- cement %>% filter_index(. ~ "2007 Q4")

以下の出力は、ARIMA()が選択、推計したモデルを示しています。残差はホワイトノイズのようですから、ARIMAモデルはデータ内の強弱を全て上手く取り込んでいます。

fit_arima <- train %>% model(ARIMA(Cement))
report(fit_arima)
#> Series: Cement 
#> Model: ARIMA(1,0,1)(2,1,1)[4] w/ drift 
#> 
#> Coefficients:
#>          ar1      ma1   sar1     sar2     sma1  constant
#>       0.8886  -0.2366  0.081  -0.2345  -0.8979     5.388
#> s.e.  0.0842   0.1334  0.157   0.1392   0.1780     1.484
#> 
#> sigma^2 estimated as 11456:  log likelihood=-463.5
#> AIC=941   AICc=942.7   BIC=957.4
fit_arima %>% gg_tsresiduals(lag_max = 16)
セメント四半期生産量の訓練データに適合させたARIMAモデルの残差診断プロット

図 9.29: セメント四半期生産量の訓練データに適合させたARIMAモデルの残差診断プロット

augment(fit_arima) %>%
  features(.innov, ljung_box, lag = 16, dof = 6)
#> # A tibble: 1 × 3
#>   .model        lb_stat lb_pvalue
#>   <chr>           <dbl>     <dbl>
#> 1 ARIMA(Cement)    6.37     0.783

以下の出力は、ETS()が選択、推計したETSモデルを示しています。同様に残差はホワイトノイズのようですから、このモデルもデータ内の強弱を全て上手く取り込んでいます。

fit_ets <- train %>% model(ETS(Cement))
report(fit_ets)
#> Series: Cement 
#> Model: ETS(M,N,M) 
#>   Smoothing parameters:
#>     alpha = 0.7534 
#>     gamma = 1e-04 
#> 
#>   Initial states:
#>  l[0]  s[0] s[-1] s[-2]  s[-3]
#>  1695 1.031 1.045 1.011 0.9122
#> 
#>   sigma^2:  0.0034
#> 
#>  AIC AICc  BIC 
#> 1104 1106 1121
fit_ets %>%
  gg_tsresiduals(lag_max = 16)
セメント四半期生産量の訓練データに適合させたETSモデルの残差診断プロット

図 9.30: セメント四半期生産量の訓練データに適合させたETSモデルの残差診断プロット

augment(fit_ets) %>%
  features(.innov, ljung_box, lag = 16, dof = 6)
#> # A tibble: 1 × 3
#>   .model      lb_stat lb_pvalue
#>   <chr>         <dbl>     <dbl>
#> 1 ETS(Cement)    10.0     0.438

2つの競合するモデルのテストセットでの予測性能を評価したのが、以下の出力です。このケースでは、テストセットのRMSE、MAPE、MASEでは、ARIMAモデルの方がわずかに正確なようです。

# 予測を生成して、テストセットで正確さを比較
bind_rows(
    fit_arima %>% accuracy(),
    fit_ets %>% accuracy(),
    fit_arima %>% forecast(h = 10) %>% accuracy(cement),
    fit_ets %>% forecast(h = 10) %>% accuracy(cement)
  ) %>%
  select(-ME, -MPE, -ACF1)
#> # A tibble: 4 × 7
#>   .model        .type     RMSE   MAE  MAPE  MASE RMSSE
#>   <chr>         <chr>    <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 ARIMA(Cement) Training  100.  79.9  4.37 0.546 0.582
#> 2 ETS(Cement)   Training  103.  80.0  4.41 0.547 0.596
#> 3 ARIMA(Cement) Test      216. 186.   8.68 1.27  1.26 
#> 4 ETS(Cement)   Test      222. 191.   8.85 1.30  1.29

以下、ARIMAモデルから次の3年の予測を生成し、プロットします。

cement %>%
  model(ARIMA(Cement)) %>%
  forecast(h="3 years") %>%
  autoplot(cement) +
  labs(title = "オーストラリアのセメント生産量",
       y = "トン (千)", level = "区間予測")
1988年以降の全ての入手可能なセメント四半期生産量に適合させたARIMAモデルからの予測

図 9.31: 1988年以降の全ての入手可能なセメント四半期生産量に適合させたARIMAモデルからの予測


  1. 既に注意したことですが、情報量規準の比較が有効なのは、同じ差別化次数のARIMAモデル間だけです。↩︎