8.5 비-계절성 ARIMA 모델

차분을 구하는 것을 자기회귀와 이동 평균 모델과 결합하면, 비-계절성(non-seasonal) ARIMA 모델을 얻습니다. ARIMA는 AutoRegressive Integrated Moving Average (이동 평균을 누적한 자기회귀)의 약자입니다(이러한 맥락에서, “누적(integration)”은 차분의 반대 의미를 갖습니다). 모델을 다음과 같이 나타낼 수 있습니다. \[\begin{equation} y'_{t} = c + \phi_{1}y'_{t-1} + \cdots + \phi_{p}y'_{t-p} + \theta_{1}\varepsilon_{t-1} + \cdots + \theta_{q}\varepsilon_{t-q} + \varepsilon_{t}, \tag{8.1} \end{equation}\] 여기에서 \(y'_{t}\)는 차분을 구한 시계열입니다(한 번 이상 차분을 구한 것일 수도 있습니다). 우변의 “예측변수(predictor)”에는 \(y_t\)의 시차 값과 시차 오차(lagged error) 둘 다를 포함합니다. 이것을 ARIMA(\(p, d, q\)) 모델이라고 부르겠습니다. 여기에서 각 변수 \(p, d, q\)는 다음과 같은 의미를 갖습니다.

\(p=\) 자기회귀 부분의 차수;
\(d=\) 1차 차분이 포함된 정도;
\(q=\) 이동 평균 부분의 차수.

자기회귀(autoregression)와 이동 평균 모델에 사용되는 것과 같은 정상성(stationarity)과 가역성(invertiblity) 조건은 ARIMA 모델에도 적용됩니다.

8.1 에서 나타낸 것처럼 지금까지 다룬 많은 모델은 ARIMA 모델의 특수한 경우입니다.

Table 8.1: ARIMA 모델의 특별한 경우.
백색잡음 ARIMA(0,0,0)
확률보행 상수가 없는 ARIMA(0,1,0)
표류를 포함하는 확률보행 상수가 있는 ARIMA(0,1,0)
자기회귀 ARIMA(\(p\),0,0)
이동평균 ARIMA(0,0,\(q\))

이러한 방식으로 더욱 복잡한 모델을 만들기 위해 성분을 결합할 때, 후방이동(backshift) 기호를 쓰면 훨씬 쉬워집니다. 예를 들어, 식 (8.1)은 후방이동 기호를 이용해서 다음과 같이 쓸 수 있습니다. \[\begin{equation} \tag{8.2} \begin{array}{c c c c} (1-\phi_1B - \cdots - \phi_p B^p) & (1-B)^d y_{t} &= &c + (1 + \theta_1 B + \cdots + \theta_q B^q)\varepsilon_t\\ {\uparrow} & {\uparrow} & &{\uparrow}\\ \text{AR($p$)} & \text{$d$ differences} & & \text{MA($q$)}\\ \end{array} \end{equation}\]

