레슨 6 / 6 · 약 7분

백테스트의 함정

과거 자료로 전략을 시험할 때 성과를 부풀리는 다섯 가지 실수와 점검법

백테스트는 과거 자료에 규칙을 적용해 "그때 이렇게 했다면"의 성과를 계산하는 작업입니다. 실제 돈을 쓰지 않고 아이디어를 시험할 수 있지만, 몇 가지 실수만으로 결과가 실제보다 훨씬 좋게 나옵니다. 남이 보여 준 백테스트를 읽을 때도 같은 항목을 확인합니다.

생존편향

지금 상장돼 있는 종목만 모아 과거를 시험하면, 그 사이 상장폐지되거나 합병으로 사라진 종목이 빠집니다. 사라진 종목은 대개 성과가 나빴던 쪽이라 결과가 위로 치우칩니다. 펀드 성과 통계에서도 같은 일이 생깁니다. 성과가 나빠 청산·합병된 펀드가 통계에서 빠지면 남은 펀드들의 평균이 실제 투자자들이 겪은 평균보다 높아집니다.

계산 예시: 사라진 종목을 빼면

10년 전 같은 조건에 해당한 종목 100개

지금까지 남은 85개의 평균 수익률 +40%

중간에 상장폐지된 15개의 평균 수익률 −80%

전체 평균 = (85 × 40 + 15 × (−80)) ÷ 100 = (3,400 − 1,200) ÷ 100 = +22%

생존 종목만 쓰면 +40%로, 실제보다 18%p 높게 나온다

생존 종목만 쓴 백테스트와 당시 전체 종목 백테스트
  • 지금 남은 85개만
  • 당시 100개 전체
140120100
시작: 지금 남은 85개만 100, 당시 100개 전체 1002년: 지금 남은 85개만 107, 당시 100개 전체 1044년: 지금 남은 85개만 114, 당시 100개 전체 1086년: 지금 남은 85개만 122, 당시 100개 전체 1138년: 지금 남은 85개만 131, 당시 100개 전체 11710년: 지금 남은 85개만 140, 당시 100개 전체 122
시작2년4년6년8년10년

가상 데이터. 위 계산 예시의 10년 누적(+40%, +22%)을 매년 같은 비율로 불어난 것으로 그렸다. 두 선의 차이가 생존편향이다

미래참조

그 시점에는 알 수 없었던 정보를 써서 판단하는 실수입니다. 숫자가 틀린 것이 아니라 시점이 틀린 것이라 찾아내기 어렵습니다.

  • 재무제표 공개 시점: 사업보고서는 사업연도가 끝난 뒤 90일 이내, 분기·반기보고서는 45일 이내에 제출된다. 12월 결산 기업의 연간 실적을 1월 초 매매에 쓰면 미래참조다
  • 정정된 숫자: 나중에 정정공시로 고쳐진 재무 수치를 처음부터 알았던 것처럼 쓰는 경우
  • 오늘의 지수 구성 종목: 현재 코스피200 구성 종목으로 과거를 시험하면 생존편향과 미래참조가 함께 생긴다
  • 같은 종가로 신호와 체결: 오늘 종가로 계산한 신호를 오늘 종가에 산 것으로 처리하는 경우. 실제로는 종가를 본 뒤에야 신호가 나오므로 체결은 다음 날 시가 이후로 잡는다
  • 수정주가와 권리락: 액면분할·무상증자로 과거 주가를 고친 수정주가는 비교에 필요하지만, 당시 실제 호가 단위나 최소 주문 금액을 따질 때는 원래 주가를 봐야 한다

과최적화와 데이터 스누핑

계산 예시: 규칙을 많이 시험하면 우연히 맞는 규칙이 나온다

효과가 전혀 없는 규칙 200개를 같은 자료로 시험

우연만으로 "5% 수준에서 유의"하게 나올 확률이 규칙마다 5%

기대되는 "성공" 규칙 수 = 200 × 0.05 = 10개

그중 가장 좋은 하나만 발표하면 아무 효과 없는 규칙이 뛰어난 전략처럼 보인다

이동평균 기간, 손절 비율 같은 변수를 과거 자료에 가장 잘 맞도록 촘촘하게 고르는 것을 과최적화라고 합니다. 과거 잡음까지 외운 규칙이라 새 자료에서는 성과가 무너집니다. 점검법은 자료를 나눠 앞부분으로 규칙을 정하고 뒷부분(표본 외 구간)에서 다시 확인하는 것, 시험한 규칙의 개수를 함께 밝히는 것, 변수를 조금 바꿔도 결과가 크게 변하지 않는지 보는 것입니다.

비용과 리밸런싱 가정

계산 예시: 매달 전량 교체하는 전략의 비용

왕복 거래비용(거래세·수수료) 0.23% 가정, 월 1회 전량 교체 → 연 12회

명시적 비용 = 12 × 0.23% = 2.76%p

