백테스트 과최적화
— 과거엔 완벽한 전략이 왜 무너지나
“지난 3년 수익률 400%” 같은 백테스트 결과를 봅니다. 그런데 실제로 돌려보면 성적이 전혀 다릅니다. 과거를 잘 설명하는 것과 미래를 맞히는 것은 다른 일이기 때문입니다.
과최적화(overfitting)란
과거 데이터에 대해 지나치게 잘 맞도록 규칙을 다듬은 상태입니다.
시험 공부에 비유하면, 기출문제의 답을 통째로 외운 것과 같습니다. 그 시험지에서는 만점이지만, 새 문제를 받으면 풀지 못합니다. 데이터에는 진짜 규칙성과 그때만의 우연이 섞여 있는데, 너무 세밀하게 맞추면 우연까지 학습해버립니다.
어떻게 만들어지나 — 흔한 경로
- 전략을 짜고 과거 데이터로 돌려봅니다. 결과가 그저 그렇습니다.
- 파라미터를 조금 바꿉니다. RSI 30 → 28. 수익률이 오릅니다.
- 조건을 추가합니다. “거래량 2배 이상일 때만”. 더 오릅니다.
- 손절 폭을 조정합니다. 또 오릅니다.
- 완성된 전략의 과거 수익률이 매우 훌륭합니다.
문제는 2~4단계입니다. 결과를 보고 규칙을 고쳤습니다. 그 순간부터 백테스트는 검증이 아니라 맞춤 작업이 됩니다. 시도 횟수가 늘수록 우연히 좋아 보일 기회도 늘어납니다(다중검정 참고).
인샘플과 아웃오브샘플
- 인샘플(in-sample) — 규칙을 만들 때 본 데이터입니다. 여기 성적은 언제든 좋게 만들 수 있으므로 증거가 아닙니다.
- 아웃오브샘플(out-of-sample) — 규칙을 확정한 뒤 처음 보는 데이터입니다. 여기 성적이 진짜입니다.
그런데 아웃오브샘플도 여러 번 보면 오염됩니다. “안 맞네, 규칙을 조금 고쳐서 다시”를 반복하면 그 구간도 결국 인샘플이 됩니다. 한 번만 써야 의미가 있습니다.
가장 확실한 검증 — 포워드 테스트
규칙을 먼저 공개적으로 확정하고, 그 뒤에 새로 들어오는 데이터로 확인하는 것입니다. 아직 존재하지 않는 데이터에는 맞출 방법이 없으므로 자기기만이 불가능합니다.
DawnScan이 신규 신호를 가중치 0으로 기록만 하다가 표본이 쌓인 뒤에 반영 여부를 판정하는 이유가 이것입니다. 측정 기준을 먼저 정해두고, 데이터가 그 기준을 통과하는지 나중에 봅니다.
- 판정 기준(표본 최소치·신뢰구간·보정)을 사전에 고정합니다.
- 기준 미달이면 기준을 낮추지 않고 보류합니다.
- 보류한 신호와 그 이유도 함께 공개합니다.
백테스트 결과를 볼 때 물어볼 것
- 파라미터를 몇 번 조정했나? — 횟수가 많으면 그만큼 우연이 섞입니다.
- 규칙 확정 시점 이후의 성적이 있나? — 없다면 아직 검증된 게 아닙니다.
- 거래 비용과 슬리피지를 반영했나? — 소형주 전략은 이것만으로도 결과가 뒤집힙니다.
- 상장폐지 종목을 포함했나? — 빼면 수익률이 부풀려집니다.