ARIMA 이해하기
데이터 분석시 가장 전통적인 시계열 통계 분석이라 하면, ARIMA모델일 것입니다.
ARIMA는 AutoRegressive Integrated MovingAverage의 약자로써
AutoRegressive / MovingAverage 2개의 모델이 합쳐지고 Stationary하게 보정된 모델입니다.
먼저 ARIMA를 설명하기 위해 간단히 두 모델을 알아보겠습니다.
1. 자기회귀모델 AR : AutoRegressive
AR모델은 이전 시점의 정보를 현재 시점에도 영향을 준다는 특징이 있습니다.
$y(t)=c+ϕ_{1}y_{t−1}+ϕ_{2}y_{t−2}+⋯+ϕ_{p}y_{t−p}+ε_{t}$
2. 이동평균모델 MA : MovingAverage
MA모델은 현재 시점과 일정 과거 시점의 에러를 평균취함으로써 변화율을 반영한다는 특징이 있습니다.
$y(t)=c+ε_{t}+θ_{1}ε_{t−1}+θ_{2}ε_{t−2}+⋯+θ_{q}ε_{t−q}$
3. ARMA : MovingAverage
ARMA모델은 자기회귀모델 AR과 이동평균모델 MA를 합친 모델입니다. 사실 ARMA모델은 우리가 알고자하는 ARIMA와는 조금 다릅니다.
바로 ARMA모델은 Non-Stationary 상태에 대응하지 못한다는 단점이 있습니다. 밑에서 Stationary / Non-Stationary 상태에 대해 알아보겠습니다.
Stationary / Non-Stationary
Stationary / Non Stationary 상태의 그래프
Stationary한 그래프는 “평균”과 “분산”이 일정한 상태를 의미합니다.
반면 위와 반대인 비정상적인 상태는 Non Stationary하다고 표현합니다. Non Stationary한 데이터들엔 어떤 종류가 있을까요?
- 그래프의 분산은 일정하지만 평균이 상승하는 상태
- 그래프의 분산도 평균도 불규칙한 상태
- 그래프가 시계열적으로 골구로 퍼지지 않은 상태 (얼핏 보기에 분산이나 평균은 문제 없어 보임)
어떻게 정상상태로 바꿀까?
바로 “Differencing(차분)”을 해줌으로써 Stationary하게 그래프를 바꿔줄 수 있습니다.
이때 차분은 보통 1~2번정도 해주고, 차분 횟수에 따라 1차차분 / 2차 차분이라고 불립니다.
ARIMA란?
AR / MA / ARMA 모델은 기본적으로 데이터가 정상적인(Stationary) 시계열 데이터라는 가정하에 사용됩니다. 반면 ARIMA 모델은 데이터가 비 정상적인(Non-Stationary) 할 경우, “차분”을 통해 데이터를 정상적인(Stationary) 상태로 처리하여 ARMA모델을 사용하는 것입니다.
즉 ARIMA는 자기회귀누적이동평균 모델이며, “AR” + “I” + “MA” = “ARIMA” 라고 이해하시면 됩니다. ARIMA 모델은 (p,d,q)의 파라미터 값을 갖습니다.
$y_{t}=c+ϕ_{1}y_{t−1}+⋯+ϕ_{p}y_{t−p}+θ_{1}ε_{t−1}+⋯+θ_{q}ε_{t−q}+ε_{t}$
- p : 자기회귀 부분의 차수
- d : 차분의 횟수
- q : 이동 평균 부분의 차수
자기회귀의 양을 p로, 이동평균의 합을 q로, 차분의 횟수를 d로 정합니다.
Pytorch Code
from statsmodels.tsa.arima.model import ARIMA
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
import statsmodels.api as sm
p = range(0,5)
d = range(1,2)
q = range(0,5)
pdq = list(itertools.product(p,d,q))
pdq = pdq[1:] # Drop (0,1,0)
aic = []
for i in pdq:
model = ARIMA(train_sample.values, order=(i))
model_fit = model.fit()
print("ARIMA : {} | AIC : {:.3f}".format(i,model_fit.aic))
aic.append(model_fit.aic)
>>> ARIMA : (0, 1, 1) | AIC : 155.020
ARIMA : (0, 1, 2) | AIC : 153.662
ARIMA : (0, 1, 3) | AIC : 155.662
ARIMA : (0, 1, 4) | AIC : 157.662
ARIMA : (1, 1, 0) | AIC : 155.087
ARIMA : (1, 1, 1) | AIC : 155.415
ARIMA : (1, 1, 2) | AIC : 155.662
ARIMA : (1, 1, 3) | AIC : 156.740
.....
Reference
- https://otexts.com/fppkr/non-seasonal-arima.html
- https://www.researchgate.net/figure/Forecast-from-ARIMA1-0-10-1-1-with-weekly-lags_fig4_284142511