차분을 구하는 것을 자기회귀와 이동 평균 모델과 결합하면, 비-계절성(non-seasonal) ARIMA 모델을 얻는다.

ARIMA는 AutoRegressive Integrated Moving Average(이동 평균을 누적한 자기회귀)의 약자이다.

 

*이러한 맥락에서 '누적(integration)'은 차분의 반대 의미를 갖는다).

모델은 다음과 같다.

여기에서

 

 

 

 

ARIMA 모델의 특별한 경우

위 표는 ARIMA 모델의 특수한 경우이다.

이러한 방식으로 더욱 복잡한 모델을 만들기 위해 성분을 결합할 때, 후방이동(backshift)기호를 쓰면 훨씬 쉬워진다.

A

R에서는 약간 다른 매개변수화 과정을 사용한다.

B

여기에서,

u는 y't의 평균이다. 위 A모델로 주어지는 형태로 바꾸기 위해, 다음과 같이 두자.

p,d,q의 적절한 값을 고르는 것이 어려울 수 있다. 하지만, R에선 auto.arima() 파이썬에서는 pmdarima 모듈을 통해 auto_arima를 불러올 수 있다.

이 함수가 어떻게 작동하는지와 스스로 이러한 값을 선택할 수 있도록 몇 가지 기법을 알아보자.

 

다음 예는 R을 사용하여 비계절성을 알아보는 것이다. 다음 내용들은 참고하여 쓰는것이기 때문이다.

파이썬은 개인적으로 포스팅을 다시 하도록 하겠다.

 

미국의 소비 지출

autoplot(uschange[,"Consumption"]) +
  xlab("연도") + ylab("분기별 백분율 변화")

 

미국 소비 지출의 분기별 백분율 변화

위 그래프는 미국 소비 지출 분기별 백분율 변화를 나타낸다. 분기별 시계열이지만, 계절성 패턴이 나타나지 않는 것 같다. 

따라서 비-계절성 ARIMA 모델로 맞춰보자.

 

다음 코드는 모델을 자동으로 선택할 때 사용한다.

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) 모델이다.

여기에서 c=0.745*(1-0.589)=0.307 이고 Et는 다음과 같이 0.592=Route(0.350)이다.

이러한 표준 편차를 갖는 백색잡음(white noise)이다.

fit %>% forecast(h=10) %>% autoplot(include=80) +
  ggtitle("0이 아닌 평균을 가지는 ARIMA(2,0,2)로부터 얻은 예측값") + ylab("소비")

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

다음과 같은 예측값을 나타내었다.

 

ARIMA 모델 이해하기

auto.arima() 함수는 유용하지만, 모든 입력을 자동으로 결정하게 두면 약간 위험할 수 있다.

그리고 자동으로 모델을 고르게 두더라도 모델이 대략적으로 작동하는 방식은 공부해볼만 하다.

 

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

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

d 값은 예측 구간(prediction interval)에도 영향을 준다. d값이 클 수록, 예측 구간의 크기가 더욱 급격하게 늘어난다.

d=0에서, 장기 예측 표준 편차가 과거 데이터의 표준 편차에 가까워질 것이고, 따라서 모든 예측 구간은 실제적으로 같게 될 것이다.

 

위 그래프는 이러한 행동을 나타낸다. 여기에서 d=0이고 c is not equal 0이다. 위 그래프에서, 예측 구간은 마지막 몇 개의 예측 수평선(forecast horizon)에 대한 경우가 거의 같고, 점 예측값(point forecast)은 데이터의 평균과 같다.

p 값은 데이터에서 주기(cycles)가 나타날 때 중요하다. 주기적 예측값을 얻기 위해서는, 매개변수에 대한 몇 가지 추가적인 조건과 함께 p>=2 이어야 한다. AR(2) 모델의 경우, ϕ21+4ϕ2<0이면 주기적인 행동이 나타난다.

이 경우에, 주기(cycle)의 평균 기간은 다음과 같다.

 

ACF와 PACF 그래프

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

 

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

 

이러한 문제를 극복하기 위해, 부분 자기상관값들(partial autocorrelations)을 이용할 수 있다. 

이 값은 시차 1,2,3,.....,k-1 의 효과를 제거한 후의 yt와 yt-k 사이의 관계를 측정한다. 그래서 첫 번째 부분 자기상관은 제거할 부분이 없어서 첫 번째 자기상관과 같다. 각 부분 자기상관은 자기회귀 모델의 마지막 계수처럼 측정할 수 있다. 구체적으로, k번째 부분 자기상관 계수

 

ggACF(uschange[,"Consumption"])

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

ggPacf(uschange[,"Consumption"])

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

데이터가 ARIMA(p,d,0)나 ARIMA(0,d,q) 모델에서 왔다면, p나 q 값을 결정할 때 ACF와 PACF 그래프가 유용할 수 있다.

p와 q가 모두 양수라면, 적절한 p와 q값을 찾을 때 이러한 그래프는 도움이 되지 않는다.

 

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

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

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

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

위 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=FALSE 와 approximation=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 도 사용한다. 

이번 장에서는 auto.arima()가 ACF와 PACF 그래프에서 추측할 수 있는 것과 같은 모델을 찾았다.

ARIMA(3,0,0) 모델로부터 얻은 예측값은 ARIMA(2,0,2)모델에 대해 위 그래프에서 나타낸 것과 거의 같기 때문에 더이상 그리지는 않겠다.

 

 

[출처:otexts.com/fppkr/non-seasonal-arima.html]

+ Recent posts