완벽히 재현 가능한 백테스트가 조금씩 결과가 달라지는 백테스트보다 신뢰하기 어려울 수도 있습니다. 반복성은 같은 답을 두 번 얻을 수 있음을 증명하지만, 그 답이 자의적인 데이터 스냅샷 하나, 라이브러리의 특이 동작, 또는 숨겨진 기본값에 좌우되는지는 말해 주지 않습니다.
재현성에 반대하는 주장처럼 들리지만, 그런 뜻은 아닙니다. 실행을 고정해 설명할 수 있게 하세요. 그런 다음 결과를 좌우해서는 안 될 가정을 의도적으로 바꿔 보세요. 첫 단계는 결과를 감사할 수 있게 하고, 두 번째 단계는 그 결과가 의미가 있는지 알려 줍니다.
재현 가능한 백테스트가 실제로 입증하는 것은 무엇일까요?
같은 코드, 데이터, 설정, 난수 시드로 같은 거래와 지표가 나오면 중요한 혼란 요인 하나를 통제한 것입니다. 에이전트의 ‘개선’을 이전 실행과 비교할 수 있습니다. 버그 수정과 수수료 일정 변경을 구분할 수 있습니다. 동료가 같은 거래 원장을 살펴보고 동일한 체결을 확인할 수 있습니다.
하지만 결과는 고정한 모든 조건에 종속됩니다. 과거 데이터 파일에 1분봉이 들어 있는 암호화폐 전략을 생각해 보세요. 파일 해시를 저장하고 코드를 고정한 뒤, 매번 다시 실행할 때마다 Sharpe 1.4를 얻습니다. 이후 데이터 공급업체가 여러 캔들 데이터를 수정하더라도, 그 깔끔한 재현성은 여전히 예전 파일에 대한 설명일 뿐입니다. 신호가 수정된 과거 데이터에서도 유효한지, 혹은 당시에도 그 캔들 데이터가 지금과 같은 형태로 제공됐는지는 알려 주지 않습니다.
해시는 유용합니다. 의존성을 드러내기 때문입니다. 하지만 그 의존성이 무해하다는 증거는 아닙니다.
실행은 고정하고, 발견을 검증하세요
저는 두 가지 질문을 나눠 생각합니다. 이 실행을 정확히 재구성할 수 있는가? 그리고 연구의 결론이 합리적인 변경에도 유지되는가? 첫 번째에는 변경할 수 없는 기록이 필요하고, 두 번째에는 한 번에 하나씩 통제된 교란을 가해야 합니다.
| 기록할 항목 | 이후에 바꿔 볼 항목 | 드러날 수 있는 점 |
|---|---|---|
| 원시 데이터 버전과 체크섬 | 공급업체의 수정 내역 또는 두 번째 데이터 출처 | 수정값 또는 특정 공급업체 값에 대한 의존성 |
| 코드 커밋과 패키지 버전 | 수치적으로 동등한 구현 | 연산 순서, 반올림 또는 라이브러리에 대한 민감도 |
| 수수료, 펀딩, 체결 가정 | 타당한 비용 범위 | 근소한 엣지가 유난히 유리한 체결에 기대는지 여부 |
| 유니버스와 시점별 편입 종목 | 대체 가능한 시장 적격성 규칙 | 편입 또는 제외 결정에 대한 의존성 |
예를 들어, 선물 전략이 기준 리플레이에서 연율화 초과 수익률 8%를 보인다고 가정해 보세요. taker 비용을 25% 높이고, 펀딩을 다음 관측 정산 시점으로 옮기고, 기여도가 가장 큰 두 종목을 각각 제외해 다시 실행합니다. 이는 모델을 개선하는 세 가지 방법이 아닙니다. 각각 그럴듯한 세부 조건 하나가 대표 성과를 떠받치는지 묻는 검증입니다.
각 검증은 따로 진행하세요. 데이터, 수수료 일정, 체결 시점을 한꺼번에 바꾸면 결과가 나빠져도 원인을 파악하기 어렵습니다. 그리고 검증 조건이 현실적이지 않다면 예상 결과처럼 제시하지 말고 스트레스 시나리오라고 표시하세요.
바이트 단위의 동일성을 수치적 진실로 착각하지 마세요
일부 계산은 연산 순서에 민감합니다. 부동소수점 덧셈은 결합법칙이 성립하지 않으므로, 작은 P&L 값을 다른 순서로 합산하면 마지막 몇 자리 값이 달라질 수 있습니다. 병렬 합산, 하드웨어, 라이브러리 버전도 정확한 출력값에 영향을 줄 수 있습니다. 대개는 문제가 없지만, 때로는 미세한 수치 변화가 임곗값을 넘기고 포지션을 바꿔 시뮬레이션의 나머지 흐름까지 달라지게 합니다.
그래서 정확한 산출물과 비교 허용 오차를 모두 보존해야 합니다. 최종 Sharpe만이 아니라 거래 원장도 기록하세요. 먼저 의사결정과 현금 흐름을 비교하고, 그다음 명시된 허용 오차 안에서 지표를 비교하세요. 1센트 차이로 주문 제출 여부가 달라진다면 그 경계를 명시적으로 살펴보세요.
유용한 실행 기록에는 데이터와 코드 식별 정보, 설정, 난수 시드, 실행 환경, 그리고 지표에서 체결과 현금 흐름까지 추적할 수 있는 충분한 중간 출력이 포함됩니다. 최종 점수만으로는 재현 가능한 연구 산출물이라 할 수 없습니다.
변동이 잡음일 때와 발견일 때
숫자가 달라졌다고 해서 매번 문제가 되는 것은 아닙니다. 합산 순서가 달라져 지표가 조금 움직여도 거래는 그대로일 수 있습니다. 임곗값에 가까운 거래가 바뀌었다면 검토할 가치가 있습니다. 공급업체가 과거 데이터의 작은 구간을 수정했을 때 전략 성과 대부분이 사라진다면, 원래 실행이 완벽하게 재현 가능하더라도 전략의 취약성에 관해 중요한 사실을 알아낸 것입니다.
강건성 검증을 비판하는 사람들이 한 가지는 옳습니다. 선호하는 전략이 견고해 보일 때까지 가정을 계속 바꾸거나, 일부러 극단적인 시나리오에서 결과가 무너진다는 이유로 타당한 결과를 기각하기 쉽습니다. 그럴듯한 변경 사항을 미리 정하고, 전체 결과를 보고하며, 일반적인 대안과 스트레스 시나리오를 구분하세요. 그런 다음 기준 실행을 보존해 다른 연구자가 여러분이 본 결과를 정확히 재현할 수 있게 하세요.
재현성은 믿을 만한 출발점을 제공합니다. 다음으로 물어야 할 유용한 질문은 이것입니다. 실행을 둘러싼 환경이 합리적으로 예상할 수 있는 방식으로 바뀌어도 답의 어떤 부분이 유지될까요?
← 전체 글


