백테스트 결과를 공유하기 전에 남겨야 할 최소 기록

개인 연구에서 백테스트는 전략의 가능성을 가늠하는 유용한 도구입니다. 하지만 매력적인 우상향 곡선을 마주했을 때 성급히 공유부터 하면, 훗날 자신이 만든 결과조차 재현하지 못하거나 통계적 착시에 빠질 위험이 큽니다. 이 글은 나중에 스스로 다시 확인하고 타인에게도 투명하게 설명하기 위해 남겨 두어야 할 최소한의 기록 기준을 정리합니다.

다만 기록을 갖췄다는 사실만으로 전략의 수익성이나 과최적화의 부재가 입증되지는 않습니다. 기록은 결과를 검증할 수 있게 해 주는 전제 조건일 뿐, 검증 결과 그 자체가 아닙니다.

1. 시점과 규칙의 엄밀한 동결

과거 데이터를 다룰 때 주의할 오류는 ‘당시에 실제로 알 수 없었던 정보’가 계산에 포함되는 것입니다. 데이터의 기준 기간뿐 아니라 공시 지연이나 지표 확정 시점 등 각 거래 시점에 실제로 쓸 수 있었던 데이터인지 명시해야 합니다. 이후 값이 정정되었다면 정정 전 값을 썼는지, 정정 후 값을 썼는지도 적어 둡니다. 예측 시점에 알 수 없던 정보나 시험 표본이 모델 선택에 섞이면 평가가 낙관적으로 나올 수 있다는 점은 scikit-learn 공식 문서의 Common pitfalls 중 Data leakage 항목에서 설명합니다.

체결과 비용도 따로 적습니다. 신호가 나온 시점과 실제 체결을 가정한 시점(익일 시가, 당일 종가 등)의 간격, 수수료와 슬리피지 가정을 각각 분리해 기록합니다. 비용 가정을 바꾸면 결과가 얼마나 달라지는지는 수수료 0.25%가 전략을 죽이나에서 27년치를 비용만 바꿔 돌려본 기록으로 남겨 뒀습니다. 규칙과 로직의 버전도 함께 남겨야 어떤 규칙으로 계산한 결과인지 나중에 구분할 수 있습니다.

2. 변경 이력과 표본 관리

원하는 성과가 나올 때까지 매개변수를 조정했다면 실패한 시도와 변경 과정 전체가 연구의 일부입니다. 시도 횟수와 탈락한 결과를 숨기면 검증이 왜곡될 수 있고, 같은 데이터에서 반복해 고르는 과정이 과최적화 위험에 영향을 준다는 논의는 Bailey 등의 The Probability of Backtest Overfitting (2015)에서 다룹니다. 다만 이 글의 체크리스트를 채우는 것만으로 해당 논문의 과최적화 확률을 계산한 것은 아니며, 체크리스트는 시도 수를 숨기지 않기 위한 기록 장치일 뿐입니다. 같은 데이터를 반복해 고르면 결과가 어떻게 거짓말이 되는지는 백테스트 뜻과 함정에서 더 풀어 썼습니다.

여러 차례 테스트하며 이미 살펴본 구간을 ‘미관측 최종 시험(Out-of-sample)’으로 분류해서는 안 됩니다. 판정 기준은 단순합니다. 규칙 선택과 매개변수 조정 어디에도 참조한 적이 없는 구간만 미관측 표본으로 부르고, 한 번이라도 결과를 보고 규칙을 바꿨다면 그 구간은 관측 표본으로 옮겨 기록합니다. 또한 자산 자체의 절대 수익률과 벤치마크 대비 초과 수익은 서로 다른 지표이므로 표에서 따로 표기합니다.

3. 재현을 위한 파일 및 한계 명시

재현을 위한 파일 묶음은 다음 네 가지를 한 세트로 연결해 둡니다. 첫째 원천 데이터 파일과 수집 시점, 둘째 가공 스크립트 버전, 셋째 기간·매개변수·비용 가정을 담은 설정 파일, 넷째 성과 표와 거래 내역 같은 최종 산출 파일입니다. 이 연결이 없으면 몇 달 뒤 동일 조건의 재현 여부를 확인하기 어렵습니다. 재현 판정 기준도 미리 정해 둡니다. 같은 입력과 설정으로 같은 산출 파일이 다시 만들어지면 재현 성공, 차이가 나면 차이의 원인을 기록하는 방식입니다.

마지막으로 확인하지 못한 한계를 별도 항목으로 적습니다. 유동성 부족, 극단적 시장 충격, 체결 지연처럼 이번 시뮬레이션이 다루지 못한 조건은 ‘확인하지 못함’으로 명시하고, 어떤 가정으로 넘어갔는지 한 줄씩 남깁니다. 한계를 적는 일은 결과를 깎아내리는 것이 아니라 결과가 어디까지 말해 주는지를 정직하게 표시하는 일입니다.

공유 전 필수 확인 6항목

연구 노트나 코드 저장소에 바로 복사하여 쓸 수 있는 기본 점검표입니다.

  • [ ] 데이터 및 시점: 데이터 기간과 각 시점에서 실제로 알 수 있었던 정보만 사용했는가?
  • [ ] 체결 및 비용: 주문 체결 시점(시가/종가 등)과 수수료·슬리피지 비용 가정을 명시했는가?
  • [ ] 표본 구분: 이미 튜닝에 참고한 표본을 독립된 최종 검증 표본으로 왜곡하지 않았는가?
  • [ ] 수익 성격 구분: 자산 자체의 단순 절대 수익과 벤치마크 대비 초과 수익을 구분했는가?
  • [ ] 버전 관리: 로직 규칙 버전, 실패한 변경 이력, 입력·결과 파일 버전을 기록했는가?
  • [ ] 한계 명시: 유동성, 체결 지연 등 이번 시뮬레이션에서 검증하지 못한 한계를 적었는가?

맺음말

백테스트 기록의 목적은 그럴듯한 결과를 뽐내는 것이 아니라, 언제든 동일한 조건으로 검증 가능한 연구 기반을 마련하는 데 있습니다. 기록되지 않은 가정이 많을수록 결과의 신뢰성과 재현 가능성을 판단하기 어려워집니다. 반대로 기록이 충분하더라도 수익성이나 과최적화 부재가 입증되는 것은 아니므로, 결과를 공유할 때는 이 점을 함께 밝혀 주시기 바랍니다.

함께 읽으면 좋은 글

실제로 30년치를 돌려본 기록은 이동평균선 하나로 30년을 버티면 어떻게 될까에, 규칙 하나를 더했을 때 치르는 비용은 “하락장엔 쉬어라”는 조언의 청구서에 있습니다.

※ 본 글은 연구 기록 방법에 대한 정리이며 특정 전략이나 종목의 권유가 아닙니다.

Leave a Comment