8.10 ARIMA vs ETS

ARIMA 모델이 지수평활(exponential smoothing)보다 더 일반적이라는 근거없는 믿음을 갖기 쉽습니다. 선형 지수 평활 모델이 ARIMA 모델의 특수한 경우이지만, 비-선형 지수 평활 모델은 ARIMA에 대응되는 부분이 없습니다. 반면에, 많은 ARIMA 모델은 지수평활에 대응되지 않습니다. 특히, 모든 ETS 모델은 정상성을 나타내지 않는 경우에 맞지만, 몇몇 ARIMA 모델은 정상성을 나타내는 경우에 맞습니다.

계절성이나 비-감쇠 추세 아니면 둘 다 있는 ETS 모델은 2개의 단위근(unit root)을 갖습니다(즉, 정상성을 나타내도록 만들려면 차분을 2번 구해야한다는 것입니다). 다른 모든 ETS 모델은 1개의 단위근을 갖습니다(즉, 정상성을 나타내도록 만들려면 차분을 1번 구해야한다는 것입니다).

8.3 는 두 종류의 모델에 대해 대응 관계를 나타낸 것입니다. 계절성 모델은 ARIMA 매개변수에 많은 수의 제약조건이 있습니다.

Table 8.3: 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(0,1,\(m+1\))(0,1,0)\(_m\)

AICc는 같은 범주(class)에 속하는 모델을 고르는데 유용합니다. 예를 들면, AICc를 후보가 될만한 ARIMA 모델18 중에서 어떤 ARIMA 모델을 고르거나 후보가 될만한 ETS 모델 중에서 어떤 ETS 모델을 고를 때 사용할 수 있습니다. 하지만, ETS와 ARIMA 모델은 서로 다른 모델 범주(class)에 속하기 때문에 ETS와 ARIMA 모델은 서로 비교할 때는 사용할 수 없습니다. 아래의 예제는 이러한 범주에 속하는 모델 중에서 고르는 방식을 나타냅니다.

예제: 비-계절성 데이터에서 auto.arima()ets() 비교하기

ARIMA 모델과 ETS 모델을 비교할 때 시계열 교차검증(cross validation)을 사용할 수 있습니다. 아래의 코드는 각각 auto.arima()ets()가 시계열 객체를 결과로 돌려주는 함수를 나타냅니다.

fets <- function(x, h) {
  forecast(ets(x), h = h)
}
farima <- function(x, h) {
  forecast(auto.arima(x), h=h)
}

돌려받은 객체는 tsCV()로 넘길 수 있습니다. 7.2 에서 소개한 aus 데이터에서 ARIMA와 ETS 모델을 살펴봅시다.

# Compute CV errors for ETS as e1
e1 <- tsCV(air, fets, h=1)

# Compute CV errors for ARIMA as e2
e2 <- tsCV(air, farima, h=1)

# Find MSE of each model class
mean(e1^2, na.rm=TRUE)
#> [1] 7.864
mean(e2^2, na.rm=TRUE)
#> [1] 9.622

이 경우에서 MSE 값에 기초해서 보면 ETS 모델이 더 낮은 tsCV 통계값을 갖습니다. ETS 모델로부터 다음 5년에 대한 예측값을 내고 아래와 같이 그래프로 나타냈습니다.

air %>% ets() %>% forecast() %>% autoplot()
ETS 모델을 호주 월별 전체 항공객 데이터에 맞춘 결과로부터 얻은 예측값.

Figure 8.27: ETS 모델을 호주 월별 전체 항공객 데이터에 맞춘 결과로부터 얻은 예측값.

예제: 계절성 데이터에서 auto.arima()ets() 비교하기

여기에서는 분기별 시멘트 생산 데이터 qcement에 적용한 계절성 ARIMA와 ETS 모델을 비교해보려고 합니다. 시계열이 아주 길기 때문에, 시계열 교차 검증보다는 데이터를 학습 데이터와 테스트 데이터로 나누어 사용해도 되겠습니다. 이렇게 데이터를 나누면 계산 속도가 아주 빠르다는 장점이 있습니다. 1988년 초부터 2007년 말까지를 학습 데이터로 두고 auto.arima()ets() 함수를 이용하여 ARIMA와 ETS 모델을 고르겠습니다.

# Consider the qcement data beginning in 1988
cement <- window(qcement, start=1988)
# Use 20 years of the qcement data beginning in 1988
train <- window(cement, end=c(2007,4))

아래의 결과는 auto.arima()로 고르고 추정한 ARIMA 모델을 나타냅니다. 잔차가 백색잡음인 것처럼 나타나기 때문에, ARIMA 모델은 데이터의 모든 동역학을 잘 잡아냅니다.