R에서는 약간 다른 매개변수화 과정을 사용합니다: \[\begin{equation} \tag{8.3} (1-\phi_1B - \cdots - \phi_p B^p)(y_t' - \mu) = (1 + \theta_1 B + \cdots + \theta_q B^q)\varepsilon_t, \end{equation}\] 여기에서 \(y_t' = (1-B)^d y_t\)이고 \(\mu\)\(y_t'\)의 평균입니다. (8.2)로 주어지는 형태로 바꾸기 위해, \(c = \mu(1-\phi_1 - \cdots - \phi_p )\)로 둡시다.

\(p\), \(d\), \(q\)의 적절한 값을 고르는 것이 어려울 수 있습니다. 하지만, R에서 auto.arima() 함수가 자동으로 해줄 것입니다. 8.7 절에서, 이 함수가 어떻게 작동하는지와 여러분 스스로 이러한 값을 선택할 수 있도록 돕는 몇 가지 기법을 배울 것입니다.

미국의 소비 지출

그림 8.7 은 미국 소비 지출 분기별 백분율 변화를 나타냅니다. 분기별 시계열이지만, 계절성 패턴이 나타나지 않는 것 같습니다. 따라서 비-계절성 ARIMA 모델로 맞추겠습니다.

autoplot(uschange[,"Consumption"]) +
  xlab("연도") + ylab("분기별 백분율 변화")
미국 소비 지출의 분기별 백분율 변화.

Figure 8.7: 미국 소비 지출의 분기별 백분율 변화.

다음의 R 코드는 모델을 자동으로 선택할 때 사용합니다.

fit <- auto.arima(uschange[,"Consumption"], seasonal=FALSE)
#> Series: uschange[, "Consumption"] 
#> ARIMA(1,0,3) with non-zero mean 
#> 
#> Coefficients:
#>         ar1     ma1    ma2    ma3   mean
#>       0.589  -0.353  0.085  0.174  0.745
#> s.e.  0.154   0.166  0.082  0.084  0.093
#> 
#> sigma^2 estimated as 0.35:  log likelihood=-164.8
#> AIC=341.6   AICc=342.1   BIC=361

아래는 ARIMA(1,0,3) 모델입니다: \[ y_t = c + 0.589y_{t-1} -0.353 \varepsilon_{t-1} + 0.0846 \varepsilon_{t-2} + 0.174 \varepsilon_{t-3} + \varepsilon_{t}, \] 여기에서 \(c= 0.745 \times (1 - 0.589) = 0.307\)이고 \(\varepsilon_t\)는 다음과 같이 \(0.592 = \sqrt{0.350}\) 이러한 표준 편차를 갖는 백색잡음(white noise)입니다. 그림 8.8에 모델로 얻은 예측값을 나타내었습니다.

fit %>% forecast(h=10) %>% autoplot(include=80) +
  ggtitle("0이 아닌 평균을 가지는 ARIMA(2,0,2)로부터 얻은 예측값") + ylab("소비")
미국 소비 지출의 분기별 백분율 변동의 예측값.

Figure 8.8: 미국 소비 지출의 분기별 백분율 변동의 예측값.

ARIMA 모델 이해하기

auto.arima() 함수는 유용합니다만, 모든 입력을 자동으로 결정하게 두면 약간 위험할 수 있습니다. 그리고 자동으로 모델을 고르게 두더라도 모델이 대략적으로 작동하는 방식은 공부해볼만 합니다.

상수 \(c\)는 이러한 모델에서 얻은 장기 예측값에 중요한 영향을 줍니다.

  • \(c=0\)이고 \(d=0\)이면, 장기 예측값이 0에 가까워질 것입니다.
  • \(c=0\)이고 \(d=1\)이면, 장기 예측값이 0이 아닌 상수에 가까워질 것입니다.
  • \(c=0\)이고 \(d=2\)이면, 장기 예측값이 직선 형태로 나타나게 될 것입니다.
  • \(c\ne0\)이고 \(d=0\)이면, 장기 예측값이 데이터의 평균에 가까워질 것입니다.
  • \(c\ne0\)이고 \(d=1\)이면, 장기 예측값이 직선 형태로 나타나게 될 것입니다.
  • \(c\ne0\)이고 \(d=2\)이면, 장기 예측값이 2차 곡선 추세로 나타나게 될 것입니다.

\(d\) 값은 예측 구간(prediction interval)에도 영향을 줍니다 — \(d\) 값이 클 수록, 예측 구간의 크기가 더욱 급격하게 늘어닙니다. \(d=0\)에서, 장기 예측 표준 편차가 과거 데이터의 표준 편차에 가까워질 것이고, 따라서 모든 예측 구간은 실제적으로는 같게 될 것입니다.

그림 8.8은 이러한 행동을 나타냅니다. 여기에서 \(d=0\)이고 \(c\ne0\)입니다. 이 그림에서, 예측 구간은 마지막 몇 개의 예측 수평선(forecast horizon)에 대한 경우와 거의 같고, 점 예측값(point forecast)은 데이터의 평균과 같습니다.

\(p\) 값은 데이터에서 주기(cycles)가 나타날 때 중요합니다. 주기적 예측값을 얻기 위해서는, 매개변수에 대한 몇 가지 추가적인 조건과 함께 \(p\ge 2\)이어야 합니다. AR(2) 모델의 경우에, \(\phi_1^2+4\phi_2<0\)이면 주기적인 행동이 나타냅니다. 이 경우에, 주기(cycle)의 평균 기간은 다음과 같습니다16. \[ \frac{2\pi}{\text{arc cos}(-\phi_1(1-\phi_2)/(4\phi_2))}. \]

ACF와 PACF 그래프

보통은 단순하게 시간 그래프(time plot)만 보고나서 어떤 \(p\)\(q\) 값이 데이터에 맞는지 이야기할 수 없습니다. 하지만, 적절한 \(p\)\(q\) 값을 결정하기 위해서 때때로 ACF 그래프와 PACF 그래프를 이용하면 가능합니다.

서로 다른 \(k\) 값에 대해, \(y_t\)\(y_{t-k}\)의 관계를 측정하는 자기상관값(autocorrelation)을 나타내는 ACF 그래프를 다시 떠올려봅시다. \(y_t\)\(y_{t-1}\)이 상관 관계가 있다면, \(y_{t-1}\)\(y_{t-2}\)에도 상관관계가 있어야 합니다. 하지만, \(y_t\)\(y_{t-2}\)는 (\(y_t\)를 예측하는데 사용될 수도 있는) \(y_{t-2}\)에 담긴 어떤 새로운 정보 때문이 아니라 단순히 두 값 모두 \(y_{t-1}\)과 관련이 있기 때문에 상관관계를 가질 수도 있습니다.

이러한 문제를 극복하기 위해, 부분 자기상관값들(partial autocorrelations)을 이용할 수 있습니다. 이 값은 시차 \(1, 2, 3, \dots, k - 1\)의 효과를 제거한 후의 \(y_{t}\)\(y_{t-k}\) 사이의 관계를 측정합니다. 그래서 첫 번째 부분 자기상관은 제거할 부분이 없어서 첫 번째 자기상관과 같습니다. 각 부분 자기상관은 자기회귀 모델의 마지막 계수처럼 측정할 수 있습니다. 구체적으로, \(k\)번째 부분 자기상관 계수 \(\alpha_k\)은 AR(\(k\)) 모델에서 \(\phi_k\) 측정값과 같습니다. 실제 상황에서는, 이러한 자기회귀값 전부를 맞추는 것과 같은 결과를 내면서 더 효율적으로 \(\alpha_k\)를 계산하는 알고리즘들이 존재합니다.

그림 8.98.10은 그림 8.7에서 나타낸 미국 소비 데이터의 ACF와 PACF 그래프를 나타냅니다. 부분 자기상관값은 보통의 자기상관값처럼 \(\pm 1.96/\sqrt{T}\)로 같은 임계 값을 갖고, 보통은 그림 8.9에서 나타낸 것처럼 그래프로 나타냅니다.

ggAcf(uschange[,"Consumption"])
미국 소비 데이터에서 분기별 백분율 변동의 ACF.

Figure 8.9: 미국 소비 데이터에서 분기별 백분율 변동의 ACF.

ggPacf(uschange[,"Consumption"])
미국 소비 데이터에서 분기별 백분율 변동의 PACF.

Figure 8.10: 미국 소비 데이터에서 분기별 백분율 변동의 PACF.

데이터가 ARIMA(\(p\),\(d\),0)나 ARIMA(0,\(d\),\(q\)) 모델에서 왔다면, \(p\)\(q\) 값을 결정할 때 ACF와 PACF 그래프가 유용할 수 있습니다.17 \(p\)\(q\)가 모두 양수라면, 적절한 \(p\)\(q\) 값을 찾을 때 이러한 그래프는 도움이 되지 않습니다.

차분을 구한 데이터의 ACF와 PACF 그래프가 다음과 같은 패턴을 나타내면, 데이터는 ARIMA(\(p\),\(d\),0) 모델을 따를 수도 있습니다:

  • ACF가 지수적으로 감소하거나 사인 함수 모양인 경우;
  • PACF 그래프에서 시차 \(p\)에 뾰족한 막대가 유의미하게 있지만, 시차 \(p\) 이후에는 없을 때.

차분을 구한 데이터의 ACF와 PACF 그래프가 다음과 같은 패턴을 나타내면, 데이터는 ARIMA(0, \(d\),\(q\)) 모델을 따를 수도 있습니다:

  • PACF가 지수적으로 감소하거나 사인 함수 모양인 경우;
  • ACF 그래프에서 시차 \(p\)에 뾰족한 막대가 유의미하게 있지만, 시차 \(q\) 이후에는 없을 때.

그림 8.9에서, ACF에서 시차 4에서 나타나는 거의 유의미한 뾰족한 막대 이전에 3개의 뾰족한 막대가 있는 것을 알 수 있습니다. PACF에서 3개의 유의미한 뾰족한 막대가 있고, 그 이후에는 (22 뒤처짐에서 경계를 한 번 벗어나는 것을 제외하고는) 유의미하게 나타나는 뾰족한 막대가 없습니다. 각 그래프에서 처음 몇 뒤처짐이 아니라 한 번 유의미하게 경계를 벗어나는 것을 무시할 수 있습니다. 결국에, 뾰족한 막대가 유의미하게 될 확률은 1/20이고, 각 그래프에서 시차 22에서 나타나는 뾰족한 막대를 나타냈습니다. 첫 3개의 뾰족한 막대에서 나타나는 패턴은 PACF가 감소하는 경향을 통해 ARIMA(3,0,0)에서 예측했던 것입니다. 그래서 ACF와 PACF을 보면 이 경우에는 ARIMA(3,0,0) 모델이 적절할 수도 있다고 생각할 수 있습니다.

(fit2 <- Arima(uschange[,"Consumption"], order=c(3,0,0)))
#> Series: uschange[, "Consumption"] 
#> ARIMA(3,0,0) with non-zero mean 
#> 
#> Coefficients:
#>         ar1    ar2    ar3   mean
#>       0.227  0.160  0.203  0.745
#> s.e.  0.071  0.072  0.071  0.103
#> 
#> sigma^2 estimated as 0.349:  log likelihood=-165.2
#> AIC=340.3   AICc=340.7   BIC=356.5

사실 이 모델은 (342.08와 비교하는 AICc 값 340.67을 가지는) auto.arima()로 찾은 모델보다 살짝 낫습니다. auto.arima() 함수는 찾을 때 모든 가능한 모델을 고려하지 않기 때문에 이 모델을 못 찾습니다. stepwise=FALSEapproximation=FALSE 입력값으로 더 잘 찾을 수 있습니다:

(fit3 <- auto.arima(uschange[,"Consumption"], seasonal=FALSE,
  stepwise=FALSE, approximation=FALSE))
#> Series: uschange[, "Consumption"] 
#> ARIMA(3,0,0) with non-zero mean 
#> 
#> Coefficients:
#>         ar1    ar2    ar3   mean
#>       0.227  0.160  0.203  0.745
#> s.e.  0.071  0.072  0.071  0.103
#> 
#> sigma^2 estimated as 0.349:  log likelihood=-165.2
#> AIC=340.3   AICc=340.7   BIC=356.5

계절성 ARIMA 모델을 검색하지 않도록 하기 위해 입력값 seasonal=FALSE도 사용합니다; 8.9 절에서 이러한 모델을 다루겠습니다.

이번에는 auto.arima()가 ACF와 PACF 그래프에서 추측할 수 있는 것과 같은 모델을 찾았습니다. ARIMA(3,0,0) 모델로부터 얻은 예측값은 ARIMA(2,0,2) 모델에 대해 그림 8.8에서 나타낸 것과 거의 같기 때문에, 여기에서 그래프를 그리지는 않았습니다.


  1. arc cos 은 코사인 함수의 역함수입니다. 여러분의 계산기로 이 값을 계산할 수 있어야 합니다. acos나 cos\(^{-1}\)로 나타내기도 합니다.↩︎

  2. ggtsdisplay() 함수를 이용하면 시간 그래프, ACF, PACF 등을 한번에 편하게 그릴 수 있습니다.↩︎