기존 시리즈 4편(백테스트 성과 지표)에서 백테스트 함정을 표 한 줄씩 짚었다. 그중 Look-ahead Bias와 Survivorship Bias 둘은 다른 함정과 성격이 다르다. 결과를 CAGR이 좋아지는 한 방향으로만 왜곡한다.

양방향 노이즈가 아니라 체계적 편향이라 인지하지 못하면 그대로 실전에 옮긴다. 자매편으로 다룬 Walk-forward 분석도 이 두 함정은 잡지 못한다. Walk-forward는 시간 분할만 다루기 때문에 데이터 자체에 들어 있는 미래 정보나 살아남은 종목 편향은 fold 안에 그대로 들어간다. 케이스 단위로 양상을 봐야 인지가 명확해진다.

Look-ahead Bias

시점 t의 의사결정에 t+k 시점의 정보를 사용하는 모든 경우를 일컫는다. 백테스트에서 우연한 미래 누설은 잘 드러나지 않는 형태로 자주 들어온다.

Case 1. 모멘텀 전 구간 정규화

여러 종목의 모멘텀을 z-score로 정규화해 상위 N개를 선별하는 전략이 있다고 하자. 시점 t의 종목별 z-score를 계산할 때 평균과 표준편차로 전체 기간 통계를 사용하면, 그 평균과 표준편차에는 t+k 시점의 데이터가 들어 있다. t 시점에 알 수 없는 정보를 이미 z-score에 반영한 셈이다.

회피는 단순하다. 시점 t까지의 rolling window로 평균과 표준편차를 계산한다. 시점 t 이후 데이터는 정규화에 들어가지 않는다.

Case 2. 재무 데이터 공시 지연 무시

2024-12-31 결산 재무는 보통 2025년 3월쯤 공시된다. 백테스트에서 2025년 1월 의사결정에 그 재무를 사용하면 아직 발표되지 않은 정보를 미리 쓴 것이 된다.

회피는 공시 시점(lag)을 명시적으로 모델링한다. DART, SimFin 같은 데이터 소스는 결산일과 공시일을 별도 컬럼으로 제공한다. 백테스트 시점이 공시일 이후인지 확인하고 사용한다.

Case 3. 종가 시그널, 종가 체결

종가 기반 시그널(이동평균 cross, RSI 등)이 발생하면 같은 날 종가에 체결되는 것으로 가정하는 백테스트가 흔하다. 현실에서는 장 마감 시점에 시그널을 확인하면 그 시각에는 주문을 넣을 수 없다. 익일 시가나 VWAP가 현실적인 체결 가격이다.

종가 시그널 + 종가 체결 백테스트는 익일 갭 다운(또는 갭 업)의 영향을 받지 않는다. 현실보다 좋은 진입가를 가정하는 셈이다. 회피는 시그널 발생일 익일 시가 체결로 모델링하거나, 종가 체결을 유지하되 slippage를 추가한다.

Survivorship Bias

현재 시점에서 살아남은 종목만으로 과거 백테스트를 돌리는 경우 발생한다. 상장폐지된 종목은 보통 손실 종목이라, 그 종목들이 빠지면 CAGR이 부풀려진다.

Case 1. S&P 500 시점별 구성

S&P 500은 구성이 고정된 인덱스가 아니다. 매년 십수 개에서 이십여 개가 교체된다. 10년이면 누적으로 100개를 훌쩍 넘는 종목이 바뀌었다는 의미다.

“S&P 500 종목으로 10년 백테스트"라고 했을 때 어느 시점 구성을 쓰는가에 따라 결과가 크게 갈린다. 오늘 시점의 500개로 10년 전 백테스트를 돌리면 이미 살아남은 종목만 사용한 셈이 된다. 10년 전 구성에는 그 사이 상장폐지되거나 인수합병으로 사라진 종목이 포함되어 있어야 한다.

회피는 시점별 인덱스 구성을 제공하는 데이터(Compustat, CRSP 등)를 사용한다. 무료 API로는 시점별 구성을 얻기 어려우니, 상용 데이터 접근이 어렵다면 한계를 인지하고 결과를 보수적으로 해석한다.

Case 2. Yahoo Finance와 무료 API의 한계

Yahoo Finance, 한국의 KIS API, 네이버 시세 같은 무료 데이터 소스는 상장폐지 종목을 보통 보유하지 않는다. 상장폐지 종목은 ticker 자체가 사라지거나 가격 데이터 조회가 불가능해진다.

한국 시장도 동일하다. 상장폐지된 KOSPI 종목의 과거 가격은 무료 데이터에서 사실상 사라진다. 그 결과 “지난 10년간 KOSPI 종목으로 팩터 전략"이라는 백테스트는 자동으로 Survivorship Bias가 들어 있다.

회피는 두 가지다. 상용 데이터 구매가 가장 확실한 방법이고, 비용을 감수할 수 없다면 결과 해석에 보정 마진을 둔다. 학술 연구에서는 Survivorship Bias가 CAGR을 연 2~4% 부풀린다는 추정이 자주 인용된다.

사촌 함정들

두 함정과 함께 작동하는 편향들이 더 있다.

Data Snooping은 수많은 파라미터 조합을 시도하다 우연히 좋은 것을 발견하는 현상이다. 시그널 후보 10개 × lookback 10개 × 임계값 10개를 다 돌려보면 1,000개 중 몇 개는 우연히 좋다. 자매편으로 다룬 Walk-forward 분석이 일부 완화하지만 완전 해결은 아니다.

Selection Bias는 백테스트 잘 나오는 기간만 선택해서 발표하는 형태다. 2010~2020년만 보여주고 2008년을 빼면 같은 전략의 인상이 달라진다. 통계적 의미가 약해진다.

회피 체크리스트

새 전략을 백테스트하기 전이나 결과를 평가할 때 다음 항목을 확인한다.

  • 시그널 계산에 시점 t 이후 정보가 들어가지 않았는가
  • 재무 데이터에 공시 지연(lag)을 반영했는가
  • 체결 시점이 시그널 시점과 다른가 (실제로 주문 가능한 시점인가)
  • 유니버스가 시점별로 다른가, 아니면 오늘 구성을 과거에 적용했는가
  • 거래비용과 슬리피지를 시뮬에 포함했는가

체크리스트의 항목 중 일부는 데이터 한계로 완전 해결이 어려울 수 있다. 그 경우 한계를 명시하고 결과 해석에 마진을 두는 것이 차선이다.


두 함정은 인지하면 회피할 수 있다. 다만 무료 데이터 환경에서는 Survivorship Bias 같은 함정을 완전히 제거하기 어렵고, 결과를 보수적으로 해석하는 것이 합리적이다. 자매편으로 다룬 Walk-forward 분석과 결합하면 신뢰도를 다층으로 보강할 수 있다. 시간 분할은 Walk-forward가, 데이터 정합성은 본 글의 체크리스트가 담당하는 구성이다.

참고 자료