시계열&계량경제학

시계열 분석 #6 정상성 검정

seungbeomdo 2023. 2. 3. 22:43

 

이전 포스팅들에서 정상성의 정의, 시계열을 정상화하는 방법, 정상 시계열의 모델링 등등에 대해서 얘기해왔다. 여기서는 주어진 시계열의 정상성 여부를 어떻게 검정하는지 알아보자.


1. ADF 검정

  • 정상성 검정의 한 가지 방법은 ADF 검정(Augmented Dickey-Fuller test)이다. 유사한 검정 방법으로 DF 검정이 있는데, ADF 검정이 DF 검정을 일반화한 것에 불과하므로 혼란스러울 필요는 없다.

1.1. ADF 검정의 아이디어: 단위근

  • ADF 검정의 아이디어를 살펴보자. 우선 모든 정상 시계열은 적당한 AR(p) process로 나타낼 수 있다고 가정한다. 즉 우리는 AR process의 틀 안에서 정상성을 검정하는 것임에 유의해야 한다.
    • 그럼 MA process나 ARMA process에 대해서는 못 쓰는 것인가? 그렇지 않다. 왜냐하면 MA process는 항상 정상성을 만족하기 때문에 고려할 필요가 없다. ARMA process인 경우에도 모델을 구성하는 AR 요소에 대해서만 정상성을 확인하면 된다.

 

  • 다음으로 넘어가서, 주어진 시계열 $X_{t}$를 AR(p) 모형으로 나타내고, AR 다항식 $\Phi_{p}(L)$을 사용하면

$$\Phi_{p}(L)X_{t} = \epsilon_{t}$$

  • AR process가 정상적이려면  $\Phi_{p}(L) = 0$을 만족하는 p개의 근 $L$들의 절대값 크기가 모두 1보다 커야 한다는 것을 이전 포스팅에서 다루었다. 만약 $L=1$인 $L$이 존재한다면 AR이 비정상이라는 것이다. 이때 크기가 1인 근이기 때문에 단위근이라고 한다. ADF 검정의 다른 이름이 단위근 검정(Unit Root test)이다.

 

1.2. ADF 검정통계량의 유도

  • 단위근을 포함하는 AR 다항식은 다음과 같이 나타낼 수 있다. 

$$\Phi_{p}(L) = (1-L)\Phi_{p-1}(L)$$

  • 따라서, 우리의 AR process는

$$(1-L)\Phi_{p-1}(L)X_{t} = \epsilon_{t}$$

$$(1-L)(1 - \phi_{1}L - \phi_{2}L^{2} - ... - \phi_{p-1}L^{p-1})X_{t} = \epsilon_{t}$$

$$(1-L)X_{t} - (\phi_{1}L + \phi_{2}L^{2} + ... + \phi_{p-1}L^{p-1})X_{t} = \epsilon_{t}$$

$$X_{t} - X_{t-1} = (\phi_{1}L + \phi_{2}L^{2} + ... + \phi_{p-1}L^{p-1})X_{t} + \epsilon_{t}$$

 

  • 조금 더 정리하면 다음과 같은 방정식을 유도해낼 수 있다.

$$X_{t} - X_{t-1} = \Sigma_{j=1}^{p-1}\phi_{j}(Z_{t-j}-Z_{t-j-1}) + \epsilon_{t}$$

$$X_{t} = X_{t-1} + \Sigma_{j=1}^{p-1}\phi_{j}\Delta Z_{t-j} + \epsilon_{t}$$

 

  • 시계열이 단위근을 갖는다는 귀무가설이 참이라면 위 방정식을 따를 것이고, 그렇다면 다음의 식에서  

$$X_{t} = \phi X_{t-1} + \Sigma_{j=1}^{p-1}\phi_{j}\Delta Z_{t-j} + \epsilon_{t}$$

 

$\phi = 1$임을 의미한다. 이게 곧 ADF 검정의 귀무가설이다.

 

  • 귀무가설을 검정하는 방법은 직관적이다. 주어진 샘플로부터 위 방정식과 같은 회귀모형을 세우고 $\phi$의 OLS 추정량을 구한다. OLS 추정량 $\hat{\phi}$을 활용한 검정통계량 $\tau$는 다음과 같이 계산하며 Dickey-Fuller가 만든 tau-distribution이라는 특수한 분포로 수렴한다.

$$\tau = \frac{\hat{\phi} -1}{se(\hat{\phi})}$$

  • 귀무가설을 기각할 수 없다면 단위근이 존재한다고 결론 내린다. 즉 시계열이 비정상이다.

 

  • 그런데 여기서는 최초에 가정된 AR process가 절편을 가지고 있지 않았다. 절편을 가지고 있는 AR process에 대해서도 마찬가지로 단위근 존재 가정 하에 OLS 회귀계수를 구해서 검정한다. 선형추세를 가지고 있는 AR process도 가정할 수 있고 동일한 방식으로 검정한다. 각 경우에서 검정통계량은 Dickey-Fuller가 만들어놓은 각기 다른 귀무분포로 수렴한다.

 

