Paper note
코드가 맞아도 백테스트가 속는 이유
코드가 맞아도, 너무 많이 실험하면 좋은 결과는 언젠가 나옵니다.
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)이 이 경고를 특히 선명한 수치로 보여줘요.
- 실력이 전혀 없는(기대 표본 밖 샤프 0) 전략을 약 10개(N=10) 만 시도해도, 그중 최댓값의 표본 내(in-sample) 기대 샤프지수는 약 1.57까지 올라갑니다.
- 이진 손잡이 7개(2⁷=128가지 조합) 짜리 단순한 전략만으로도, 순전히 운에서 나오는 최대 샤프지수가 약 2.6을 넘습니다.
- 저자들이 든 다른 예에서는, 약 20번의 시도만으로도 표본 내 샤프지수가 2.0을 넘는 그럴듯한 설정 하나를 찾게 된다고 지적했어요.
여기서 나온 ‘최소 백테스트 길이(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은 화려한 전략이 아니라 최소한의 필터예요. 흥분보다 감산을 먼저 하게 만들고, 과최적화에 속아 매매를 늘리는 실수를 줄여줍니다. 개인에게 이 노트의 판정은 분명해요. 근사한 샤프지수를 만났을 때 첫 질문은 “얼마나 벌었나”가 아니라 “몇 번 시도해서 얻었나”여야 한다는 것입니다.