백테스트 과적합 방지: Walk-forward vs Purged K-Fold 비교
퀀트 전략 개발에서 가장 중요한 문제 중 하나는 과적합 방지입니다. Walk-forward 분석과 Purged K-Fold 교차 검증을 비교하고, 각 방법의 장단점과 실무 적용 방안을 제시합니다.
백테스트 과적합의 위험
퀀트 트레이딩 전략을 개발할 때 가장 흔한 함정은 **과적합(Overfitting)**입니다. 과적합된 전략은 과거 데이터에서는 높은 수익률을 보이지만, 실제 미래 데이터에서는 성능이 급격히 저하됩니다. 이는 전략이 데이터의 노이즈까지 학습했기 때문입니다.
과적합을 방지하기 위한 대표적인 두 가지 방법인 Walk-forward 분석과 Purged K-Fold 교차 검증을 비교해보겠습니다.
Walk-forward 분석
개념
Walk-forward 분석은 가장 현실적인 백테스팅 방법 중 하나입니다. 시간 순서대로 데이터를 나누어, 과거 데이터로 전략을 학습(Training)하고, 이후 데이터로 테스트(Testing)하는 과정을 반복합니다.
방법
- 초기 학습 기간: 처음 N개월 데이터로 전략 파라미터 최적화
- 테스트 기간: 다음 M개월 데이터로 성능 검증
- 롤링: 학습 기간을 M개월만큼 이동하여 반복
장점
- 현실성: 실제 트레이딩 환경과 유사
- 시간적 일관성: 미래 데이터 누수 방지
- 안정성: 여러 기간에 걸친 검증
단점
- 데이터 소모: 많은 데이터가 필요
- 계산 비용: 반복적인 학습/테스트
- 최적화 제한: 모든 파라미터 공간 탐색 어려움
# Walk-forward 예시
for i in range(train_periods):
train_data = data[i:i+train_size]
test_data = data[i+train_size:i+train_size+test_size]
model.fit(train_data)
predictions = model.predict(test_data)
results.append(evaluate(predictions))
Purged K-Fold 교차 검증
개념
Purged K-Fold는 기존 K-Fold 교차 검증에 **시간적 격리(Purging)**와 **임베딩(Embargo)**을 추가한 방법입니다. 금융 시계열 데이터의 특성상 미래 정보가 현재로 누수되는 것을 방지합니다.
방법
- K개 폴드로 분할: 전체 데이터를 K개로 나눔
- Purging: 학습 데이터와 테스트 데이터 사이에 겹치는 기간 제거
- Embargo: 테스트 데이터 이후 일정 기간 학습에서 제외
- 교차 검증: 각 폴드를 테스트로, 나머지를 학습으로 사용
장점
- 효율성: 데이터 활용도 높음
- 통계적 검증: 여러 검증 세트 제공
- 과적합 탐지: 다양한 데이터 조합에서 검증
단점
- 복잡성: 구현이 복잡
- 파라미터 의존: Purging 기간 선택에 민감
- 비독립성: 금융 데이터의 자기상관 문제
# Purged K-Fold 예시
from sklearn.model_selection import KFold
kf = KFold(n_splits=5)
for train_idx, test_idx in kf.split(X):
# Purging: 테스트 데이터 전후 기간 제거
purged_train_idx = purge(train_idx, test_idx, gap=5)
X_train, X_test = X[purged_train_idx], X[test_idx]
y_train, y_test = y[purged_train_idx], y[test_idx]
model.fit(X_train, y_train)
score = model.score(X_test, y_test)
비교 및 선택 가이드
| 특징 | Walk-forward | Purged K-Fold |
|---|---|---|
| 데이터 효율성 | 낮음 | 높음 |
| 현실성 | 높음 | 중간 |
| 계산 비용 | 높음 | 중간 |
| 구현 복잡도 | 낮음 | 높음 |
| 시간적 일관성 | 우수 | 보통 |
선택 기준
Walk-forward를 선택하는 경우:
- 충분한 양의 시계열 데이터가 있는 경우
- 실제 트레이딩 환경과 유사한 검증이 필요한 경우
- 전략의 시간적 안정성이 중요한 경우
Purged K-Fold를 선택하는 경우:
- 제한된 데이터로 효율적인 검증이 필요한 경우
- 하이퍼파라미터 튜닝이 많이 필요한 경우
- 다양한 시장 상황에서의 검증이 필요한 경우
실무 적용 팁
1. Combine Both Approaches
가능하다면 두 방법을 모두 사용하세요:
- Purged K-Fold로 초기 파라미터 스크리닝
- Walk-forward로 최종 검증
2. 주의사항
- Look-ahead bias: 미래 정보 사용 금지
- Survivorship bias: 생존 편향 주의
- Transaction costs: 거래 비용 반영
- Slippage: 시장 충격 반영
3. 검증 체크리스트
- 아웃오브샘플 성능이 인샘플과 유사한가?
- 여러 시장 상황에서 안정적인가?
- 파라미터 감도가 낮은가?
- 거래 비용을 반영해도 수익성이 있는가?
결론
과적합 방지는 퀀트 전략 개발의 핵심입니다. Walk-forward는 현실성에 중점을 두고, Purged K-Fold는 효율성과 통계적 검증에 중점을 둡니다. 데이터 양과 전략의 특성에 따라 적절한 방법을 선택하거나, 두 방법을 결합하여 사용하세요.
핵심 원칙: “과거에도, 현재에도, 미래에도 작동하는 전략을 찾아라”