시계열(Time series) > ACF, PACF

2020. 12. 19. 00:08계량경제학

반응형

시계열 데이터의 성질을 분석하는데 있어서 중요하게 활용되고 있는 것이 상관도표(Correlogram)입니다. Correlogram은 autocorrelation function(ACF)와 partial autocorrelation function(PACF) 중 하나를 그래프로 표현한 것입니다. Correlogram을 활용하여 현 시점의 자료와 시점의 차이(lag)를 가지는 자료를 비교하여 어떤 관계를 가지고 있는지를 분석할 수 있습니다. 즉, Correlogram을 활용하여 시점의 차이의 영향력을 알아볼 수 있습니다.

 [자기상관함수(Autocorrelation Fucntion, ACF)]

먼저 ACF에 대해서 정리해보도록 하겠습니다. ACF는 $y_t$와 $y_{t+k}$사이에 correlation을 측정하는 것입니다. $y_t$와 $y_{t+k}$가 얼마나 관계가 있는지를 측정하는 것이며, 수식은 아래와 같습니다.

여기서 분모인 $var(y_t)$은 모든 $N$개의 관측값에 대해서 측정하나 $cov(y_t, y_{t+k})$는 $N-k$ 관측값을 대상으로 계산을 하게 됩니다. 따라서 수식에서 확인할 수 있듯이 $k$가 커짐에 따라 ACF(k)값은 작아지게 됩니다. 추가적으로 ACF의 주요 성질로는 ACF(0)=1이며, ACF(k)=ACF(-k)입니다.

 [편자기상관함수(Partial Autocorrelation Fucntion, PACF)]

ACF는 분명히 활용성이 뛰어나고 중요한 Tool이긴 하지만 모든 시계열 데이터의 특성을 분석하는 것에는 한계가 있습니다. 시계열 모델 중에 대표적인 AR(q)모델이나 MA(p)모델중에 어떤 것을 활용하고 어떤 시차(lag)를 적용할지에 대해서 ACF를 활용하여 결정하는 것은 어렵습니다. 그렇기 때문에 PACF를 활용한 추가적인 분석이 필요합니다. 

PACF는 $y_t$와 $y_{t+k}$와의 correlation을 측정하는 것은 ACF와 동일하나, t와 t+k 사이에 다른 $y$값들의 영향력을 배제하고 측정하는 것입니다. 수식은 다음과 같습니다.

여기서 $e_t$는 아래와 같이 표현될 수 있습니다.

즉 $e_t$는 $y_{t-k}$를 제외하고 $y_{t-1}$에서 $y_{t-(k-1)}$로 설명될 부분들을 제거한 것이고 $e_{t-k}$도 마찬가지로 볼 수 있습니다. 따라서 $Corr(e_t, e_{t-1})$을 계산한다는 것은 온전히 $y_t$와 $y_{t+k}$의 관계만 본다는 것입니다.

향후 AR, MA모델을 결정할떄 ACF와 PACF는 데이터 상황에 따라 다르겠지만 주로 아래와 같이 해석되어 활용될 수 있습니다.

The model identification from ACF and PACF plots Download Table (researchgate.net)

Python을 활용해 ACF, PACF를 그려보겠습니다. 자료는 이전 시계열 포스팅에서와 같이 S&P500 Index를 활용하였습니다.

import statsmodels.graphics.tsaplots as sgt 

## Close
fig = plt.figure()
ax1 = fig.add_subplot(2, 1, 1)
ax2 = fig.add_subplot(2, 1, 2)

sgt.plot_acf(df['Close'], lags = 20, zero = False, ax=ax1)
ax1.set_title("ACF S&P")


sgt.plot_pacf(df['Close'], lags = 20, zero = False, method = ('ols'), ax=ax2)
ax2.set_title("PACF S&P")

plt.show()

## White Noise
fig = plt.figure()
ax1 = fig.add_subplot(2, 1, 1)
ax2 = fig.add_subplot(2, 1, 2)

sgt.plot_acf(df['wn'], lags = 20, zero = False, ax=ax1)
ax1.set_title("white noise")


sgt.plot_pacf(df['wn'], lags = 20, zero = False, method = ('ols'), ax=ax2)
ax2.set_title("white noise")

plt.show()

White Noise의 경우 각 Lag에서 서로 관련이 없음을 알 수 있습니다. 이는 시차간에 Correlation이 없어야 하는 White Noise의 성질을 만족함을 알 수 있습니다.

반응형