시계열 공부를 하면서 'SARIMA (Seasonal ARIMA)'는 ARIMA 모형에 계절성 부분만 추가한 버전이다.' 하고 넘어가기 일쑤였는데, 이렇게 넘어가는 게 아니라 한 번쯤은 ARIMA와 함께 SARIMA를 짚고 가면 좋을 것 같아 글을 써 봅니다.
최대한 시계열 개념을 직관적으로 설명하는 것이 목표지만,
- ARIMA에 대해 어느 정도 지식이 있거나,
- 차분 / Moving Average 등의 용어에 익숙한 경우에
글을 이해하기에 더 편할 것 같습니다.
ARIMA란?
ARIMA 라는 용어는 크게 AR + I + MA 3등분으로 나눠서 이해하면 편합니다.
- ARIMA 모형은 AR(AutoRegressive) + I (Integrated) + MA(Moving Average) 각각 3파트로 분리가 됩니다.
- 시계열 관측치 \(Y_t\)를 이전 관측치의 값(AR : \(Y_{t-1}, Y_{t-2}\)...)과 이전 오차(MA : \(e_{t-1}, e_{t-2}\)...)들의 결합된 모양으로 표현할 수 있는 경우 ARMA 모형이라 합니다.
- 차분을 해서 정상성을 만족시키고, 그 상태에서 ARMA 모형을 적용할 수 있을 때 ARIMA 모형이라고 합니다. (차분의 반대가 누적(Integrated)인데, 차분의 D를 쓰지 않고 누적의 I를 사용해서 ARI MA 모형으로 표현합니다.)
다시 정리하면 AR(이전 관측값에 영향을 받는 파트)와 MA(오차 + 이전 오차들에 영향을 받는 파트)를 조합하여 ARIMA 모형을 만들 수 있는데, 미래 관측값을 예측하기 위해서 이전 관측값을 몇 개를 쓸 것인지(p), 이전 오차값을 몇 개를 쓸 것인지(q), 정상성을 만족시키기 위해 차분을 얼마나 할 것인지(d)에 대한 것들을 결정해야 합니다.
예를 들어 ARIMA(1, 0, 1) 모형이라고 하면, \(Y_t = \phi Y_{t-1} + e_{t} + \theta e_{t-1}\) (where \( -1 < \phi < 1 \)) 의 수식으로 표현할 수 있습니다. ARIMA(1,1,1) 모형이라고 하면 \(\Delta Y_t\) = \(\phi \Delta Y_{t-1} + e_{t} + \theta e_{t-1}\) (where \( -1 < \phi < 1\) and \(\Delta Y_t\) = \(Y_t - Y_{t-1}\))의 수식으로 표현할 수 있습니다.
정상성을 만족했다는 가정 하에서, AR을 몇 차수를 쓸 것인지 / MA를 몇 차수를 쓸 것인지는 ACF, PACF 그래프를 보고 결정해야 합니다.
ACF와 PACF 그래프의 해석
ACF | PACF | |
AR | 지수적으로 감소하거나 사인 함수 모양 | 시차 p에 뾰족한 막대가 유의미하게 있지만, 시차 p 이후에는 없을 때 |
MA | 시차 q에 뾰족한 막대가 유의미하게 있지만, 시차 q 이후에는 없을 때 | 지수적으로 감소하거나 사인 함수 모양 |
ACF와 PACF에 대한 것을 최대한 직관적으로 표현해 보겠습니다.
ACF = \(Y_t, Y_{t-k}\) 간의 autocorrelation. 즉, k 이전 시점의 값과 현재 시점 간에 얼마나 차이가 나는지를 표현하는 식으로 볼 수 있습니다. (과거값과 현재값 간의 correlation이 어느 정도 큰지를 보는 것입니다.)
- AR 모형의 경우 자기 회귀 모형이기 때문에 현재 데이터를 과거 관측값의 누적으로 나타낼 수 있습니다. (예. AR(1) 모형 : \(Y_t\) = \(\phi Y_{t-1}\) = \(\phi^{2} Y_{t-2} = ... = \phi^{k} Y_{t-k}\)). 따라서 현재의 데이터는 과거 관측값에 어떤 식으로든 영향을 받게 되고(물론 lag가 길어지면 그 영향력은 약해지겠지만요.) ACF는 지수적으로 감소하는 형태로 그려지게 될 것입니다.
- MA 모형은 이전 시점의 오차항의 조합(예. MA(2) 모형을 가정할 경우, \(Y_t = e_t + \theta_{1}e_{t-1}+\theta_{2}e_{t-2}\))입니다. 즉, 과거 관측값과 관련된 부분은 과거의 오차항 부분밖에 없습니다. 현재값과 과거값의 상관관계를 볼 때 lag가 q 수준만큼이라면(ex. MA(2)모형에서 lag가 2만큼만 벌어지는 경우) 현재의 관측값이 과거의 오차항을 포함하고 있기 때문에 상관관계가 있다고 나오지만, lag가 일정 수준을 벗어난다면(ex. MA(2) 모형에서 lag가 5만큼 벌어지는 경우) ACF = 0이 됩니다. 따라서 ACF는 시차 q까지만 뾰족한 형태로 나타나게 됩니다.
PACF는 \(Y_t\)를 설명할 때 과거 관측치인 \(Y_{t-k}\) 만큼의 효과가 순수하게 어느 정도 들어가는지를 보는 것입니다. 예를 들어 Y = aX +b 라는 회귀식에서 a라는 coefficient를 X의 한 단위 증가가 Y에 기여하는 순수한 효과로 해석할 수 있는 것처럼 \(Y_t\)라는 종속변수 예측을 위해 \(Y_{t-k}\)라는 변수를 집어넣을 경우 coefficient가 어느 정도로 유의할지를 보는 개념이라고 보시면 될 것 같습니다.
- AR 모형의 경우, 자기 회귀 모형이라는 점이 중요합니다(아까 쓴 이야기인 것 같지만요). AR(1) 모형 가정 시 \(Y_t\) = \(\phi Y_{t-1}\) 의 수식으로 표현할 수 있는데, 여기서 \(Y_{t-2}\)를 모형에 추가한다고 해도 \(Y_{t-1}\)가 이미 모형에 있는 이상 \(Y_{t-2}\)의 coefficient는 0에 가깝게 추정될 것입니다. 따라서 AR 모형의 PACF는 시차 p까지만 뾰족한 형태로 나타나게 됩니다.
- 반면, MA 모형은 모형에 과거 관측값이 들어가 있지는 않습니다. 이걸 과거 관측치의 모형으로 표현해준다고 생각해보죠. MA(1) 모형일 경우 \(Y_t = e_t + \theta e_{t-1}\), \(Y_{t-1} = e_{t-1} + \theta e_{t-2}\) 의 수식을 얻을 수 있습니다. 이 중 뒤 쪽 부분은 \(e_{t-1} = Y_{t-1} - \theta e_{t-2}\)의 형태로 바꿀 수 있고 앞 쪽 식에 대입하면 \(Y_t = e_t + \theta (Y_{t-1} - \theta e_{t-2})\) 의 수식을 얻을 수 있습니다. 그러면 \( e_{t-2}, e_{t-3}, ..., e_{t-k} \) 부분까지 누적해서 다음의 과정을 반복할 수 있고 이렇게 되면 현재의 관측값 (\(Y_{t}\))와 과거의 관측값(\(Y_{t-k}\)) 간에 coefficient는 \(\theta^{k}\)의 느낌으로 계속 따라 붙어서 PACF는 0은 되지는 않지만 지속적으로 감소하거나 사인(sin)함수 모양으로 나타나게 됩니다.
나름대로 직관적으로 풀려고 했는데 잘 됐는지는 모르겠네요....
아래 그래프로 ACF / PACF 읽는 법을 예로 들어보겠습니다.
ACF / PACF 모두 lag 3까지 뾰족한 부분이 나타나고, 사인 함수 모양으로 왔다리 갔다리 하는 것처럼 보입니다. ARIMA(3,0,0), ARIMA(0,0,3)을 고려해봄직 하다는 생각이 드네요.
참고로 위 출처에서는 ARIMA(0,0,3)을, 내부적으로 최적 모형을 찾아주는 auto.arima에서는 ARIMA(1,0,3)(1,0,1)[4] (주기 4를 가진 SARIMA)라는 결과값을 이야기해줍니다.
SARIMA란?
위에서 SARIMA를 언급했습니다. SARIMA는 seasonal ARIMA의 약자로 계절성 부분을 포함한 ARIMA 모형이라고 볼 수 있습니다.
계절성 ARIMA를 좀 더 자세히 설명하기 위해 R에서 자체적으로 제공하는 유럽 분기별 소매 거래 데이터(euretail)를 분석해보는 과정을 따라가 보겠습니다. (해당 문서를 참고하여 작성하였습니다.)
data(euretail)
euretail %>% autoplot(.)
로 데이터를 봤을 때 정상성을 만족하지 못한다는 것을 알 수 있습니다. 일단 증가 후 감소 추세가 있고 높이 솟는 봉우리과 낮게 꺼지는 부분이 있어 계절성 부분이 있지 않을까 하고 생각해볼 수 있습니다.
일단 계절성 term을 고려하지 않고 일반 차분만 한 경우를 살펴보겠습니다.
euretail %>% diff(.) %>% ggtsdisplay(.)
추세는 어느 정도 사라졌지만 차분된 그래프에서 4주기마다 봉우리가 생기는 패턴은 여전히 사라지지 않고 있고, ACF, PACF 모두 4의 배수 주기로 튀어서 AR/MA 의 차수를 결정하기 힘듭니다.
계절성 차분을 고려하지 않으면 데이터가 정상성을 만족하기 어렵기 때문에 이제 SARIMA를 고려해야 합니다.
일단 봉우리 부분 때문에 정상성을 만족하지 않고 있으니, 정상성 만족을 위해 lag = 4만큼 차분을 시켜봅시다. (계절성 차분)
참고로 차분을 할 때는 계절성 차분 → 일반 차분 순으로 진행하는 것이 더 좋다고 합니다.
a <- euretail %>% diff(4) %>% diff(.)
a %>% ggtsdisplay(.)
이제는 차분을 마친 로데이터 그래프에서 4주기마다 봉우리가 나타나지 않으니 이 상태에서 ARIMA 모형을 정해보도록 하겠습니다.
하지만, ACF와 PACF를 보면 시차 4에서 튀는 부분이 있음을 볼 수 있습니다. 이는 계절성 MA 또는 계절성 AR을 고려해 줘야 한다는 뜻입니다. (MA : ACF에서 튀는 그림이 나온다 / AR : PACF에서 튀는 그림이 나온다.)
또한, ACF / PACF 에서 lag1 부분이 파란색 점선을 벗어나고 있고 ACF/PACF가 사인 함수 모양에 가깝게 나타나는 것을 확인할 수 있습니다. 이는 비계절성 부분에서도 AR 또는 MA 부분을 고려해줘야 한다는 뜻이기도 합니다.
여기서 우리는
ARIMA(1,1,0)(1,1,0)[4]
ARIMA(1,1,0)(0,1,1)[4]
ARIMA(0,1,1)(0,1,1)[4]
ARIMA(0,1,1)(1,1,0)[4]
의 모형을 고려할 수 있습니다.
이 중 ARIMA(0,1,1)(0,1,1)이라고 가정하고 잔차 분포를 확인해봅니다.
euretail %>%
Arima(order=c(0,1,1), seasonal=c(0,1,1)) %>%
residuals() %>% ggtsdisplay()
계절성(4주기 부분)에서 ACF/PACF가 파란색 선을 벗어나는 경우는 없어졌지만 lag2 부분에서 ACF/PACF가 튀는 것을 확인할 수 있습니다. lag2만큼은 아니지만 lag3에서도 ACF/PACF가 튀는 편이라 비계절성 부분에서 뭔가 처리가 더 필요하다는 뜻으로 보입니다.
ARIMA(0,1,2)(0,1,1), ARIMA(0,1,3)(0,1,1) 등의 모형을 추가로 더 고려할 수 있을 것입니다.
(참고로 auto.arima 결과는 ARIMA(0,1,3)(0,1,1) 로 안내해 줍니다.)
최적의 모형을 바로 찾을 수 있으면 좋겠지만, 그것이 쉽지 않기 때문에 제가 본 책이나 예제에서는 auto.arima를 비롯한 여러 개의 후보 ARIMA 모형을 정해두고 prediction 단계에서 예측력이 어떤 모형이 높은지 등을 확인하여 최종 모형을 결정합니다.
SARIMA에 대해서 마지막으로 요약하며 글을 마치겠습니다.
- SARIMA는 비계절성 부분으로 설명되지 않는 부분을 설명하기 위해 사용한다.
- 비계절성 ARIMA 모형과 ACF/PACF에서 AR, MA 차수를 결정해야 하는 것은 유사하지만 그것이 계절성 시차만큼 벌어진다는 것에 차이가 있다.
- ACF/PACF 그림을 보고 최적 모형을 한 개로 딱 결정할 수 있으면 좋겠지만 그게 어렵기 때문에 여러 가지로 모형을 돌려보면서 확인하는 과정이 필요하다.
참고링크
'Statistics' 카테고리의 다른 글
인과추론 학습기 - 01. 인과추론의 핵심문제 (선택편의와 교락) (0) | 2023.02.19 |
---|---|
인과추론 학습기 - 00. 왜 인과추론인가? (공부이유, 학습자료) (0) | 2023.01.08 |
단위근 검정, 자기상관검정에 대해 (0) | 2022.09.18 |
통계학에서 자주 활용되는 확률분포에 대해 (0) | 2022.08.19 |
주성분 분석(PCA)을 정리해보자! (0) | 2022.06.21 |