Paper note

코드가 맞아도 백테스트가 속는 이유

코드가 맞아도, 너무 많이 실험하면 좋은 결과는 언젠가 나옵니다.

2014Backtest Disciplinetestedadvanced
실험 횟수가 늘수록 합격선도 함께 올라가야 한다는 감산의 구조 (개념 도식).

In Plain Terms

전략을 딱 한 번만 백테스트하면, 그 결과가 실력인지 운인지 헷갈립니다. 그런데 전략을 백 번 돌려 그중 가장 예쁜 결과 하나만 남기면 판단은 더 어려워져요. 백 번 중 하나쯤은 순전히 우연으로도 근사한 곡선이 나오기 때문입니다.

Deflated 샤프지수(DSR)는 바로 이 문제를 정면으로 겨냥한 통계 도구예요. 관측된 샤프지수가 진짜 실력인지, 아니면 수많은 시도 끝에 건져 올린 운 좋은 최댓값인지 구분하려 합니다. 핵심 발상은 단순해요. 실험을 많이 할수록 “합격”으로 인정할 기준선을 그만큼 위로 올려야 한다는 것입니다. 그래서 이름이 ’부풀린 값을 도로 깎는다(deflate)’예요.

The Strategy

이 논문이 제안하는 것은 매매 전략이 아니라 백테스트를 채점하는 방법입니다. 보통의 샤프지수는 “정규분포를 따르는 수익률로 전략 하나를 검정했다”는 암묵적 가정 위에 놓여 있어요. 현실은 이 가정을 세 방향에서 깹니다. 수익률은 한쪽으로 치우친 왜도와 두꺼운 꼬리(첨도)를 갖고, 표본은 짧으며, 무엇보다 우리는 전략 하나가 아니라 수많은 후보 중 가장 좋아 보이는 것을 골랐다는 점이에요.

DSR은 이 네 가지를 한꺼번에 반영합니다. 실험한 전략 변형의 개수(N), 수익률 분포의 왜도와 첨도, 표본 길이(T), 그리고 시도한 전략들의 샤프지수가 서로 얼마나 흩어져 있는지(시행 간 분산)를 입력으로 받아요. 그 위에 저자들이 세운 이른바 ’거짓 전략 정리(False Strategy Theorem)’가 얹힙니다. 실력이 전혀 없는(기대 샤프 0) 전략을 N개 시도하면, 그중 최댓값의 기대치가 얼마까지 순전히 운으로 올라가는지를 계산해 주는 공식이에요. 이 기댓값에는 오일러–마스케로니 상수(약 0.5772)까지 등장할 만큼, 극단값 통계의 성격이 그대로 담깁니다.

작동 방식은 이렇게 요약돼요. 먼저 “내가 아무 실력 없이 N번 굴렸다면 순전히 운으로 이 정도 샤프지수는 나왔겠다”는 기준선을 구합니다. 그다음 실제 관측된 샤프지수가 그 운의 기준선을 얼마나 넘어섰는지를 확률로 환산해요. 시도 횟수 N이 커질수록 기준선이 올라가므로, 같은 샤프지수라도 합격 확률은 낮아집니다. 이것이 ’감산’의 정체입니다.

Reality Test

이 논문은 시장 데이터로 수익을 재는 실증 연구라기보다, 수학적으로 증명하고 시뮬레이션으로 보여주는 방법론 논문이에요. 그래서 “검증 내용”은 대부분 숫자로 된 경고의 형태로 나옵니다. 같은 저자들이 같은 해에 낸 자매 논문(Bailey·Borwein·López de Prado·Zhu, 2014, Notices of the AMS)이 이 경고를 특히 선명한 수치로 보여줘요.

여기서 나온 ‘최소 백테스트 길이(MinBTL)’ 개념도 기억해 둘 만합니다. 표본 내 샤프지수 1을 순전히 운으로 만들지 않으려면, 데이터가 약 5년치라면 서로 독립인 전략 변형을 45개 넘게 시험해서는 안 된다는 계산이에요. 뒤집어 말하면 독립적인 시도 7번이면 2년짜리 백테스트에서 이미 표본 내 샤프 1이 우연히 나올 수 있고, 그때 기대 OOS 샤프는 0이라는 뜻입니다. 근사 공식은 대략 MinBTL ≒ 2·ln(N) / (기대 최대 샤프)² 로 요약돼요.

