워크포워드 분석(Walk-Forward Analysis)은 학습(In-Sample) 구간과 검증(Out-of-Sample) 구간을 시간순으로 분리하여 투자 전략의 견고성을 평가하는 고급 백테스팅 기법입니다. 과적합을 방지하고 전략이 미지의 데이터에서도 유효한지 검증합니다.
워크포워드 분석의 구조
핵심 원리는 과거 데이터의 일정 구간을 학습에 사용하여 최적 파라미터를 도출하고, 그 직후의 구간에서 해당 파라미터로 성과를 검증하는 것입니다. 이 과정을 시간축을 따라 반복하며 전체 기간에 대한 성과를 누적합니다.
워크포워드 분석 구간 설정 예시
| 구간 | 학습(In-Sample) | 검증(Out-of-Sample) | 비율 |
|---|---|---|---|
| 1차 | 2010~2014 (5년) | 2015 (1년) | 83:17 |
| 2차 | 2011~2015 (5년) | 2016 (1년) | 83:17 |
| 3차 | 2012~2016 (5년) | 2017 (1년) | 83:17 |
| 4차 | 2013~2017 (5년) | 2018 (1년) | 83:17 |
| 5차 | 2014~2018 (5년) | 2019 (1년) | 83:17 |
| 6차 | 2015~2019 (5년) | 2020 (1년) | 83:17 |
파이썬을 활용한 워크포워드 분석
import numpy as np
import pandas as pd
def walk_forward_analysis(
data, strategy_func, train_years=5, test_years=1,
param_grid=None
):
if param_grid is None:
param_grid = {'lookback': [3, 6, 9, 12]}
results = []
years = sorted(data['year'].unique())
train_len = train_years
test_len = test_years
for start_idx in range(len(years) - train_len):
train_years_list = years[start_idx:start_idx + train_len]
test_year = years[start_idx + train_len] \
if start_idx + train_len < len(years) else None
if test_year is None:
break
train_data = data[data['year'].isin(train_years_list)]
test_data = data[data['year'] == test_year]
# 학습 구간에서 최적 파라미터 탐색
best_param = None
best_sharpe = -np.inf
for param_value in param_grid['lookback']:
sharpe = strategy_func(train_data, lookback=param_value)
if sharpe > best_sharpe:
best_sharpe = sharpe
best_param = param_value
# 검증 구간에서 최적 파라미터로 성과 측정
test_sharpe = strategy_func(test_data, lookback=best_param)
is_return = strategy_func(train_data, lookback=best_param,
metric='return')
results.append({
'test_year': test_year,
'best_param': best_param,
'is_sharpe': best_sharpe,
'oos_sharpe': test_sharpe,
'is_return': is_return
})
df_results = pd.DataFrame(results)
wfe = df_results['oos_sharpe'].mean() / df_results['is_sharpe'].mean()
print(f"워크포워드 효율비(WFE): {wfe:.1%}")
print(f"평균 OOS 샤프: {df_results['oos_sharpe'].mean():.3f}")
return df_results
print("워크포워드 분석 완료")
워크포워드 효율비(WFE) 해석 기준
| WFE 범위 | 평가 | 의미 | 조치 |
|---|---|---|---|
| > 80% | 우수 | 전략이 매우 견고 | 실전 적용 고려 |
| 50~80% | 양호 | 실용적 수준 | 소규모 실전 테스트 |
| 30~50% | 보통 | 과적합 의심 | 전략 단순화 필요 |
| < 30% | 미흡 | 심각한 과적합 | 전략 재설계 필요 |
| < 0% | 실패 | 전략 무효 | 완전 재검토 |
핵심 정리
- 워크포워드 분석은 학습과 검증 구간을 시간순 분리하여 과적합을 방지하는 고급 검증 기법입니다
- 학습 구간에서 최적화한 파라미터를 검증 구간에 적용하여 전략의 견고성을 평가합니다
- 워크포워드 효율비(WFE) 50% 이상이면 전략이 실용적 수준의 안정성을 갖춘 것으로 평가합니다
- 학습과 검증 구간의 비율은 전략의 특성과 데이터 가용성에 따라 조정합니다
- 고정 구간뿐 아니라 확장 창(Expanding Window)과 이동 창(Rolling Window) 방식도 활용할 수 있습니다
- WFE가 낮게 나오면 파라미터 수를 줄이거나 전략 로직을 단순화하는 것이 필요합니다
- 워크포워드 분석을 통과한 전략도 시장 구조 변화에 대비한 모니터링이 지속 필요합니다
면책 조항
본 글은 투자 교육 목적으로 작성되었으며, 특정 투자 전략이나 매매 기법을 추천하는 것이 아닙니다. 워크포워드 분석 결과는 과거 데이터 기반이며 미래 수익을 보장하지 않습니다. 실제 투자 시에는 전문가의 조언을 구하고 본인의 상황을 고려하여 신중하게 결정하시기 바랍니다.