본문 바로가기
통계 & 데이터분석/Stats101

시계열분석 - ARIMA (AirPassengers)

by 미니티스틱 2023. 5. 24.

 


NOTE
 

Trend(추세): 방향성(하향, 상향)
Seasonality(계절성): 시기적(계절적)으로 반복적인 패턴을 나타냄. 주로 단기.
Cycle(주기): 주로 장기. 주기성이 있으나 추세나 계절성이 없으면 정상성을 나타내는 시계열에 해당.
 
 
Stationarity(정상성): 시계열의 평균, 분산 및 공분산이 모두 시간의 변화에 관계없이 일정. 주로 추세나 계절성을 보이지 않는 시계열을 white noise로 정상성을 보이는 시계열이라 할 수 있음.  ACF 그래프를 사용하거나, Dickey-Fuller 검정 사용.

  •        ACF(Auto-Correlation Function): 정상성을 나타내지 않는 데이터에서는 ACF가 느리게 감소하지만, 정상성을 나타내는 시계열에서는, ACF가 비교적 빠르게 0으로 떨어짐.
  •        Dickey-Fuller Test:

               귀무가설: 시계열이 정상성을 나타내지 않는다.
               대립가설: 시계열이 정상성을 나타낸다. 
 
 
ACF(Auto-Correlation Function): ACF는 lag 값과의 auto-correlation. 현재의 값이 과거의 얼마 값까지 연관이 있는지 알 수 있음. ARIMA 모델에서 MA(Moving Average) 차수 q를 결정.
PACF(Partial Auto-Correlation Function): 다음 시차 값과 잔차의 상관 관계를 찾음. ARIMA 모델에서 AR(Autoregressive) 차수 p 를 결정.
 
Log transformation(로그변환): 시계열 뿐만 아니라, 데이터 분석에서 분산 변화를 일정하게 만드는데 사용. 로그 변환 이외에도 BoxCox transformation을 사용할 수 있음.
Differencing(차분): 시계열에서 데이터를 한 단계 밀어낸 후(lag), 기존의 데이터와의 차이를 사용. 추세나 계절성이 감소되거나 제거되고, 시간의 흐름에 따른 변화를 제거하여 시계열의 평균 변화를 일정하게 만듦.


AR(AutoRegressive)

과거 시점의 데이터가 현재 데이터에게 미치는 영향을 나타내는 모델로, AR(2)을 식으로 나타내면 다음과 같습니다.(과거 2개 이전 시점까지 데이터의 현재 시점에 대한 영향을 모델화.)

$$x(t)=c+ \alpha∗x(t−1)+\alpha∗x(t−2)+e(t)$$

 
식을 보면, 과거 값들의 선형 조합으로 예측하는 모델임을 알 수 있습니다. 여기서 오차(e(t))는 값의 범위를 조절하지, 시계열 패턴에 변화를 주지는 않습니다.
 

 MA(Moving Average)

이동 평균 모델. MA(2) 모델을 식으로 나타내면 다음과 같습니다. AR 모델에서는 목표 예상 변수(forecast variable)의 과거 값을 이용하였지만, MA 모델은 과거 예측 오차(forecast error)를 이용합니다. 
 
$$x(t)=c+ \beta∗e(t−1)+\beta∗e(t−2)+e(t)$$
 

ARMA(AutoRegressive Moving Average)

모델 이름에서도 추측이 가능한 ARMA는 AR 과 MA 모델을 합쳐, 과거 시점의 값과 오차를 모두 고려하는 모델입니다. ARMA(2,2) 모델은 다음과 같습니다.
 
$$x(t)=c+ \alpha∗x(t−1)+\alpha∗x(t−2)+ \beta∗e(t−1)+\beta∗e(t−2)+e(t)$$
 
 

ARIMA(AutoRegressive Integrated Moving Average )

위의 노트에서, 데이터의 정상성을 위해 Differencing(차분)하는 것을 알 수 있는데요, ARIMA에는 그 차분의 d가 포함되어서 ARIMA(p,d,q)라고 표현합니다. ARIMA(1,1,1) 수식은 다음과 같습니다.
 
$$x(t)=c+ \delta{x}∗x(t−1)+ \beta∗e(t−1)+e(t)$$
여기서 delta(x) = x(t)-x(t-1)
만약 d=2 라면 delta(x) = (x(t)-x(t-1))-(x(t-1)-x(t-2))
 
여기서 p,d,q를 정하는 방법은 ACF와 PACF로 알 수 있습니다.

  ACF PACF
