백테스트의 함정 6가지
백테스트는 "과거에 이 조건이 얼마나 자주 충족되었고 그 뒤 무슨 일이 있었는가"를 세는 일입니다. 결과가 좋아 보이는데 실제와 다른 이유는 대개 계산이 아니라 설계에 있습니다. 자주 반복되는 함정 여섯 가지를 확인 방법과 함께 적었습니다.
왜 생기나
백테스트가 하는 일은 단순합니다. 과거 데이터에서 특정 조건이 몇 번 나타났는지 세고, 그 이후에 무엇이 일어났는지 확인하는 것입니다. 그런데 결과가 실제와 어긋날 때, 원인은 계산 과정의 오류보다 검증을 설계한 방식에 있는 경우가 많습니다. 숫자를 잘못 더한 것이 아니라, 애초에 무엇을 세는지가 어긋나 있는 것입니다.
설계 단계에서 어긋나는 지점은 크게 두 갈래로 나뉩니다. 하나는 그 시점에 존재하지 않았던 정보가 검증에 섞여 드는 경우입니다. 판단 시각보다 늦게 확정된 값을 조건에 넣거나(look-ahead), 오늘 남아 있는 종목 목록으로 과거를 되짚어 상장폐지·합병된 종목을 빠뜨리거나(생존편향), 실제로는 매번 빠져나가는 수수료·슬리피지·스프레드를 계산에서 제외하면, 현실에서 재현할 수 없는 조건으로 과거를 돌린 셈이 됩니다.
다른 하나는 결과를 이미 본 상태에서 조건이 만들어지는 경우입니다. 기간이나 배수를 조금씩 바꿔 가며 가장 성적이 좋은 조합을 고르면 그 설정은 그 구간에만 들어맞고(과최적화), 차트를 먼저 본 뒤 "이랬으면 좋았겠다"는 식으로 조건을 세우면 조건문 자체가 결과의 산물이 됩니다. 여기에 조건 충족 횟수가 열두 번 남짓처럼 적으면, 그 뒤의 결과 분포는 우연과 구분할 방법이 없습니다.
이 여섯 가지가 공통적으로 무너뜨리는 것은 "검증이 그 시점의 정보만으로 이루어졌는가"라는 전제입니다. 그래서 확인 질문도 같은 방향을 향합니다. 입력값이 판단 시각 이전에 확정되었는지, 과거 시점의 종목 목록을 썼는지, 비용을 포함한 결과가 함께 있는지, 설정을 정한 구간과 검증한 구간이 분리되어 있는지, 충족 횟수·관찰 기간·국면별 표본이 적혀 있는지, 조건문이 데이터보다 먼저 기록되었는지입니다.
다만 이 점검을 통과했다고 해서 결과가 앞으로도 유지된다는 뜻은 아닙니다. 점검은 과거 계산이 그 시점의 정보만으로 이루어졌는지를 확인할 뿐이며, 과거의 상관을 앞날의 보장으로 옮겨 적을 근거가 되지는 않습니다. 그래서 기록에는 결과 숫자만이 아니라 표본 수, 조건 정의, 관찰 기간, 평균이 아닌 결과 분포, 그리고 한계를 함께 남깁니다. 조건과 결과를 미리 적어 두고 나중에 대조하는 방식은 TeamBroLab의 기록·연구가 지키는 최소 형식이기도 합니다.
1. 미래 정보를 쓴다 (look-ahead)
그 시점에 알 수 없었던 값(당일 종가로 당일 판단, 나중에 수정된 지표 값)을 조건에 넣는 실수입니다. 확인: 조건에 들어가는 모든 값의 "확정 시각"이 판단 시각보다 앞서는가.
2. 살아남은 종목만 본다 (생존편향)
현재 상장된 종목 목록으로 과거를 돌리면 상장폐지·합병된 종목이 빠져 결과가 좋아집니다. 확인: 과거 각 시점의 종목 목록을 썼는가, 아니면 오늘의 목록을 썼는가.
3. 수수료·슬리피지·스프레드를 뺀다
거래 횟수가 많을수록 비용이 결과를 뒤집습니다. 확인: 비용을 0으로 두고 돌린 결과와 현실적인 비용을 넣은 결과가 함께 있는가.
4. 설정값을 결과에 맞춘다 (과최적화)
기간·배수를 조금씩 바꿔 가장 좋은 조합을 고르면, 그 조합은 과거에만 맞는 값이 됩니다. 확인: 설정을 정한 구간과 검증한 구간이 분리되어 있는가. 설정을 조금 바꿨을 때 결과가 급변하는가.
5. 표본이 너무 적다
조건 충족이 12번뿐이라면 그 뒤의 결과 분포는 우연과 구분되지 않습니다. 확인: 조건 충족 횟수와 관찰 기간이 결과와 함께 적혀 있는가. 시장 국면(추세·횡보·급락)별로 나눠도 표본이 남는가.
6. 조건이 사후에 정해졌다
차트를 보고 "이런 조건이면 됐겠다"고 만든 조건은 이미 결과를 본 뒤의 것입니다. 확인: 조건문이 데이터를 보기 전에 적혀 있었는가, 조건 수정 이력이 남아 있는가.
여섯 함정 점검표
| # | 항목 | 확인 질문 |
|---|---|---|
| 1 | 미래 정보 | 모든 입력값이 판단 시각 이전에 확정되었나 |
| 2 | 생존편향 | 과거 시점의 종목 목록을 썼나 |
| 3 | 비용 누락 | 비용 포함 결과가 있나 |
| 4 | 과최적화 | 설정 구간과 검증 구간이 분리되었나 |
| 5 | 표본 부족 | 충족 횟수·기간·국면별 표본이 적혀 있나 |
| 6 | 사후 조건 | 조건문이 데이터보다 먼저 적혔나 |
결과를 적을 때 반드시 함께 적는 것
표본 수 · 조건 정의 · 관찰 기간 · 결과 분포(평균이 아니라 분포) · 한계. TeamBroLab의 기록·연구가 지키려는 최소 형식과 같습니다. 과거의 상관을 앞으로의 보장으로 적지 않습니다.
함께 보기
- 아카이브 — 조건과 결과가 사전에 적힌 기록
- 자료실 · 흔한 실수 — 생존편향이 시장에서 나타나는 4가지
- 판정 4종 정리
출처: 일반적 계량 검증 방법론(look-ahead bias, survivorship bias, overfitting, out-of-sample 검증) 교육 자료 및 TeamBroLab 연구 형식(표본 수·조건·기간·분포·한계) · 확인일 2026-09-04 · 이 글은 방법론 설명이며 특정 전략이나 상품에 대한 권유가 아닙니다.
당사는 금융투자업자가 아닌 유사투자자문업자로서, 본 콘텐츠는 시장 정보 제공을 목적으로 하며 특정 금융상품의 매수·매도를 권유하지 않습니다. 투자 판단과 그에 따른 손익은 투자자 본인에게 귀속됩니다. 개별 종목에 대한 문의에는 답변드리지 않습니다.