체결 가격 불리함(슬리피지) 왕복 0.2% 가정 → 12 × 0.2% = 2.4%p

합계 약 5.2%p. 백테스트 연 8% 초과수익이 비용 반영 후 약 2.8%p로 줄어든다

백테스트 초과수익에서 비용을 빼는 과정
  • 비용 전 연 초과수익+8%p
  • 거래세·수수료(연 12회 × 0.23%)−2.76%p
  • 슬리피지(연 12회 × 0.2%)−2.4%p
  • 비용 후 연 초과수익2.84%p

계산 예시. 월 1회 전량 교체 가정. 회전율이 두 배면 비용도 두 배다

함정나타나는 모습점검 방법
생존편향상장폐지 종목이 결과에 없다당시 기준 종목 목록 사용 여부
미래참조공시 전 실적으로 매매한다자료별 공개일 기준 적용 여부
과최적화변수가 많고 소수점까지 정밀하다표본 외 구간 성과, 시험한 규칙 수
비용 누락회전율이 높은데 비용 언급이 없다거래세·수수료·슬리피지 반영 여부
체결 가정소형주를 종가에 전량 체결한다거래대금 대비 주문 규모, 거래정지 처리

가상 사례: 표본 외 구간에서 무너진 규칙

가상의 투자자 한 씨는 "PER 하위 20% 중 최근 20일 수익률 상위 10종목을 매달 산다"는 규칙을 만들었습니다. 이동 기간(20일), 종목 수(10개), PER 기준(20%)을 여러 값으로 바꿔 가며 2015~2021년 자료에서 가장 좋은 조합을 골랐더니 연 14%가 나왔습니다. 한 씨는 고른 조합을 건드리지 않고 2022~2025년 자료에 적용해 봤습니다.

계산 예시: 표본 내와 표본 외

시험한 조합: 이동 기간 5가지 × 종목 수 4가지 × PER 기준 3가지 = 60개

표본 내(2015~2021) 최고 조합: 연 14%, 같은 기간 지수 연 6%

표본 외(2022~2025) 같은 조합: 연 3%, 같은 기간 지수 연 4%

표본 내 초과수익 +8%p가 표본 외에서 −1%p로 바뀌었다

60개 중 1등을 골랐다는 사실 자체가 표본 내 성과를 부풀린다

이 결과가 "PER이 낮은 종목은 소용없다"는 뜻은 아닙니다. 60개 조합 중 우연히 앞선 하나를 골랐을 가능성이 크다는 뜻입니다. 한 씨가 다음에 볼 것은 1등 조합 하나가 아니라 60개 조합의 성과 분포입니다. 대부분의 조합이 지수를 앞섰다면 아이디어 자체에 근거가 있고, 1등만 앞섰다면 잡음을 외운 것에 가깝습니다. 표본 외 구간도 한 번 쓰고 나면 더는 표본 외가 아니라는 점도 기억해야 합니다. 표본 외 결과를 보고 규칙을 다시 고친 뒤 같은 구간으로 또 확인하면, 그 구간까지 규칙에 맞춰진 것입니다. 그래서 한 씨는 고친 규칙을 실제 돈 없이 모의투자로 몇 달 더 따라가며 새 자료가 쌓이기를 기다리기로 했습니다. 몇 달 기록은 표본이 작다는 한계가 있지만, 적어도 미래참조와 과최적화에서는 자유로운 자료입니다.

따라 해 보기: 남의 백테스트를 읽는 순서

  1. 기간: 몇 년인가, 큰 하락장이 들어 있는가, 시작일이 하락 직후로 잡혀 있지 않은가.
  2. 종목 범위: 당시 상장 종목 전체인가, 지금 남은 종목인가. 상장폐지 종목은 어떻게 처리했나.
  3. 자료 시점: 재무 숫자를 공시일 이후에 썼는가, 신호와 체결 가격이 같은 종가는 아닌가.
  4. 비용: 거래세·수수료·슬리피지를 넣었나, 회전율은 얼마인가.
  5. 체결 규모: 하루 거래대금 5억 원 종목에 1억 원을 사는 것처럼 거래대금의 20%를 넘는 주문을 가정하지 않았나.
  6. 시험 횟수: 몇 가지 조합을 시험했고, 표본 외 결과는 있는가.
  7. 위험: 수익률 옆에 최대낙폭과 회복 기간, 벤치마크 대비 뒤진 해가 함께 있는가.

핵심 정리

  • 생존편향: 사라진 종목을 빼면 결과가 위로 치우칩니다
  • 미래참조: 사업보고서 90일·분기보고서 45일 같은 공개 시점을 지켜야 합니다
  • 많이 시험할수록 우연히 좋은 규칙이 나옵니다. 표본 외 구간으로 다시 확인합니다
  • 회전율이 높은 전략은 비용과 슬리피지가 초과수익을 크게 깎습니다
목차
오픈카톡 문의오픈 카톡문의/상당/건의