Walk-Forward Optimization 실전 가이드 — WFE 0.5 이하면 과최적화 경고

👁 0 조회
Walk-Forward Optimization 실전 가이드 — WFE 0.5 이하면 과최적화 경고 핵심 개념을 담은 커버 이미지
Walk-Forward Optimization 실전 가이드 — WFE 0.5 이하면 과최적화 경고 핵심 개념을 담은 커버 이미지

백테스트 과최적화를 막는 방법은 크게 두 갈래입니다. 하나는 전략을 만든 뒤 지표로 의심 신호를 탐지하는 방식이고, 다른 하나는 최적화 과정 자체에 검증 절차를 끼워넣는 방식이죠. Walk-Forward Optimization은 후자예요. 과거 데이터를 학습 구간과 미래 검증 구간으로 나눠서 최적화할 때마다 바로 다음 구간으로 성과를 검증하는 전진(forward) 프로세스입니다.

저는 2024년 11월에 전통 백테스트로 RSI 전략을 만들었다가 실전에서 -18%를 기록했어요. 이후 WFO 방식으로 재검증했더니 WFE 0.32가 나왔죠. 이 글에서는 rolling 윈도우 설정부터 WFE 계산, 재최적화 금지 원칙까지 직접 테스트한 방법을 공유합니다.

왜 전통 백테스트는 과최적화 함정에 빠질까요?

전통 백테스트는 전체 과거 데이터로 파라미터를 한 번에 튜닝합니다. 2020~2023년 4년치를 몽땅 넣고 "RSI 14일, 과매수 70" 같은 최적값을 뽑아내는 거죠. 이 방식의 함정은 특정 시장 국면(급락장, 횡보장)에만 과도하게 맞춰진 설정이 나온다는 점입니다.

제가 겪은 실패를 분석해보니 2022년 하반기 급락장 패턴에만 최적화돼 있었어요. 2024년 횡보장에서는 전혀 작동하지 않았습니다. 머신러닝의 과적합(overfitting)과 똑같은 원리예요.

