들어가며
요즘은 시계열 공부 위주로 진행하고 있다. 당장 "어디다 써먹을거야"라는 목표는 없지만, 시계열 개념을 알아야만 이해할 수 있는 영역들이 있어서 최근에는 시계열 개념을 다시 복습하고 있는 중이다. 일단 전통적인 통계 기반의 시계열(이라고 쓰고 ARIMA라고 읽는다.) 개념 공부를 마무리하는 차원에서 기록을 남긴다.
Stationary(정상성), AR, MA, ACF, PACF, Unit Root Test, VAR, Cointegration의 개념 순서대로 정리했다.
개념을 직관적으로 풀어쓰려고 나름대로 노력했지만, 일단은 시계열에 대한 개념이 어느 정도 있는 사람이 한 번 가볍게 개념을 정리하면 좋을 것 같다는 의도로 글을 썼다. 만약 시계열 개념이 없더라도, 이런 개념들이 시계열 공부를 할 때 쓰이는구나 하고 가볍게 읽을 수 있는 글이 되길 바라본다.
Stationary(정상성)
"시계열"이라고 하면 뭐니뭐니해도 Stationary(정상성) 개념부터 시작해야 한다고 개인적으로는 강한 믿음을 가지고 있다. 뒤에 다시 설명하겠지만, 시계열 데이터를 예측하는 과정은 결국 데이터의 stationary를 만족시키기 위해 전처리하는 여정이기 때문이다.
Stationary(정상성) 개념을 간단히 풀어쓰면,
- 관측치의 평균은 일정해야 한다. (\(E(Y_t) = \mu\))
- 관측치의 분산 역시 일정해야 한다. (\(Var(Y_t) = \sigma^2 \))
- 관측치 간 공분산은 시차에만 의존해야 한다. 시점에 의존하지 않는다. ( \( Cov(Y_t, Y_{t-1}) = Cov(Y_{t-h}, Y_{t-h-1}) \))
는 것이다.
'아니 이게 무슨 소리야?' 할 수도 있지만, 직관적으로 시계열 데이터를 예측하는 상황을 상상해보면 이해가 쉽게 될 수 있을 것이다. 만약 내일의 나의 체중을 예측해본다고 해보자. 특별히 다이어트를 하는 상황도 아니고, 특별히 폭식을 하는 이벤트가 없었다고 한다면 내일의 체중은 신체 컨디션에 영향을 받을 뿐, 왠만하면 이전의 체중에서 크게 벗어날 거라고 생각하기 어렵다. (관측치의 평균은 일정해야 한다.)
또, 체중이 변하더라도 특별한 사건도 없었는데 크게 증가하거나, 감소하지는 않을 것이다. 어느 수준 예측 가능한 범위에서 등락이 있을 것이다. (관측치의 분산 역시 일정해야 한다.)
적확한 예시는 아니지만, 만일 불의의 변비라는 이벤트가 발생했다고 하자. (예시가 더러워서 죄송합니다...🤦♀️) 변비 다음날 아마도 체중이 늘어나 있을 가능성이 클텐데, 다음날 체중이 변비에 의해 받는 영향력은 어느 때가 됐든 일정해야 한다는 뜻이다. 1월에는 변비의 영향력이 크고, 8월에는 영향력이 작아진다면 공분산이 시점에 영향을 받는다는 뜻이므로 이것은 stationary하지 못하다.
만일 내 체중이 매일매일 어느 정도 일정하리라는 보장(정상성 가정)이 없다면, 나는 내 체중을 예측할 수 없다. 즉, 체중 관리가 매우 어려워지는 상황이 와버리는 것이다. 그래서 우리는 시계열 데이터를 예측하는 상황에서 데이터의 "정상성"을 확보하는 것이 중요하다.
위에서는 Weak Stationary (약 정상성)의 예시만 들었는데, 더 강하게 가정이 들어가면(Strong Stationary ; 강 정상성) \( F(Y_1, Y_2, ..., Y_t) = F(Y_{t+1}, Y_{t+2}, ... , Y_{t+h}) \) 라는, 즉 누적 분포 함수가 같아야 한다는 가정이 들어간다. 그러나 정규분포함수를 가정한다면, 약정상성과 강정상성에는 큰 차이가 없기 때문에 일단은 약정상성만 기억해도 괜찮을 듯 하다.
AR, MA
AR(AutoRegressive model), MA(Moving Average model)는 stationary의 자동완성처럼 따라오는 키워드다. 간단하게 설명하면,
- AR은 현재의 관측치(\( Y_t \))를 과거의 관측치( \( Y_{t-1} \))와 무작위성 변수( \( e_t \) )의 함수로 설명하는 것이고,
- MA는 현재의 관측치 (\( Y_t \))를 현재의 무작위성 변수(\( e_t \))와 과거의 무작위성 변수(\( e_{t-1} \))의 함수로 설명하는 것이다.
AR(1) 모형인 경우, 과거의 관측치를 1개를 넣는다는 뜻이고, AR(2) 모형은 2개를 넣는다는 뜻이며 이건 MA 모형에도 똑같이 적용된다. 지금 보니 MA는 직관적으로 잘 이해는 안 가는데, 아무튼 그러하다.
Stationary와 함께 자동적으로 두 개념이 따라나온다는 것은 AR, MA가 stationary와 연관이 있기 때문인데, 엄밀히는 두 개념이 stationary condition을 만족한다는 가정을 하고 AR 모형이나 MA 모형을 바로 예측에 사용하는 것이다.
AR 모형 같은 경우에는 과거의 관측치를 모형의 변수로 사용하고 있는데, 이를 재귀식으로 계속 풀어쓰다보면 현재의 관측치(시점 T)는 시점 1의 관측치에도 영향을 받는 구조로 나온다. 다만, 현재와 과거의 시점의 멀어지면 멀어질수록 영향력이 0에 가깝게 작아진다면, 대충 과거의 관측치를 무시하고 예측을 할 수 있다. 즉, 현재의 관측치가 과거에 영향을 받는 정도가 예측 가능한 일정 수준으로 정해지기 때문에 Stationary해지는 것이다.
MA 모형은 무작위성 변수들을 모형의 변수로 받고 있다보니, 변수의 개수가 무한대가 아니라면 결국 과거에 영향을 받는 정도가 유한하므로 Stationary하다고 본다. 즉 신경 쓸 게 많이 없다.
set.seed(123)
# AR(1) 모형 시뮬레이션
ar1 <- arima.sim(model=list(order=c(1,0,0),ar=0.7),n=300)
# MA(1) 모형 시뮬레이션
ma_1 <- arima.sim(model = list(order = c(0, 0, 1), ma = -1), n = 300)
par(mfrow=c(1, 2))
plot(ar1, main = "AR(1) graph", col = "blue")
plot(ma_1, main = "MA(1) graph", col = "purple")
그림으로 그려봐도, AR모형이나 MA모형이나 변동은 있어도 그 정도가 크지 않다. (얼추 -4에서 4 사이에 다 들어온다.)
ACF, PACF
만일 위 그래프의 라벨을 다 떼고, AR일까 MA일까 맞춰보라고 하면 맞출 수 있을까? 아마도 쉽지 않을 것이다. 얼추 다 stationary 해보이는 그래프이기 때문이다. 그렇지만 의사선생님이 엑스레이를 보고 병명을 진단하는 것처럼, 우리에게도 AR 모형을 써야 하는지, MA 모형을 써야 하는지를 판단할 수 있는 진단 도구가 있다.
ACF(AutoCorrelation Function; 자기상관함수) 그래프와 PACF(Partial Auto Correlation Function; 편자기상관함수)이 바로 그것이다.
ACF를 간단하게 설명하면, 시차에 따라 상관관계가 얼마나 나는지를 표현한 함수이다. 조금 수식을 쓰면 \( Cov(Y_t, Y_{t+h}) / Var(Y_{t}) \))를 표현한 함수라고 볼 수 있겠다.
다만 AR 모형을 설명할 때 말했듯, 과거의 관측치를 모형의 변수로 쓰는 경우 재귀식으로 풀어쓰면 현재의 시점은 1시점의 관측치까지 포함하게 되어, 모형에는 1시점의 관측치가 안 보여도 간접적으로 자기상관함수에는 계속 영향을 주게 된다.
그러면 정정당당하게 현재의 관측치를 설명할 때 모든 관측치 (1시점부터 t-1 시점까지..)를 다 집어넣고, 각각의 계수가 어느 정도 되는지 확인해서 영향력의 순수한 효과를 볼 수도 있을 것이다. 그게 바로 PACF의 개념인데, 만일 AR(1) 모형이라고 하면, 결국 1시점 이전의 데이터만 넣었을 때 2시점 이전의 데이터부터는 필요가 없어지게 될 것이다.
AR(1) : \( Y_{t} = 0.7*Y_{t-1} + \epsilon_{t} \)
위 케이스일 때 시차가 1개만 차이 나면 PACF는 0.7, 2개 이후부터는 0으로 나오게 된다.
그래서 AR 모형의 ACF는 지수 감소 함수 형태, PACF는 특정 시차(lag)가 지나면 급격하게 0이 되어버리는 모양으로 나오게 된다.
# 시계열 분석 라이브러리 로드
library(forecast)
ar1 %>% ggtsdisplay(.)
하지만 보통 AR + MA가 혼합된 형태면, ACF, PACF를 보고도 진단이 어렵기 때문에 보통은 auto.arima를 써가면서 적합한 모형을 쓰는 것을 권장한다고 한다.
# R
library(forecast)
auto.arima()
# python
from pmdarima import auto_arima
auto_arima()
Unit Root Test (단위근 검정)
신나게 stationary 데이터로 예측하는 방법을 정리했다. 여기서 우리의 가정은 데이터가 "stationary함" 이었다. "이 데이터가 정말 Stationary한거야?" 라는 근원적 물음을 던지지 않은 것이다. 즉, stationary 가정을 검증할 필요가 있다. 이 때 Unit Root test를 통해 Stationary를 검증한다.
Unit root는 statioanry 가정을 만족하지 않게 만드는, 즉 Non-stationary를 유발하게 만드는 요소를 의미한다. 사실 엄밀한 정의를 이해하지는 못했기에 참고 링크를 같이 첨부한다. 위키피디아
AR(1) 모형에서 만일 데이터가 Stationary하지 않다면 과거의 관측치의 영향력이 줄어들지 않고 계속 현재에 영향을 미치는 상태를 의미한다.
\( Y_t = \phi * Y_{t-1} + \epsilon \) 의 모형에서 phi가 1 이상이 되어버리면 과거의 관측치는 현재에 지속적으로 영향을 미치거나, 혹은 시간이 지나면 지날수록 영향력이 세진다는 뜻이다. 이 때 우리는 모형이 Unit Root를 가진다고 한다.
Unit Root 가 있는지를 검정하는 것을 Unit Root Test라고 부르는데, 귀무가설에는 단위근이 있는지(\( H_0 : \phi = 1 \))를 놓고, 대립가설에 단위근이 없는지를 놓는다. 대표적으로는 ADF(Augmented Dickey Fuller) Test를 사용하는데, 단위근이 있을 때는 일반적인 t-test를 사용하기 어렵기 때문에 Dickey-Fuller distribution이라는 것을 가정하여 검정한다고 보면 될 것 같다.
Differencing (차분)
그러면 우리의 데이터가 Unit Root를 가진다고 하면 어떻게 데이터를 예측할 수 있을까? 방법은 정상성을 가지도록 데이터를 차분해야 한다. 차분이란 말 그대로 현재의 관측치를 과거의 관측치에서 빼주는 것을 의미한다. Unit Root를 가지는 데이터는 차분을 해줘야만 Stationary하게 된다.
우리에게 익숙한 ARIMA의 I가 바로 차분 차수를 의미하는데, "앞에서 말한 AR, MA을 쓰기 위해서 몇 번 차분을 해줘야 할까요?"에 대한 답이 차분 차수 I이다.
# 1차 차분을 해야 하는 AR1 모형 시뮬레이션
arima_1_1_0 <- arima.sim(model=list(order=c(1,1,0),ar=0.7),n=300)
plot(arima_1_1_0, main = 'ARIMA(1, 1, 0) graph')
# 1차 차분
arima_1_1_0 %>% diff %>% ggtsdisplay(.)
이렇게 뒤죽박죽 종 잡을 수 없는 데이터도 한 번 차분을 해주면
정상성을 만족하게 된다. 한 번 차분하면 AR(1) 모형을 적용할 수 있는 형태로 시뮬레이션을 했기 때문에 1차 차분 결과 AR(1) 모형을 쓸 수 있다고 해석이 가능해진다.
VAR
여태까지 단변량 변수(univariate variable)를 분석했다. 이를 다변량 변수(multivariate variable)로 확장할 수 있는데, 만일 다변량 변수에서 AR 모형을 써야 하는 일이 생긴다면 VAR 모형을 쓸 수 있다. 사실 변수 값 하나가 vector로 바뀐 것 뿐이라 개념이 달라지는 건 없다.
그저 현재의 관측치가 과거의 관측치와 다른 변수의 과거의 관측치에 동시에 영향을 받는다고 가정하기 때문에 추정해야 하는 parameter가 많아져서 조금 더 복잡해진다는 것이 달라진 점일까..?
Cointegration (공적분)
VAR의 사례와 마찬가지로 다변량 변수를 분석할 때 사용하는 분석 기법 중 하나다. A 데이터(ex. 치킨 수요)와 B 데이터(ex. 맥주 수요)가 있다고 하면, 치킨과 맥주는 같이 소비되는 경우가 많기 때문에 두 품목의 수요 그래프는 비슷한 추세로 흘러갈 가능성이 크다.
비슷한 추세로 흘러가는 데이터끼리 서로 뺌으로서, 두 데이터가 공유하고 있는 공통적인 추세를 제거한다. 그렇게 남은 값이 stationary하다면, 두 데이터가 공적분 관계를 갖는다고 표현한다.
사실 다변량 변수의 분석의 지식이 많지 않아 정말 짤막하게만 정리했다(..) 약간 용두사미가 된 감이 없지 않아 있지만, 내 글이 시계열 개념을 한 번 짚고 가는데 도움이 될 수 있으면 좋겠다.
'Statistics' 카테고리의 다른 글
인과추론을 위한 회귀분석 개념 정리 - 편회귀계수, FWL 정리 (2) | 2024.04.21 |
---|---|
매칭(Matching)을 통한 인과추론 : 개념부터 실습까지 (feat. ChatGPT) (2) | 2024.03.25 |
인과추론 학습기 - 회귀 불연속(Regression Discontinuity) (0) | 2023.08.25 |
베이즈 통계학을 공부하면 좋은 이유 (0) | 2023.07.29 |
인과추론 학습기 - 05. 2SLS와 LATE의 기본 개념 (0) | 2023.06.29 |