7.6 추정과 모델 선택
ETS 모델들 추정하기
제곱 오차의 합을 최소화하여 매개변수를 추정하는 방법의 한 가지 대안은 “가능도(또는 우도)likelihood”를 최대화하는 것입니다. 가능도(likelihood)는 특정한 모델에서 일어나는 데이터의 확률입니다. 그래서 큰 가능도는 좋은 모델과 관련 있습니다. 덧셈 오차 모델의 경우에, (오차가 정규 분포를 따른다고 가정하고) 가능도를 최대화하면 제곱 오차의 합을 최소화하는 것과 결과가 같습니다. 하지만, 곱셈 오차 모델의 경우에는 서로 다른 결과를 낼 것입니다. 이 절에서는 가능도를 최대화하여 평활 매개변수 \(\alpha\), \(\beta\), \(\gamma\), \(\phi\)과 초기 상태 \(\ell_0\), \(b_0\), \(s_0,s_{-1},\dots,s_{-m+1}\)을 구할 것입니다.
평활 매개변수가 가질 수 있는 값의 범위는 제한되어있습니다. 전통적으로는 관련 식이 가중평균으로 해석될 수 있도록 매개변수가 0과 1사이 범위로 제한됩니다. 즉, \(0< \alpha,\beta^*,\gamma^*,\phi<1\)입니다. 상태 공간 모델의 경우에, \(\beta=\alpha\beta^*\)와 \(\gamma=(1-\alpha)\gamma^*\)로 두었습니다. 그래서 전통적인 제한조건이 \(0< \alpha <1\), \(0 < \beta < \alpha\), \(0< \gamma < 1-\alpha\)로 바뀝니다. 실제적인 상황에서는 수치적인 어려움을 막기 위해 보통은 감쇠 매개변수 \(\phi\)에도 제한을 둡니다. R에서는 \(0.8<\phi<0.98\)가 되도록 제한합니다.
상태 공간 모델의 수학적인 특성을 고려하는 것은 매개변수를 해석하는 또 다른 방법입니다. 현재 예측값에 지속적으로 영향을 미치는 먼 과거의 관측값을 방지하도록 매개변수에 제한 조건이 걸립니다. 이로부터 매개변수에 대한 몇 가지 허용성(admissibility) 제한 조건이 나옵니다. 이러한 제한 조건은 (항상 그렇지는 않지만) 보통은 전통적인 제한조건의 범위보다는 덜 제한적입니다(Hyndman et al., 2008, p. Ch10). 예를 들면, ETS(A,N,N) 모델의 경우에는, 흔히 사용하는 매개변수 범위는 \(0< \alpha <1\)이지만, 허용 범위는 \(0< \alpha <2\)입니다. ETS(A,A,N) 모델의 경우에는, 전통적인 매개변수 범위는 \(0<\alpha<1\)와 \(0<\beta<\alpha\)이지만, 허용 범위는 \(0<\alpha<2\)와 \(0<\beta<4-2\alpha\)입니다.
모델 선택
모델을 선택할 때 정보 기준을 사용할 수 있다는 것은 ETS 통계 체계의 큰 장점입니다. ETS 모델 중에서 주어진 시계열의 경우에 어떤 것이 가장 적절한지 결정하기 위해 5.5 절에서 소개한 AIC, AIC\(_{\text{c}}\), BIC을 사용할 수 있습니다.
ETS 모델의 경우에 아카이케(Akaike)의 정보 기준(AIC)은 다음과 같이 정의됩니다. \[ \text{AIC} = -2\log(L) + 2k, \] 여기에서 \(L\)은 모델의 가능도(likelihood)이고, \(k\)는 잔차 분산을 포함하여 추정되는 매개변수와 초기 상태의 전체 개수입니다.
작은 표본에 대해 보정된 AIC는(AIC\(_\text{c}\)) 다음과 같이 정의됩니다. \[ \text{AIC}_{\text{c}} = \text{AIC} + \frac{2k(k+1)}{T-k-1}, \] 그리고 베이지안(Bayesian) 정보 기준(BIC)은 \[ \text{BIC} = \text{AIC} + k[\log(T)-2]. \] 입니다.
(오차Error, 추세Trend, 계절성Seasonal)의 세 가지 성분의 조합에서 수치적으로 어려운 부분이 생길 수 있습니다. 구체적으로, 이러한 불안정성을 일으킬 수 있는 모델은 ETS(A,N,M), ETS(A,A,M), ETS(A,A\(_d\),M)입니다. 상태 식에서 0에 가까운 값으로 나눌 수도 있기 때문입니다. 이런 특정 조합은 모델을 선택할 때 보통은 고려하지 않겠습니다.
곱셈 오차를 이용하는 모델은 데이터가 분명하게 양수일 때는 유용합니다만, 데이터에 0이나 음수 값이 있으면 수치적으로 안정하지 않습니다. 그래서 곱셈 오차 모델은 시계열이 양수가 분명하게 양수가 아닐 때 사용하지 않을 것입니다. 이러한 경우에는 덧셈 오차만 이용하는 여섯 가지 모델만 적용할 것입니다.
R의 ets()
함수
R의 forecast 패키지에 있는 ets()
함수를 사용하여 모델을 추정할 수 있습니다. ses()
, holt()
, hw()
함수와는 달리, ets()
함수는 예측값을 내진 않습니다. 대신에, 모델 매개변수를 추정하고, 맞춘 모델에 대한 정보를 돌려줍니다. 다른 정보 기준을 선택할 수도 있긴 하지만, 이 함수는 적절한 모델을 고를 때 기본값으로 AICc 를 사용합니다.
아래의 R 코드는 이 함수가 받는 가장 중요한 입력과 기본 설정값을 나타냅니다. 시계열만 구체적으로 정하고, 다른 모든 입력값을 기본 설정값으로 두면, 자동으로 적절한 모델이 선택될 것입니다. 아래에 입력값을 설명하였습니다. 자세한 설명은 도움말 파일을 참조하시길 바랍니다.
ets(y, model="ZZZ", damped=NULL, alpha=NULL, beta=NULL, gamma=NULL,
phi=NULL, lambda=NULL, biasadj=FALSE, additive.only=FALSE,
restrict=TRUE, allow.multiplicative.trend=FALSE)
y
- 예측할 시계열.
model
-
추정할 모델을 ETS 분류법과 표기법에 따라 나타내는 3자리 코드. 가능한 입력값은 다음과 같습니다. “N”은 없다는 것을, “A”는 덧셈, “M”은 곱셈, 또는 “Z”는 자동으로 선택하는 것을 의미합니다. 각 입력값을 “Z”로 두면 정보 기준에 따라 성분을 선택합니다. 기본 설정값
ZZZ
는 모든 성분을 정보 기준에 따라 선택하는 것을 의미합니다. damped
-
만약에
damped=TRUE
이면, 감쇠 추세 (A나 M 중에서 하나)를 사용할 것입니다.damped=FALSE
이면, 비-감쇠 추세를 사용할 것입니다.damped=NULL
(기본 설정값), 어떤 모델이 가장 낮은 정보 기준 값을 갖는지에 따라 감쇠와 비-감쇠 추세 중에서 하나를 선택할 것입니다. alpha
,beta
,gamma
,phi
-
평활 매개변수의 값은 이러한 입력값을 이용하여 구체적으로 정할 수 있습니다. 만약에 이러한 값을
NULL
로 두면(각각에 대한 기본 설정값), 매개변수를 추정합니다. lambda
-
박스-칵스(Box-Cox) 변환 매개변수.
lambda=NULL
이면(기본 설정값), 이 항목은 무시됩니다. 그렇지 않으면, 모델을 추정하기 전에, 시계열이 변환될 것입니다.lambda
가NULL
이 아닐 때는,additive.only
가TRUE
로 정해집니다. biasadj
-
TRUE
이고lambda
가NULL
이 아니면, 역 변환된 적합값과 예측값이 편향에 대해 조정될 것입니다. additive.only
-
additive.only=TRUE
이면, 덧셈 성분을 이용하는 모델만 고려합니다. 그렇지 않으면, 모든 모델을 고려합니다. restrict
-
만약에
restrict=TRUE
(기본 설정값), 수치적으로 어려운 부분이 생기는 모델을 모델을 선택할 때 고려하지 않습니다. allow.multiplicative.trend
-
곱셈 추세 모델도 사용할 수 있습니다만, 이 책에서는 다루지 않습니다. 이러한 모델을 고려하도록 하려면 이 입력을
TRUE
로 두시길 바랍니다.
ets
객체로 작업하기
ets()
함수는 ets
클래스의 객체를 돌려줄 것입니다. ets
객체로 작업하기 쉽도록 설계된 R 함수가 많이 있습니다. 그 중의 몇 가지를 아래에 설명하였습니다.
coef()
- 맞춘 매개변수 전부를 돌려줍니다.
accuracy()
- 학습 데이터에 대해 계산된 정확도 측정값을 돌려줍니다.
summary()
- 적합모델에 대한 몇 가지 요약 정보를 출력합니다.
autoplot()
andplot()
- 성분의 시간 그래프(time plot)를 그립니다.
residuals()
추정한 모델에서 잔차(residual)를 돌려줍니다.
fitted()
- 학습 데이터에 대한 한 단계 예측값을 돌려줍니다.
simulate()
- 적합모델(fitted model)에서 미래 표본 경로(future sample path)를 모사합니다.
forecast()
- 다음 절에서 설명하는 것과 같이, 점 예측값(point forecast)과 예측구간(prediction interval)을 계산합니다.
예제: 호주를 방문하는 국제 여행객 숙박일 수
이제 ETS 통계 틀을 가지고 호주를 방문하는 국제 여행객 숙박일 수를 2016년부터 2019년까지의 기간에 대해 예측해봅시다. ets()
함수가 AICc를 최소화하는 모델을 선택하도록 두겠습니다.
<- window(austourists, start=2005)
aust <- ets(aust)
fit summary(fit)
#> ETS(M,A,M)
#>
#> Call:
#> ets(y = aust)
#>
#> Smoothing parameters:
#> alpha = 0.1908
#> beta = 0.0392
#> gamma = 2e-04
#>
#> Initial states:
#> l = 32.3679
#> b = 0.9281
#> s = 1.022 0.9628 0.7683 1.247
#>
#> sigma: 0.0383
#>
#> AIC AICc BIC
#> 224.9 230.2 240.9
#>
#> Training set error measures:
#> ME RMSE MAE MPE MAPE MASE
#> Training set 0.04837 1.671 1.25 -0.1846 2.693 0.4095
#> ACF1
#> Training set 0.2006
선택된 모델은 ETS(M,A,M)입니다:
\[\begin{align*}
y_{t} &= (\ell_{t-1} + b_{t-1})s_{t-m}(1 + \varepsilon_t)\\
\ell_t &= (\ell_{t-1} + b_{t-1})(1 + \alpha \varepsilon_t)\\
b_t &=b_{t-1} + \beta(\ell_{t-1} + b_{t-1})\varepsilon_t\\
s_t &= s_{t-m}(1+ \gamma \varepsilon_t).
\end{align*}\]
매개변수 추정치는 \(\hat\alpha=0.1908\), \(\hat\beta=0.0392\), \(\hat\gamma=0.0002\)입니다. 출력값은 초기 상태 \(\ell_0\), \(b_0\), \(s_{0}\), \(s_{-1}\), \(s_{-2}\), \(s_{-3}\)에 대한 추정치도 돌려줍니다. 이 값을 표 7.4에서 나타낸 곱셈 계절성을 이용한 홀트-윈터스(Holt-Winters) 기법으로 얻은 값과 비교해봅시다. 이 모델이 곱셈 홀트-윈터스(Holt-Winters) 기법으로 얻은 점 예측값과 같은 결과를 주긴 하더라도, 매개변수는 다른 방식으로 추정됩니다. ets()
함수에서는 기본 추정 기법으로 최소 제곱합(minimum sum of squares) 대신 최대 가능도(maximum likelihood)를 사용합니다.
그림 7.9은 시간에 따른 상태를 나타내지만, 그림 7.11은 모델이 생성한 점 예측값과 예측구간을 나타냅니다. 작은 \(\beta\)와 \(\gamma\) 값은 기울기와 계절 성분이 시간에 따라서 아주 작게 변한다는 것을 뜻합니다. 좁은 예측 구간은 강한 추세와 계절성 때문에 비교적 시계열을 예측하기 쉽다는 것을 말합니다.
autoplot(fit) +
ggtitle("ETS(M,A,M) 기법의 성분")

Figure 7.9: 추정된 상태를 시간에 따라 시각적으로 표현한 것.
이 모델에 곱셈 오차가 있기 때문에, 잔차는 한 단계 학습 오차와 같지 않습니다. 잔차는 \(\hat{\varepsilon}_t\)으로 주어지고, 한 단계 학습 오차는 \(y_t - \hat{y}_{t|t-1}\)로 정의됩니다. residuals
함수를 이용하여 두 가지 다 구할 수 있습니다.
cbind('잔차' = residuals(fit),
'예측 오차' = residuals(fit, type='response')) %>%
autoplot(facet=TRUE) + xlab("연도") + ylab("")

Figure 7.10: ETS(M,A,M) 모델로부터 얻은 잔차와 한 단계 앞 예측 오차.
잔차와 예측 오차를 구분하기 위해 residuals()
함수에서 type
입력값을 사용했습니다. 기본값은 type='innovation'
이고 규칙적인 잔차를 돌려줍니다.