NOONOO TRADING봇에서 시작하기

KPSS 정상성 검정: ADF와 함께 쓰는 교차 확인 방법

KPSS 검정은 "이 계열은 평균 주변에서 움직이는 정상 계열이다"를 귀무가설로 두고, 그 가설을 기각할 만큼 계열이 평균에서 멀리 떠내려가는지 확인합니다. ADF와 귀무가설이 정반대라서 둘을 같이 돌리면 서로의 약점을 보완합니다. 본문 숫자는 계산 구조를 보여주는 가정 예시입니다.

1. ADF와 무엇이 다른가

ADF 검정은 "단위근이 있다(평균회귀 없음)"가 귀무가설입니다. 기각해야 평균회귀 근거가 생기고, 표본이 짧으면 기각이 잘 안 됩니다. 그러면 "평균회귀가 없다"와 "구분이 안 된다"를 가를 수 없습니다.

KPSS는 반대로 "정상 계열이다"가 귀무가설입니다. 기각되면 "정상이 아니다(떠내려간다)"는 근거가 생깁니다. 귀무가설이 서로 반대이므로 두 검정의 결론을 겹쳐 보면 판정이 훨씬 선명해집니다.

귀무가설 비교
· ADF: H0 = 단위근 있음 → 기각 시 평균회귀 근거
· KPSS: H0 = 정상 → 기각 시 비정상(추세·랜덤워크) 근거

2. 통계량은 어떻게 만드는가

계열에서 평균을 뺀 잔차 e(t)를 구하고, 잔차를 누적한 부분합 S(t)를 만듭니다. 정상 계열이면 잔차가 +와 −로 번갈아 나와 부분합이 0 근처에 머뭅니다. 비정상 계열이면 한쪽으로 쌓여 부분합이 커집니다.

통계량 η = ΣS(t)² ÷ (T² × σ²)
· T = 관측 개수, σ² = 잔차의 분산(실제 검정은 자기상관을 반영한 장기 분산 사용)

미니 계산 (T = 5)
잔차 e = +1, −2, +1, +2, −2 (합계 0)
부분합 S = 1, −1, 0, 2, 0
ΣS² = 1 + 1 + 0 + 4 + 0 = 6
σ² = (1 + 4 + 1 + 4 + 4) ÷ 5 = 2.8
η = 6 ÷ (25 × 2.8) = 6 ÷ 70 = 0.086

η가 클수록 비정상 쪽입니다. ADF와 달리 통계량이 임계값보다 클 때 기각합니다. 방향이 반대인 점을 헷갈리지 않아야 합니다.

3. 임계값

수준 정상성(상수항만 포함) 임계값
· 10%: 0.347
· 5%: 0.463
· 1%: 0.739

추세 정상성(상수항 + 추세) 임계값
· 10%: 0.119 · 5%: 0.146 · 1%: 0.216

η = 0.086은 5% 기준 0.463보다 작음 → 정상 가설 기각 못 함

"수준 정상성"은 평균이 일정한지, "추세 정상성"은 일정한 기울기 주변에서 움직이는지를 봅니다. 가격은 보통 추세 쪽 설정이 아니라 수준 설정으로 보고, 스프레드·펀딩비도 수준 설정이 기본입니다. 설정은 데이터를 보기 전에 정해서 기록합니다.

4. ADF와 KPSS를 조합해 읽는 4가지

① ADF 기각 + KPSS 기각 못 함 → 정상. 평균회귀 전략 후보.
② ADF 기각 못 함 + KPSS 기각 → 비정상(랜덤워크). 평균회귀 전략 부적합.
③ 둘 다 기각 못 함 → 데이터가 부족해 판정 불가. 표본 연장 필요.
④ 둘 다 기각 → 구조 변화나 추세 혼합 의심. 기간을 나눠 재검정.

③이 ADF 단독으로는 보이지 않던 정보입니다. ADF만 돌리면 ③과 ②가 모두 "기각 못 함"으로 합쳐져 버립니다. KPSS를 더하면 "없다"와 "모르겠다"가 분리됩니다. 표본 길이가 판정에 미치는 영향은 거래 표본 크기와 같은 원리입니다.

5. 사례

사례 A (펀딩비 계열, 일 평균): T = 400
· ADF t = −4.1 (1% 임계 −3.43 초과 기각)
· KPSS η = 0.21 (5% 임계 0.463 미만, 기각 못 함)
→ ①. 정상. 반감기는 평균회귀 반감기로 계산.

사례 B (두 코인 가격비): T = 400
· ADF t = −1.2 (기각 못 함)
· KPSS η = 1.35 (1% 임계 0.739 초과 기각)
→ ②. 비정상. 비율이 평균으로 돌아온다는 전제가 데이터와 맞지 않음.

6. 한계

· 장기 분산 추정: 시차(lag) 선택에 따라 η가 크게 변합니다. 시차를 너무 작게 잡으면 기각이 과하게 나옵니다.
· 구조 변화: 중간에 평균이 한 번 바뀐 계열은 정상 계열이어도 KPSS가 기각하는 경우가 많습니다. 기간을 나눠 같은 검정을 반복해 확인합니다.
· 다중 검정: 종목 100개에 돌려 통과한 것만 고르면 우연한 통과가 섞입니다. 다중 검정 함정을 참고해 검정 개수를 함께 기록합니다.
· 정상성 ≠ 수익: 정상 판정은 전략의 전제 조건 하나를 확인한 것뿐이고, 수수료·슬리피지 반영 후 손익은 별도 리플레이로 확인해야 합니다. 자기상관의 유무는 수익률 자기상관과 융-박스 검정으로 따로 봅니다.

7. 실무 순서

① 거래할 계열을 정의하고 설정(수준/추세, 시차 선택 방식)을 사전에 기록합니다.
② 파이썬 statsmodels의 kpss 함수로 통계량, p값, 임계값을 얻고 같은 계열에 ADF도 돌립니다.
③ 4가지 조합 중 어디인지 분류합니다. ③번(판정 불가)이면 표본을 늘립니다.
④ 기간을 나눠 반복하고, ①에 해당하면 반감기와 비용을 반영한 리플레이로 넘어갑니다.

정리

KPSS는 "정상이다"를 귀무가설로 두고, 부분합 기반 통계량 η가 임계값(수준 5% = 0.463)을 넘으면 기각합니다. ADF와 반대 방향이라 둘을 조합하면 "평균회귀 없음"과 "표본 부족으로 구분 불가"를 나눌 수 있습니다. 다만 시차 선택과 구조 변화에 민감하고, 정상 판정이 곧 수익 가능성은 아닙니다.

주의

본문의 관측 개수, 잔차, 통계량은 계산 구조를 보여주기 위한 가정 예시이며 특정 코인의 실제 측정값이 아닙니다. 임계값은 대표적인 근사치이며 설정에 따라 달라집니다. 이 글은 교육 정보이며 특정 자산의 매매 권유가 아닙니다. 코인 선물 거래는 원금 손실 위험이 크고, 투자 판단과 그 결과는 본인 책임입니다.

NOONOO TRADING 무료 채팅방에서 실시간 트레이딩을 같이 보세요.

봇에서 시작하기

📈 OKX 신규 가입 시 거래 수수료 할인

OKX 수수료 할인 가입 →