다만 이 숫자들에는 굵은 단서가 붙습니다. 모두 시도들이 서로 독립이라는 가정 위에서 나온 다소 보수적인 추정이고(실제로는 변형끼리 겹치므로 유효 N은 줄어듭니다), 전부 표본 내 값이며, 거래비용 이전의 순수 통계량이라는 점이에요. 핵심 메시지는 표본 내 화려함과 표본 밖 실적 사이의 간극 그 자체입니다. 요컨대 국제 시장 재현이나 발표 후 수익 같은 이야기가 아니라, “실험 횟수를 보고하지 않은 백테스트는 과최적화 위험을 평가할 수조차 없다”는 원리적 결론이에요. 참고로 후속 정리(위키피디아 DSR 항목 기준)에서는, 관측 연 샤프지수가 약 0.95면 95% 신뢰수준에서 귀무가설을 기각하는 데 일간 수익 약 3년치가 필요하고, 샤프가 1.15를 넘으면 약 2년으로 줄어든다는 예시도 제시됩니다.

손잡이를 조금씩 돌리다 보면 언젠가 예쁜 곡선 하나는 나온다 (개념 도식).

Pain Points

개인 투자자, 특히 코드를 다룰 수 있는 사람에게 이 논문은 가장 아프게 다가옵니다. 파라미터를 조금 바꾸고, 기간을 조금 바꾸고, 유니버스를 조금 손보면 언젠가는 멋진 곡선이 나오기 때문이에요. 문제는 그 과정에서 자기도 모르게 유효 시도 횟수 N이 폭발한다는 점입니다. 손잡이 7개만 있어도 조합은 128가지(2⁷), 거기서 나오는 운만의 최대 샤프지수가 이미 약 2.6을 넘어요. 데이터가 약 5년치뿐이라면 독립 시도는 45번이 사실상 한계인데, 파라미터 스윕 한 번이면 이 숫자는 우습게 넘어갑니다.

더 큰 함정은 아무도 N을 기록하지 않는다는 것이에요. 논문의 핵심 문장이 바로 이겁니다. 시도 횟수 N을 보고하지 않은 백테스트는 애초에 과최적화 정도를 잴 수 없다는 것. 최종 백테스트 하나만 보면 숫자가 근사해 보여도, 그 전략이 나오기까지 버려진 후보가 20개였는지 100개였는지에 따라 해석이 완전히 달라집니다. 이는 파라미터를 특정 표본에 맞춰 깎아내는 데이터 스누핑의 통계적 대가를 그대로 보여줘요.

실무적 한계도 겹칩니다. DSR을 제대로 쓰려면 왜도·첨도·시도 간 분산·유효 N을 정직하게 추정해야 하는데, 개인이 자신의 시행 횟수를 솔직하게 세는 일 자체가 드물어요. 게다가 DSR은 어디까지나 거래비용 이전의 통계 필터입니다. 이 검정을 통과했다고 해서 회전율에서 오는 거래비용이나 세금, 실제 체결 슬리피지가 사라지는 것은 아니에요. 즉 DSR은 “이 숫자가 운이 아닐 확률”만 높여줄 뿐, 순수익까지 보장하지는 않습니다.

How It Connects Here

이 논문은 사이트의 다른 모든 전략 노트에 적용되는 위생 규칙에 가까워요. 예컨대 모멘텀처럼 견고해 보이는 신호조차 “이 결과는 몇 번의 시도 끝에 골라졌는가”라는 DSR의 질문과 과최적화·데이터 스누핑의 렌즈를 함께 통과해야 비로소 신뢰할 만해집니다.

The Verdict

좋은 백테스트 하나는 그 자체로 단순 보유(Buy and Hold)를 버릴 이유가 되지 못합니다. 그 숫자가 몇 개의 실패한 시도 위에서 골라졌는지, 실험 횟수에 맞춰 합격선을 올려도 여전히 살아남는지를 먼저 물어야 하니까요. Buy and Hold는 애초에 수많은 후보 중 가장 예쁜 것을 골라낸 결과가 아니기에, 이 감산의 시험대에 오를 필요조차 없다는 점이 역설적인 강점입니다.

DSR은 화려한 전략이 아니라 최소한의 필터예요. 흥분보다 감산을 먼저 하게 만들고, 과최적화에 속아 매매를 늘리는 실수를 줄여줍니다. 개인에게 이 노트의 판정은 분명해요. 근사한 샤프지수를 만났을 때 첫 질문은 “얼마나 벌었나”가 아니라 “몇 번 시도해서 얻었나”여야 한다는 것입니다.