AR(p) ACF 천천히 감소 PACF p lag 이후 절단
MA(q) ACF q lag 이후 절단 PACF 천천히 감소

 

ARIMA EXAMPLE (AirPassengers)

 
R에 있는 Airpassengers 데이터를 사용하여 ARIMA를 설명해보겠습니다.

autoplot(AirPassengers, main ="Monthly air passengers" )
autoplot(log(AirPassengers), main = "Monthly air passengers (log)")

 

분산 스케일 조정 (log transformation)

 
추세와 계절성이 아주 강하게 나타나는 것을 알 수 있습니다. 분산의 범위를 줄이기 위해 log transformation을 사용하였습니다.
 

월별 승객 분포

월별 승객 분포를 관찰해보면 7,8얼에 다른 달 보다 승객 수가 많은 편입니다. 계절성을 확인할 수 있죠. Decompisition을 해보겠습니다.
 

tsdata <- ts(log(AirPassengers), frequency = 12) 
passengers_df <- decompose(tsdata, "multiplicative")
plot(passengers_df)

decomposition

추세와 계절성을  분리하여 좀 더 명확하게 볼 수 있습니다. 데이터가 non-stationary임을 알 수 있습니다.
 


 
 
ACF & PACF (log & differencing 비교)
 
1. Origianl Data: Passengers 값을 그대로 사용하면 ACF에서 움푹움푹 패인 부분이 여실히 나타납니다. 계절성이 강하기 때문인데요, 이 데이터 자체로는 non-stationary 입니다.

AirPassengers 데이터

 
2. log(Passengers): Passengers 에 로그를 취한 값으로, 분산의 스케일만 조정할 뿐, 패턴은 조정되지 않아 ACF & PACF에도 1과 비교했을 때 변화가 없음을 알 수 있습니다.

log(AirPassengers)

 
 
2.  Diff(log(Passengers)): Passengers에 로그를 취한 값을 Differencing하여 시계열의 평균 변화를 보다 일정하게 만들고자 합니다. 여전히 계절성 Differencing이 필요한 듯 보입니다.

diff(log(AirPassengers))

 
 
Fitting  Seasonal ARIMA Model
 
계절성 ARIMA 모델 사용. differencing을 할 것, 계절성 differencing도 필요함을 위의 diagnostics에서 알 수 있었습니다. uto.arima를 사용하여 trace해보면 자동적으로 우리가 가정한 조건들을 사용한 모델에 fitting한 것을 볼 수 있습니다. 최종 선택된 모델로 Akaike 정보 기준(AIC) 점수가 가장 낮은 ARIMA(0,1,1)(0,1,1)[12] 입니다.

arima1 <- auto.arima(log(AirPassengers),trace=TRUE)
arima1

모델선정&amp;nbsp; by auto.arima

Check Residuals
회귀분석도 마찬가지이지만 시계열 분석에서도 잔차의 정상분포는 중요합니다. 잔차는 관측값과 예측값 간의 차이로, 모델이 데이터에 얼마나 잘 맞는지를 반영합니다. 잔차의 정규성은 왜곡이나 첨도 없이 0을 중심으로 대칭적으로 분포되어 있음을 의미하는데요, 이는 모델이 데이터의 주요 패턴과 변동 원인을 포착하고 오류가 무작위적이고 독립적이라는 것을 의미합니다.
 
잔차 체크는 R에서 단 한줄이면 플랏과 함께 Ljung-Box test 결과 값을 알 수 있습니다.

checkresiduals(arima1)

이상적인 정상성은 아니지만, 최적합 AIC 값에 따른 모델의 잔차

ACF가 완전한 정상성을 나타내지는 않지만, 모델의 적합성과 얼마나 over-fiitting할 것인지에 대한 trade-off가 있다는 것을 감안하여, ARIMA(0,1,1)(0,1,1)[12]를 사용하기로 결정합니다.
 

p-value > 0.05 로 귀무가설 기각할 증거 충분치 않음

 
Forecast
 
향후 3년의 95% 신뢰구간을 지정하여 예측해봅니다.

arima1 %>% forecast(level = c(95), h = 36) %>% autoplot()

이 때 주의해야 할 점은, forecast결과 값에서 다시 log backtransform을 해야 한다는 것입니다. 위의 플랏으로는 예측된 추이를 알 수 있으나, 결과값을 present해야 할 때에는 자연로그지수인 2.718을 사용하여 2.718^value로 backtrasnform 하여 예측된 승객의 수를 나타냅니다.
 
 
 
 

반응형

댓글