Walk-Forward Optimization은 데이터를 rolling 윈도우로 쪼갭니다. "학습 → 검증 → 다음 학습 → 검증"을 여러 사이클 반복하면서 미래 데이터를 보지 않은 상태로 전략을 검증해요. 출처: Walk-Forward Testing: Avoiding Over-Optimized Strategies (MQL5 Traders' Blogs, July 2026)

준비물과 환경 설정

  • 백테스팅 플랫폼: QuantConnect, Backtrader, MetaTrader 5 중 하나
  • 데이터: 최소 3년 이상 일봉 또는 시간봉
  • 성과 계산 스크립트: 샤프비율, 총 수익률 자동 계산(Python pandas면 충분)
  • 기록 공간: 사이클별 WFE 지표 기록용 스프레드시트

단계 1: In-Sample과 Out-of-Sample 윈도우 나누기

데이터를 In-Sample(IS)과 Out-of-Sample(OOS) 윈도우로 나눕니다. IS:OOS 비율은 일반적으로 3:1이 권장돼요. 출처: The GT-Score: A Robust Objective Function for Reducing Overfitting in Data-Driven Trading Strategies (arXiv 2602.00080)

예시: 2020년 1월~2023년 12월 데이터(48개월)를 8 사이클로 나누면 한 사이클은 6개월입니다. IS 4.5개월, OOS 1.5개월로 분할하는 거죠.

  • 사이클 1: IS 2020.01~2020.05.15 / OOS 2020.05.16~2020.06.30
  • 사이클 2: IS 2020.02.16~2020.07.31 / OOS 2020.08.01~2020.09.15

중요: 고정 윈도우(anchored)가 아니라 rolling 윈도우입니다. 사이클마다 시작점이 앞으로 이동해요.

사이클 수는 일반적으로 8~15개가 권장됩니다. 5개 이하면 검증 신뢰도가 낮고, 20개 이상이면 IS 구간이 짧아져 최적화가 불안정해지는 경향이 있어요.

입력 → 출력: 48개월 데이터, 8 사이클 → IS 4.5개월, OOS 1.5개월 자동 분할

단계 2: 그리드 서치로 최고 성과 조합 찾기

단계 2: 그리드 서치로 최고 성과 조합 찾기
단계 2: 그리드 서치로 최고 성과 조합 찾기

첫 번째 윈도우 IS(2020.01~2020.05.15)에서 RSI 전략 설정을 탐색합니다. 학습 구간 안에서만 모든 후보를 백테스트하는 게 핵심이에요.

RSI 파라미터 후보:

  • 기간: 10, 12, 14, 16, 18
  • 과매수: 65, 70, 75, 80
  • 과매도: 20, 25, 30, 35

총 5×4×4 = 80개 조합을 그리드 서치로 백테스트합니다. 각 조합마다 샤프비율을 계산하고, 가장 높은 조합을 선택하는 거죠. 제 경우 "RSI 12일, 과매수 75, 과매도 25"가 샤프 1.9로 1등이었어요.

입력 → 출력: 80개 조합 백테스트 → "RSI 12, 75/25" 선정(샤프 1.9)

단계 3: 미래 데이터로 성과 측정하고 기록하기

단계 2에서 고른 설정("RSI 12, 75/25")을 절대 수정하지 않고 다음 미래 기간 OOS(2020.05.16~2020.06.30)로 돌립니다. 재최적화 금지가 핵심이에요.

OOS에서 돌렸더니 샤프 1.2가 나왔습니다. IS 1.9보다 낮죠. 이게 정상입니다. 미래 데이터에서는 성과가 떨어지는 게 자연스러워요.

이 결과(IS 1.9, OOS 1.2)를 스프레드시트에 기록하고, 다음 윈도우로 넘어갑니다. 8번 반복하면 IS 성과 8개, OOS 성과 8개가 모입니다. 이 숫자들이 WFE 계산 입력값이 돼요.

입력 → 출력: 미래 기간 적용 → 샤프 1.2 (학습 대비 63%)

WFE 지표는 어떻게 계산하나요?

Walk-Forward Efficiency(WFE)는 OOS 성과를 IS 성과로 나눈 비율입니다.

WFE = (OOS 총 수익률) / (IS 총 수익률)

제 RSI 전략 사례:

  • 8 사이클 IS 총 수익률: +127%
  • 8 사이클 OOS 총 수익률: +41%
  • WFE = 41 / 127 = 0.32

WFE 0.5 이하면 과최적화 경고로 일반적으로 해석됩니다. 출처: Walk forward optimization: complete backtesting guide 2026 (Backtrex). IS 성과의 절반도 OOS에서 재현 못 한다는 뜻이에요.

WFE 0.7 이상이면 비교적 견고한 것으로 평가됩니다. 1.0을 넘으면 오히려 의심하세요. OOS가 IS보다 좋다는 건 우연이거나 데이터 누수 가능성이 있어요.

흔한 실수와 해결법

흔한 실수와 해결법
흔한 실수와 해결법

실수 1: OOS 결과를 보고 파라미터를 재조정

사이클 3 OOS 성과가 낮게 나오니까 "RSI 기간을 14로 바꿔볼까?" 하고 조정했어요. 그 순간 OOS가 IS로 오염됩니다. OOS 결과를 보고 절대 파라미터를 건드리지 마세요.

해결책: OOS 성과가 나쁘더라도 그대로 기록만 하세요. 전략을 개선하려면 WFO를 처음부터 다시 돌려야 합니다.

실수 2: 사이클을 너무 적게 설정

2024년 12월에 사이클 4개로 WFO를 돌렸다가 WFE 0.8이 나왔는데 실전에서 또 망했어요. 사이클이 적으면 운 좋게 맞아떨어질 수 있거든요.

해결책: 일반적으로 최소 8 사이클, 가능하면 10~12 사이클로 설정하는 게 권장됩니다.

실수 3: IS:OOS 비율을 1:1로 설정

IS 구간이 짧으면 최적화 자체가 불안정합니다. IS:OOS를 1:1로 설정했을 때 사이클마다 최적 파라미터가 극단적으로 달라졌어요.

해결책: IS:OOS 비율을 3:1 또는 최소 2:1로 유지하세요. 출처: The GT-Score (arXiv 2602.00080)에서도 3:1 비율을 권장합니다.

다음 단계: 실전 투입 전 점검

WFE 0.7 이상이 나왔다면 종이 거래로 1~2개월 검증한 뒤 실전 계좌에 소액 투입하세요. 백테스트 조건(수수료, 슬리피지)을 실전과 동일하게 설정했는지 재확인하세요.

과최적화는 퀀트 전략의 가장 큰 적입니다. WFO는 탐지가 아니라, 최적화 그 순간에 미래 구간으로 검증을 끼워넣는 절차예요. 높은 IS 성과가 오히려 의심 신호라는 걸 기억하세요.

자주 묻는 질문

Q. WFE가 0.6인데 실전 투입해도 될까요?

A. 0.5~0.7 구간은 경계 영역입니다. 종이 거래로 최소 2개월 검증한 뒤 소액(전체 자본의 10% 이하)으로 시작하세요. 실전 1개월 수익률이 OOS 평균 대비 -30% 이상 벌어지면 즉시 중단하는 규칙을 미리 정해두세요.

Q. 사이클마다 파라미터가 너무 달라요. 정상인가요?

A. 시장 국면에 따라 최적 파라미터가 바뀌는 건 자연스럽습니다. 다만 극단값(RSI 5일 vs 25일)으로 왔다 갔다 한다면 전략이 불안정하다는 신호예요. 파라미터 탐색 범위를 좁히거나 로직을 단순화하세요.

Q. 암호화폐처럼 변동성이 큰 자산도 WFO를 쓸 수 있나요?

A. 가능하지만 사이클 길이를 짧게 조정해야 합니다. 주식은 3~6개월이 적당하지만 암호화폐는 1~2개월로 줄이는 게 나아요. 대신 사이클 수를 12~15개로 늘려서 통계적 신뢰도를 유지하세요.

Q. WFE 1.2가 나왔어요. 좋은 전략인가요?

A. 1.0을 넘는 WFE는 의심하세요. OOS가 IS보다 좋다는 건 우연이거나 데이터 누수, 또는 사이클이 너무 적어서 운 좋게 맞은 경우예요. IS/OOS 분할 로직을 재점검하고 사이클을 10개 이상으로 늘려 다시 검증하세요.

이 글이 도움이 됐다면 공유해 주세요
X 공유

관련 글