[알고리즘 트레이딩] KPSS 검정: 시계열 정상성 분석

1. KPSS 검정이란?

KPSS(Kwiatkowski-Phillips-Schmidt-Shin) 검정은 시계열 데이터가 정상적인지(stationary) 아닌지를 평가하는 통계적 방법입니다. 시계열 분석에서 정상성 여부는 데이터의 예측 가능성과 분석 가능성을 결정하는 중요한 요소입니다.

KPSS 검정은 귀무가설(null hypothesis)이 정상성을 가정하는 특징을 갖고 있습니다. 즉, p-value가 낮으면 정상성이 기각되며 데이터가 비정상적(Non-Stationary)임을 의미합니다.

2. KPSS 검정의 원리

KPSS 검정은 시계열 데이터를 다음과 같이 분해하여 분석합니다:

Xt=Tt+Rt+utX_t = T_t + R_t + u_t
  • TtT_t: 추세(Trend) 성분

  • RtR_t: 랜덤 워크(Random Walk) 성분

  • utu_t: 평균이 0인 백색 잡음(White Noise)

여기서 랜덤 워크(R_t)의 존재 여부를 검증하는 것이 KPSS 검정의 핵심입니다. 만약 RtR_t가 존재한다면 데이터는 비정상적이고, 존재하지 않는다면 정상적이라고 판단합니다.

3. KPSS 검정 알고리즘

3.1. 잔차(Residual) 계산

시계열 데이터에서 추세 성분을 회귀 분석(OLS: Ordinary Least Squares)으로 제거하고, 잔차를 계산합니다:

Xt=βt+utX_t = \beta t + u_t
  • 여기서 βt\beta t는 추세(trend) 성분

  • utu_t는 잔차(residuals)

이후 잔차를 누적하여 새로운 시계열 StS_t를 생성합니다.

3.2. 누적 잔차(Sum of Residuals) 계산

잔차를 누적하여 StS_t를 계산합니다:

St=i=1tuiS_t = \sum_{i=1}^{t} u_i

3.3. KPSS 통계량 계산

KPSS 검정의 핵심 공식은 다음과 같습니다:

KPSS=t=1TSt2T2σ^2KPSS = \frac{ \sum_{t=1}^{T} S_t^2 }{ T^2 \cdot \hat{\sigma}^2 }
  • StS_t: 누적 잔차

  • TT: 전체 데이터 길이

  • σ^2\hat{\sigma}^2: 잔차의 Newey-West 추정량

이 통계량이 비정상적인 경우 커지게 되며, 특정 임계값과 비교하여 정상성 여부를 판별합니다.

4. KPSS 검정 결과 해석

  • p-value > 0.05 → 귀무가설(Stationarity) 채택 → 정상성 있음 ✅

  • p-value < 0.05 → 귀무가설 기각 → 비정상적인 시계열 데이터 ❌

5. Python을 이용한 KPSS 검정 구현

Python의 statsmodels 라이브러리를 사용하여 KPSS 검정을 수행할 수 있습니다.

import numpy as np
import statsmodels.api as sm
from statsmodels.tsa.stattools import kpss

# 예제 시계열 데이터 생성 (랜덤 워크)
n = 100
np.random.seed(42)
X = np.cumsum(np.random.normal(size=n))  # 누적합(랜덤 워크)

# KPSS 검정 수행
stat, p_value, _, crit_vals = kpss(X, regression='c', nlags="auto")

# 결과 출력
print(f"KPSS 통계량: {stat}")
print(f"p-value: {p_value}")
print(f"임계값: {crit_vals}")

# 해석
if p_value < 0.05:
    print("비정상적인 시계열 데이터 (Non-Stationary)")
else:
    print("정상적인 시계열 데이터 (Stationary)")

6. R을 이용한 KPSS 검정 구현

urca 패키지를 활용하여 R에서도 쉽게 KPSS 검정을 실행할 수 있습니다.

library(urca)

# 예제 데이터 생성
set.seed(42)
X <- cumsum(rnorm(100))  # 랜덤 워크

# KPSS 검정 수행
kpss_test <- ur.kpss(X)
summary(kpss_test)

7. 결론

  • KPSS 검정은 시계열의 정상성 여부를 판단하는 중요한 통계 기법이다.

  • 정상적인 시계열이면 KPSS p-value가 0.05보다 크다.

  • 비정상적인 시계열이면 p-value가 0.05보다 작아진다.

  • Python (statsmodels.tsa.stattools.kpss)과 R (urca::ur.kpss)를 활용하여 간단히 실행 가능하다.

KPSS 검정은 시계열 분석에서 필수적인 기법이며, 특히 금융 데이터 분석, 예측 모델링, 통계적 투자 전략에서 널리 활용됩니다.

댓글

이 블로그의 인기 게시물

공압 속도 제어: 미터인 vs 미터아웃

[PLC] PLC 아날로그 입출력 기본

[아두이노] 가변저항(Potential Divider)과 전압분배(Voltage Divider)

제너 다이오드에 저항을 연결하는 이유

[PLC] 프로그래밍 - SFC Conversion 기법 (1)

전력(kW) 계산하기 (직류, 교류 단상, 교류 삼상)

[스마트팜] 코코피트 수경재배

[자동화] 스마트 재배기의 온도 조절 방법

커패시터에 저장된 에너지 계산

3선 결선식 센서의 타입 PNP, NPN