같은 규칙을 한국에 적용했더니, 결론이 세 번 뒤집혔다
같은 규칙을 한국에 적용했더니, 결론이 세 번 뒤집혔다
미국 S&P500에서 검증한 규칙이 있다. 20/50/200일선 정배열 눌림목에서 사고, 추세가 꺾이면 판다. 10년·20년 데이터로 확인했고 플러스가 나왔다.
그럼 한국에서도 통할까. 차트 모양은 비슷하니까 될 것 같았다. 결론부터 말하면 세 번 측정했고 세 번 다 다른 답이 나왔다.
1차: 80종으로 재보니 "코스닥은 된다"
코스피 대형주 50종, 코스닥 대형주 30종을 5년치로 돌렸다.
```
코스피 train −0.344R test +0.104R → 실패 (train에서 붕괴)
코스닥 train +0.071R test +0.124R → 통과
```
코스닥은 train·test 둘 다 플러스였다. 그래서 "코스닥은 검증됨, 코스피는 참고"로 라벨을 붙였다.
2차: 473종으로 늘리니 "코스피도 된다"
표본이 적다는 게 걸려서 거래대금 상위 500종, 기간도 10년으로 늘렸다.
```
코스피 train +0.016R test +0.064R → 통과 (뒤집힘)
코스닥 train +0.148R test +0.147R → 통과
```
1차에서 실패했던 코스피가 통과로 바뀌었다. 원인은 분명했다. 1차의 분할은 train 97건 대 test 477건으로 5대 1로 치우쳤고, 그 97건이 전부 2021~22년 하락장에 몰려 있었다. 표본이 작으면 우연이 결론을 만든다.
여기까지는 "역시 표본을 늘려야 한다"는 교훈으로 끝나는 줄 알았다.
3차: 전체 2,632종으로 늘리니 마이너스
코스피와 코스닥 상장 종목 전부를 넣었다.
```
한국 전체 test −0.036R
코스피 test +0.003R
코스닥 test −0.064R ← 2차에서 가장 좋았던 구간
```
부호가 바뀌었다. 2차에서 가장 성적이 좋았던 코스닥(+0.147R)이 전체를 넣자 가장 나쁜 구간(−0.074R)이 됐다.
왜 이런 일이 벌어졌나
세 결과를 나란히 놓으면 패턴이 보인다.
| 유니버스 | 코스닥 기대값R |
|---|---|
| 80종 (대형주 선별) | +0.124 |
| 473종 (오늘 거래대금 상위 500) | +0.147 |
| 2,632종 (전체) | −0.074 |
유니버스를 좁힐수록 성적이 좋아졌다. 이게 핵심이다.
1차와 2차의 유니버스는 "오늘 기준으로 거래가 활발한 종목" 이었다. 지금 살아남아 잘나가는 종목만 골라서 10년 전부터 재면, 당연히 결과가 좋게 나온다. 10년 전 그 목록을 알 방법은 없었는데도 말이다.
이걸 생존편향 또는 선택편향이라고 부른다. 그리고 판별법은 간단하다.
검증 결과가 표본을 좁힐수록 좋아진다면, 엣지가 아니라 편향을 보고 있는 것이다.
"잡주가 평균을 깎는 것 아닌가"
당연히 나올 반론이다. S&P500은 이미 규모·유동성·수익성 심사를 통과한 500종인데, 한국은 스팩과 관리종목까지 다 넣었으니 공정하지 않다.
그래서 검증했다. 단, 오늘 순위가 아니라 신호가 발생한 그 시점의 20일 평균 거래대금으로 계층을 나눴다. 이러면 미래를 참조하지 않는다.
| 거래대금 계층 | test 기대값R |
|---|---|
| 1000억 이상 | −0.252 |
| 300~1000억 | −0.115 |
| 100~300억 | −0.106 |
| 30~100억 | +0.012 |
| 30억 미만 | −0.004 |
예상과 정반대였다. 유동성이 높을수록 나빴다. 가장 크고 활발한 종목들이 가장 성적이 나빴다.
15개 구간 중 OOS를 통과한 건 2개뿐이고, 계층 사이에 일관된 패턴도 없다. 잡음으로 보는 게 맞다. 한국 결과가 나쁜 이유는 잡주 때문이 아니었다.
그래서 어떻게 했나
한국 종목의 알림 발송을 껐다.
화면에서는 계속 볼 수 있게 뒀다. 근거를 직접 확인하고 판단하는 건 각자의 몫이다. 다만 "규칙이 검증됐다"는 라벨을 달고 알림을 보내는 건 멈췄다. 검증되지 않았으니까.
되돌리는 건 코드 한 줄이다. 근거가 생기면 그때 켜면 된다.
이 과정에서 배운 것
가장 아팠던 건 1차와 2차에서 "된다"는 결론을 내렸다는 사실이다. 두 번 다 나름의 근거가 있었고, OOS 검증도 통과했고, 숫자도 있었다. 그런데 틀렸다.
틀린 게 문제가 아니다. 틀린 걸 기록해두지 않은 게 문제였다. 코드에는 "코스닥은 검증됨"이라는 주석 한 줄만 남아 있었고, 그 근거가 되는 숫자는 어디에도 없었다. 몇 주 뒤에 다시 봤을 때 확인할 방법이 없었다.
그래서 지금은 결과가 나올 때마다 숫자를 문서에 남긴다. 통과한 것도, 실패한 것도, 뒤집힌 이력까지 전부.
핵심 요약
1. 80종·473종에서는 통과, 전체 2,632종에서는 마이너스. 결론이 세 번 바뀌었다.
2. 유니버스를 좁힐수록 성적이 좋아졌다. 선택편향의 전형적 신호다.
3. "오늘 거래대금 상위"를 과거 백테스트에 쓰면 미래참조다.
4. 유동성 필터로도 살아나지 않았다. 오히려 거래대금 상위 구간이 가장 나빴다.
5. 한국 신호 발송을 껐다. 화면 표시는 유지하고 알림만 중단했다.
자주 묻는 질문
*이 글의 수치는 실제 백테스트 실행 결과다. 과거 성과가 미래를 보장하지 않으며, 투자 판단과 책임은 본인에게 있다.*