1.3. ADF 검정 실습

  • 그럼 ADF 검정을 실제로 수행해보자. 준비한 데이터는 삼성전자의 주가 시계열이다. 눈으로 봐도 증가하는 추세가 뚜렷하게 드러나는 비정상 시계열이다.

  • adfuller라는 statsmodels 패키지의 라이브러리가 ADF 검정을 간단하게 해결해준다. adfuller 라이브러리는 3가지의 주요 옵션을 갖는데 검정 대상인 시계열, 시차 선택 기준 그리고 회귀식의 형태이다.
    • 시차 선택 기준은 AIC와 BIC가 있는데 둘 다 시계열 모델의 성능을 평가하는 지표이다. 나중에 포스팅에서 다루기로 하자. 아무튼 선택된 지표의 관점에서 가장 좋은 시차 p를 알아서 골라서 회귀식을 세워준다.
    • 또한 위에서 다루었듯이 AR process의 상수항과 추세항에 대한 가정도 옵션으로 포함한다.
from statsmodels.tsa.stattools import adfuller

def adfuller_result(ts):

  results = []
  for reg in ['nc', 'c', 'ct']:
    results.append(adfuller(ts, autolag = 'AIC', regression = '{}'.format(reg)))

  return pd.DataFrame({'type' : ['non', 'const', 'trend'], 'p_value' : [x[1] for x in results]})

adfuller_result(data['Close'])

  • 회귀식의 형태와 무관하게 귀무가설을 모두 기각할 수 없다고 나왔다. 예상한 바와 같이 주가 시계열은 비정상 시계열이다. 그럼 상대적으로 정상적으로 보이는, 일별 수익률 시계열은 어떨까.

  • 아래와 같이, 수익률 시계열은 단위근이 존재한다는 귀무가설을 기각했다. 즉 정상 시계열이다.


2. KPSS 검정

2.1. KPSS 검정의 아이디어

  • KPSS의 기본 가정은, 주어진 시계열은 확정적 추세와 랜덤워크, 그리고 정상성을 갖는 오차 시계열의 합으로 구성된다는 것이다.

$$X_{t} = \xi t + R_{t} + \epsilon_{t}$$

where $R_{t} = R_{t-1} + u_{t}$ and $u_{t} \sim i.i.d. (0, \sigma_{u}^{2}$

 

  • 여기서 중요한 것은 랜덤워크 $R_{t}$인데, 랜덤워크는 평균은 상수이지만 분산은 시간에 대하여 선형적으로 증가하는 특징을 가지고 있어 비정상 시계열이다. 따라서 주어진 시계열도 비정상이다.

 

  • 그런데 랜덤워크의 분산이 0이 된다면 랜덤워크는 절편항과 동일해지므로 주어진 시계열은 추세항 $\xi t$와 오차항에 의해서만 변동한다. KPSS 검정의 귀무가설은 바로 랜덤워크의 분산 $\sigma_{u}^{2}$이 제로라는 것이다.
  • 귀무가설이 참이라면 두 가지 가능성이 있다. (1) 귀무가설이 참일 때 추세항의 계수 $\xi$가 제로라면 시계열은 오차 시계열만 남으므로 정상 시계열이 된다. (2) 귀무가설이 참일 때 $\xi$가 제로가 아니라면 시계열은 추세가 존재하고 추세 주변에서 정상 변동을 보이는, trend-stationary 시계열이 된다.

 

  • KPSS 검정은 완벽하게 정상성을 보여주지는 못하고 귀무가설이 채택되었을 때 적어도 trend-stationary라는 것을 보여준다. 단 귀무가설이 기각되면 non-stationary이다.

 

2.2. ADF와 KPSS의 보완적 활용

  • 모든 가설검정의 결과를 절대적으로 해석할 수는 없지만, 정상성 검정의 경우 특히 논란이 많은 것으로 보인다. ADF 검정와 KPSS 검정의 결과도 서로 상반되게 나타날 수 있다.
  • 한편, ADF 검정의 결과 시계열이 비정상 시계열이라고 할 때, 주어진 시계열이 단지 비정상 시계열인지 아니면 trend-stationary인 것인지까지 제시해주지는 못한다. 이 경우 KPSS 검정이 보완적으로 쓰일 수 있다.

 

  • 두 검정의 결과의 조합으로 얻어지는 결론들을 정리하면 아래와 같다.

(1) ADF 귀무가설 기각 & KPSS 귀무가설 채택 $\Rightarrow$ 주어진 시계열은 stationary 

(2) ADF 귀무가설 채택 & KPSS 귀무가설 채택 $\Rightarrow$ 주어진 시계열은 trend-stationary

(3) ADF 귀무가설 채택 & KPSS 귀무가설 기각 $\Rightarrow$ 주어진 시계열은 non-stationary

(4) ADF 귀무가설 기각 & KPSS 귀무가설 기각 $\Rightarrow$ 해석 불분명

 

2.3. KPSS 검정 실습

  • KPSS 검정도 kpss 라이브러리가 간단하게 해결해준다. 
from statsmodels.tsa.stattools import kpss

def kpss_result(ts):
  statistic, p_value, n_lags, critical_values = kpss(ts)
  print('stat : ', statistic)
  print('critical values : ', critical_values)
  • 삼성전자 주가 시계열에 대한 KPSS 검정 결과는 다음과 같다. 귀무가설을 기각하여 주가 시계열은 비정상이다.

  • 일별 수익률 시계열에 대한 검정 결과는 다음과 같다. 귀무가설을 기각하지 못하여, 주가 시계열은 trend-stationary하다.