(fit.arima <- auto.arima(train))
#> Series: train 
#> ARIMA(1,0,1)(2,1,1)[4] with drift 
#> 
#> Coefficients:
#>         ar1     ma1   sar1    sar2    sma1  drift
#>       0.889  -0.237  0.081  -0.235  -0.898  0.010
#> s.e.  0.084   0.133  0.157   0.139   0.178  0.003
#> 
#> sigma^2 estimated as 0.0115:  log likelihood=61.47
#> AIC=-109   AICc=-107.3   BIC=-92.63
checkresiduals(fit.arima)
ARIMA 모델을 분기별 시멘트 생산 학습 데이터에 맞춘 것에 대한 잔차 진단 그래프.

Figure 8.28: ARIMA 모델을 분기별 시멘트 생산 학습 데이터에 맞춘 것에 대한 잔차 진단 그래프.

#> 
#> 	Ljung-Box test
#> 
#> data:  Residuals from ARIMA(1,0,1)(2,1,1)[4] with drift
#> Q* = 3.3, df = 3, p-value = 0.3
#> 
#> Model df: 6.   Total lags used: 9

아래의 결과는 ets()로 고르고 추정한 ETS 모델을 나타냅니다. 여기에서도 잔차가 백색잡음인 것처럼 나타나기 때문에, 이 모델도 데이터의 모든 동역학을 잘 잡아냅니다.

(fit.ets <- ets(train))
#> ETS(M,N,M) 
#> 
#> Call:
#>  ets(y = train) 
#> 
#>   Smoothing parameters:
#>     alpha = 0.7341 
#>     gamma = 1e-04 
#> 
#>   Initial states:
#>     l = 1.6439 
#>     s = 1.031 1.044 1.01 0.9148
#> 
#>   sigma:  0.0581
#> 
#>     AIC    AICc     BIC 
#> -2.1967 -0.6411 14.4775
checkresiduals(fit.ets)
ETS 모델을 분기별 시멘트 생산 학습 데이터에 맞춘 것에 대한 잔차 진단 그래프.

Figure 8.29: ETS 모델을 분기별 시멘트 생산 학습 데이터에 맞춘 것에 대한 잔차 진단 그래프.

#> 
#> 	Ljung-Box test
#> 
#> data:  Residuals from ETS(M,N,M)
#> Q* = 6.3, df = 3, p-value = 0.1
#> 
#> Model df: 6.   Total lags used: 9

아래의 결과에서 두 후보 모델의 예측 성능을 검증 데이터에 대해 평가합니다. 이 경우에 테스트 데이터에 대한 RMSE, MAPE, MASE에 기초해서 보면, ETS 모델이 살짝 더 정확한 모델인 것처럼 보입니다.

# Generate forecasts and compare accuracy over the test set
a1 <- fit.arima %>% forecast(h = 4*(2013-2007)+1) %>%
  accuracy(qcement)
a1[,c("RMSE","MAE","MAPE","MASE")]
#>                RMSE     MAE  MAPE   MASE
#> Training set 0.1001 0.07989 4.372 0.5458
#> Test set     0.1996 0.16882 7.719 1.1534
a2 <- fit.ets %>% forecast(h = 4*(2013-2007)+1) %>%
  accuracy(qcement)
a2[,c("RMSE","MAE","MAPE","MASE")]
#>                RMSE     MAE  MAPE   MASE
#> Training set 0.1022 0.07958 4.372 0.5437
#> Test set     0.1839 0.15395 6.986 1.0518

ARIMA 모델이 ETS 모델보다 학습 데이터를 살짝 더 잘 맞추지만 ETS 모델이 테스트 데이터에 대한 더 정확한 예측값을 내는 것에 주목합시다. 학습 데이터를 잘 맞춘다고 해서 모델이 예측을 잘 할 것이라는 것을 의미하지 않습니다.

아래에서 ETS 모델로부터 다음 3년에 해당하는 예측값을 내고 값을 그래프로 나타냅니다.

# Generate forecasts from an ETS model
cement %>% ets() %>% forecast(h=12) %>% autoplot()
ETS 모델을 사용 가능한 모든 분기별 시멘트 생산 데이터에 적용한 결과로부터 얻은 예측값.

Figure 8.30: ETS 모델을 사용 가능한 모든 분기별 시멘트 생산 데이터에 적용한 결과로부터 얻은 예측값.


  1. 앞에서 언급했던 것처럼, 정보 기준을 비교하는 것은 같은 차수로 차분을 구한 ARIMA 모델에 대해서만 의미가 있습니다.↩︎