앞선 글에서 백테스트 성과 지표와 다섯 가지 함정 중 하나로 과적합을 짚었지만, 과적합을 어떻게 정량적으로 검증할지는 미뤄두었다. 자매편으로 다룬 효율적 프론티어 최적화 역시 입력 μ, Σ 추정 오차가 결과를 지배하므로 OOS 안정성 검증이 필수다.

Walk-forward 분석은 시간을 따라 훈련-검증 구간을 반복적으로 적용해 IS(In-Sample)와 OOS(Out-of-Sample) 성과의 차이, 파라미터 안정성을 정량화한다.

단일 백테스트의 함정

같은 데이터로 파라미터를 탐색하면 IS 성과는 거의 항상 좋아진다. 시그널 후보, lookback, 임계값을 충분히 시도하면 우연히 잘 맞는 조합이 나오기 때문이다. 이 현상이 data snooping이다. IS 결과만 보고 실전에 배치하면 OOS에서 무너진다.

해법으로 떠올리기 쉬운 방식이 train/test split이다. 데이터를 시간순으로 한 번 자르고 train 구간에서 파라미터를 정한 뒤 test 구간에서 성과를 본다. 하지만 시계열에서는 무작위 셔플을 못 한다. 미래를 보지 않아야 한다는 제약(look-ahead bias) 때문이다. 시간순 한 번 절단은 그 절단점이 좋은 시기였는지 나쁜 시기였는지에 따라 결과가 크게 흔들린다. 단일 split의 OOS 결과는 분산이 크고 시기에 의존적이다.

Walk-forward의 구조

Walk-forward는 train-test 쌍을 여러 번 만든다. 시간을 따라 슬라이드시키면서 fold마다 train으로 파라미터를 정하고 test로 성과를 측정한다.

|---- train ----|-test-|
        |---- train ----|-test-|
                |---- train ----|-test-|
                        |---- train ----|-test-|

같은 데이터 위에서 여러 OOS 표본을 얻을 수 있고, 그 분포로 전략의 안정성을 판단한다.

Anchored 방식은 train 시작점을 고정하고 끝점만 확장한다. 시간이 갈수록 train이 길어져 더 많은 과거 정보를 활용한다. 과거 모든 정보가 미래에도 유효하다는 가정에 가깝다.

Rolling 방식은 train 윈도 크기를 고정하고 윈도를 시간 축으로 슬라이드한다. 항상 최근 N년만 사용하므로 시장 구조 변화(regime change)에 적응한다. 오래된 정보는 노이즈라는 가정이다.

어느 쪽이 맞는지는 자산군과 시장 구조에 따라 다르다. 주식 인덱스에는 anchored가 자주 쓰이고, 거시 환경에 민감한 자산이나 파생 전략에는 rolling이 자주 쓰인다.

무엇을 측정하나

fold 단위로 측정한 OOS 성과를 모아서 전체 분포를 본다.

  • 각 fold의 OOS 성과 — fold별 CAGR, Sharpe Ratio, MDD
  • IS-OOS 성과 차이 — IS Sharpe와 OOS Sharpe의 차이. IS 1.5, OOS 0.3이면 1.2 차이로 심한 과적합 신호다. IS 1.0, OOS 0.8이면 안정적인 전략에 가깝다.
  • 파라미터 안정성 — fold마다 선택된 최적 파라미터가 비슷한가. fold마다 다른 lookback이 선택되면 신호 자체가 불안정하다.
  • OOS 분포 — 평균뿐 아니라 fold별 분산과 최악 fold의 손실. 평균은 좋아도 최악 fold가 -40%면 실전 운용은 어렵다.

단일 숫자보다 분포로 판단한다. fold마다 OOS Sharpe가 0.5 근처에서 안정적으로 모이는 전략이, 평균 1.0이지만 fold 분산이 큰 전략보다 신뢰할 만한 경우가 많다.

케이스: 모멘텀 lookback 튜닝

모멘텀 전략의 lookback 후보를 3개월, 6개월, 12개월로 두자. 단일 백테스트로 전체 기간을 돌리면 평균 Sharpe Ratio가 6개월에서 가장 높게 나올 수 있다. 결론은 “6개월이 우승"이 된다.

Walk-forward로 같은 데이터를 보면 다른 그림이 나온다. fold가 10개라면 fold마다 우승한 lookback이 어떻게 분포하는지를 본다.

  • 6개월이 7번 우승했다면 안정적인 신호다
  • 3개월이 4번, 6개월이 4번, 12개월이 2번이면 lookback에 안정적인 신호가 없다
  • 전반기 5개 fold에서는 12개월, 후반기 5개 fold에서는 3개월이 우승했다면 regime change 신호다

같은 백테스트 데이터인데도 단일 결과는 “6개월 우승"이라는 결정으로 끝나고, Walk-forward는 그 결정의 안정성까지 정량화한다.

한계

Walk-forward도 만능 검증은 아니다.

  • 계산 비용 — fold 수 × 파라미터 격자가 빠르게 폭발한다. fold 10개에 lookback 후보 10개면 백테스트 100회를 돌려야 한다.
  • 짧은 시계열 — 10년 미만 데이터에서는 fold 수가 부족하다. 5년 데이터에 fold 5개를 두면 각 fold의 train 구간이 짧아 파라미터 추정 자체가 흔들린다.
  • Survivorship bias는 그대로 — Walk-forward는 시간 분할만 다룬다. 상장폐지 종목이 데이터에서 빠져 있으면 fold마다 같은 편향이 적용된다.
  • Regime change와의 구분 모호 — train과 test의 시장 구조가 다르면 OOS 저조가 과적합 때문인지 regime change 때문인지 구분이 어렵다.
  • 진짜 OOS는 여전히 미래 — 같은 데이터셋 안에서의 OOS는 결국 사후적 분할이다. 진정한 의미의 OOS는 라이브 운용에서의 새로운 데이터뿐이다.

한 단계 더 정교한 방법으로 Combinatorial Purged Cross-Validation이 있다. López de Prado가 제안한 방식으로, 시간순 fold가 아니라 가능한 train-test 조합을 만들되 경계의 정보 leakage를 purge한다. 통계적 검정력은 높지만 구현 복잡도와 계산 비용도 함께 높다.


Walk-forward는 백테스트 결과의 신뢰도를 정량화하는 도구다. IS-OOS 성과 차이가 작고 fold별 파라미터가 안정적일 때 비로소 “운이 아니다"라고 말할 수 있다.

자매편으로 다룬 효율적 프론티어 최적화도 같은 검증이 필요하다. 마코위츠 모델은 입력 μ, Σ 추정에 민감한데, Walk-forward로 fold마다 입력을 다시 추정하고 결과 비중과 OOS 성과를 본다. 입력이 fold마다 흔들리면 결과 비중도 흔들리고 OOS 성과도 흔들린다.

참고 자료