河
헤지나루
홈랩알림더보기
홈랩알림더보기
Strategy Validation · 리서치 노트

config_F_no_profitability, OOS Sharpe 1.69 로 최상위 — 하지만 채택 관문은 모두 폐쇄

17개 composite config 를 walk-forward 로 재검증한 리포트.

composite_experiment e9a871a4
TL;DR
  • 1.우리는 17개 composite config 를 walk-forward 로 검증했다. 최강 config 는 config_F_no_profitability (F. [ablation] profitability 제거 — yield(4) + momentum(5) (JEF-95)) 로, OOS Sharpe 중앙값 1.69 를 기록했다.
  • 2.OOS CAGR 중앙값 53.3%, MDD 중앙값 -18.2%, 양수 fold 비율 57%.
  • 3.Composite config 17개 모두 채택 기준 미통과. 가장 근접한 것은 config_F_no_profitability 로 DSR 1.00 · PBO 0.17.

01우리가 묻는 것

우리는 Factor Intelligence에서 개별 팩터의 품질을 진단한다. 그러나 “예측력이 강한 팩터” 가 곧 “실제로 돈이 되는 전략” 을 의미하지는 않는다. 팩터들을 어떻게 조합하는가, 어떤 기간으로 학습 · 검증하는가, 거래비용을 넣었을 때도 살아남는가에 따라 성과는 크게 달라진다.

이번 리포트는 위 세 가지 질문에 답하기 위해 17개의 계층적 composite config 를 walk-forward 프레임워크로 재검증한 결과다. 우리가 답하려는 것은 다음 세 가지다.

  1. 학습 구간(In-Sample)에서 어떤 조합이 가장 강했는가?
  2. 그 강함이 검증 구간(Out-of-Sample)에서도 유지되었는가? — 즉 과적합이 아닌가?
  3. 그래서 우리가 실제 운용에 채택할 전략이 있는가?

02실험 설계

우리는 다음 구조로 실험을 설계했다. 파라미터는 연구 노트 전체에 걸쳐 동일하게 적용되며, 개별 실험마다 달라지는 것은 팩터 조합과 합성 방식뿐이다.

Walk-Forward Spec
팩터 조합
value_4 / value_6 / value_momentum / value_quality / momentum
정규화
zscore · rank
합성 방식
equal_weight · icir_weight · ridge · elastic_net
학습 기간 (IS)
36 months rolling
검증 기간 (OOS)
12 months rolling
거래비용
30 bps (single-trip)
선택 편향 조정
DSR, n_strategies=1 (JEF-86 근거)
전략 수
17개 composite config

03Composite 접근 — 계층적 합성은 통했는가

실제 운용에서는 계층적(hierarchical) 합성이 유효할 때가 많다. 예를 들어 가치 팩터끼리 먼저 합쳐 “가치 점수” 를 만들고, 모멘텀 팩터끼리 먼저 합쳐 “모멘텀 점수” 를 만든 뒤 두 점수를 다시 합쳐 최종 스코어를 구성하는 방식이다.

우리는 17개의 composite config 를 동일한 walk-forward 로 검증했다. 각 config 의 판정은 OOS CAGR 중앙값 · OOS 승률 · PBO(과적합 확률 추정치) · DSR(선택 편향 조정 Sharpe) 네 가지 관문을 종합한다.

Direction policy warning

이번 composite run 은 JEF-117 direction policy 기준으로 90 개의 direction-inconsistent leaf factor 를 포함하고 있다 (IC 의 부호와 실제 top-bottom 수익률의 부호가 반대인 팩터). 아래 config 별 fold 결과는 여전히 유효하지만, 포함된 팩터 자체의 신뢰성을 유의해서 해석해야 한다.

  • config_1_flat: 6개 (ncav_ratio, net_income_to_price, net_income_ttm_to_price, operating_profit_to_price, operating_profit_ttm_to_price, volatility_3m)
  • config_2_hier_2: 6개 (ncav_ratio, net_income_to_price, net_income_ttm_to_price, operating_profit_to_price, operating_profit_ttm_to_price, volatility_3m)
  • config_3_hier_3: 6개 (ncav_ratio, net_income_to_price, net_income_ttm_to_price, operating_profit_to_price, operating_profit_ttm_to_price, volatility_3m)
  • config_4_rank_value: 6개 (ncav_ratio, net_income_to_price, net_income_ttm_to_price, operating_profit_to_price, operating_profit_ttm_to_price, volatility_3m)
  • config_5_ic_weighted: 6개 (ncav_ratio, net_income_to_price, net_income_ttm_to_price, operating_profit_to_price, operating_profit_ttm_to_price, volatility_3m)
  • config_6_ic_rank: 6개 (ncav_ratio, net_income_to_price, net_income_ttm_to_price, operating_profit_to_price, operating_profit_ttm_to_price, volatility_3m)
  • config_A_rank_sum: 6개 (ncav_ratio, net_income_to_price, net_income_ttm_to_price, operating_profit_to_price, operating_profit_ttm_to_price, volatility_3m)
  • config_B_geometric_mean: 6개 (ncav_ratio, net_income_to_price, net_income_ttm_to_price, operating_profit_to_price, operating_profit_ttm_to_price, volatility_3m)
  • config_C_min_rank: 6개 (ncav_ratio, net_income_to_price, net_income_ttm_to_price, operating_profit_to_price, operating_profit_ttm_to_price, volatility_3m)
  • config_D_dual_norm: 6개 (ncav_ratio, net_income_to_price, net_income_ttm_to_price, operating_profit_to_price, operating_profit_ttm_to_price, volatility_3m)
  • config_E_no_yield: 5개 (net_income_to_price, net_income_ttm_to_price, operating_profit_to_price, operating_profit_ttm_to_price, volatility_3m)
  • config_F_no_profitability: 2개 (ncav_ratio, volatility_3m)
  • config_G_no_momentum: 5개 (ncav_ratio, net_income_to_price, net_income_ttm_to_price, operating_profit_to_price, operating_profit_ttm_to_price)
  • config_H_flat_value_8: 5개 (ncav_ratio, net_income_to_price, net_income_ttm_to_price, operating_profit_to_price, operating_profit_ttm_to_price)
  • config_I_flat_momentum_5: 1개 (volatility_3m)
  • config_J_hier_4_clustered: 6개 (ncav_ratio, net_income_to_price, net_income_ttm_to_price, operating_profit_to_price, operating_profit_ttm_to_price, volatility_3m)
  • config_K_ic_group: 6개 (ncav_ratio, net_income_to_price, net_income_ttm_to_price, operating_profit_to_price, operating_profit_ttm_to_price, volatility_3m)
ConfigOOS SharpeOOS CAGRExcess EWIRWin%PBODSRDecision
config_1_flat
1. flat 13-factor (baseline)
1.1824.6%0.6%0.0371%0.500.99보류
config_2_hier_2
2. 계층 (value 8 / momentum+vol 5)
1.0725.8%-2.9%-0.2671%0.330.99보류
config_3_hier_3
3. 계층 (yield 4 / profitability 4 / momentum+vol 5)
1.2126.4%-0.4%-0.0271%0.330.99보류
config_4_rank_value
4. 계층 hier_3 + value rank / momentum zscore (JEF-87)
0.295.4%-0.6%-0.0471%0.500.79보류
config_5_ic_weighted
5. 계층 hier_3 + IC 가중 zscore (JEF-88)
1.0119.7%6.0%0.5471%0.500.98보류
config_6_ic_rank
6. 계층 hier_3 + IC 가중 + value rank (JEF-88)
-0.08-3.0%-16.4%-1.7043%1.000.42폐기
config_A_rank_sum
A. 계층 hier_3 + rank_sum (Borda count) (JEF-90)
0.051.9%-16.2%-1.4357%0.670.55보류
config_B_geometric_mean
B. 계층 hier_3 + geometric_mean (JEF-90)
-0.06-2.2%-18.1%-1.6743%1.000.44폐기
config_C_min_rank
C. 계층 hier_3 + min_rank (quality screen) (JEF-90)
0.062.0%-21.1%-1.5157%0.670.56보류
config_D_dual_norm
D. dual-norm 26 leaf (zscore+rank per factor) + IC 가중 + shrinkage (JEF-89)
0.9019.4%5.6%0.4971%1.000.97보류
config_E_no_yield
E. [ablation] yield 제거 — profitability(4) + momentum(5) (JEF-95)
-0.05-1.4%-15.1%-0.8843%0.500.45폐기
config_F_no_profitability
F. [ablation] profitability 제거 — yield(4) + momentum(5) (JEF-95)
1.6953.3%18.5%0.8857%0.171.00보류
config_G_no_momentum
G. [ablation] momentum 제거 — value only: yield(4) + profitability(4) (JEF-95)
1.2024.0%1.5%0.0771%0.500.99보류
config_H_flat_value_8
H. [baseline] flat 8 value factors (JEF-95)
0.9618.7%-3.2%-0.2671%0.500.99보류
config_I_flat_momentum_5
I. [baseline] flat 5 momentum/vol factors (JEF-95)
-0.22-9.1%-20.8%-0.7143%0.670.31폐기
config_J_hier_4_clustered
J. [grouping] 상관 클러스터 기반 4-그룹 계층 (JEF-95)
0.8719.9%-6.4%-0.2671%0.330.97보류
config_K_ic_group
K. [group-IC] hier_3 + leaf AND group 수준 IC 가중 (JEF-95)
1.2028.5%6.5%0.4671%0.500.99보류
Figure 1. Composite config 별 walk-forward 판정 (verdict · 주요 지표 · decision).

최상위 config 는 config_F_no_profitability (F. [ablation] profitability 제거 — yield(4) + momentum(5) (JEF-95)) 로, OOS Sharpe 중앙값 1.69. 아래는 fold 별 OOS CAGR 의 시계열이다 — fold 간 변동성이 크면 전략의 안정성을 의심해야 한다.

config_F_no_profitability — F. [ablation] profitability 제거 — yield(4) + momentum(5) (JEF-95)

Figure 2. config_F_no_profitability 의 fold 별 OOS CAGR 타임라인.

04결론 — 채택 / 보류 / 폐기

17개 config 를 관문 통과 여부에 따라 세 버킷으로 분류한다. 채택된 config 는 live priority report 에 등록 대상이며, 보류 config 는 추가 실험 또는 파라미터 튜닝 대상이다.

채택 (Adopt)
0
—
보류 (Hold)
13
  • config_1_flat
  • config_2_hier_2
  • config_3_hier_3
  • config_4_rank_value
  • config_5_ic_weighted
  • config_A_rank_sum
  • config_C_min_rank
  • config_D_dual_norm
  • config_F_no_profitability
  • config_G_no_momentum
  • config_H_flat_value_8
  • config_J_hier_4_clustered
  • config_K_ic_group
폐기 (Reject)
4
  • config_6_ic_rank
  • config_B_geometric_mean
  • config_E_no_yield
  • config_I_flat_momentum_5

이번 run 에서 우리는 채택 기준을 만족한 config 를 찾지 못했다. 가장 근접한 config_1_flat 는 OOS median 양(+)이나 조건 미충족: PBO=0.5, p25=-0.08423847955. 후속 작업은 파라미터 재조정 (거래비용 민감도 / 리밸런싱 주기 변경) 또는 팩터 shortlist 재검토가 유효할 수 있다.

Methodology & Sources

Walk-forward
36m IS / 12m OOS rolling
Transaction cost
30 bps single-trip
Selection bias
DSR with n_strategies=1 (JEF-86 근거)
Direction policy
JEF-117 warn mode (Pool A gate: direction_aligned=True 필수)
composite_experiment
e9a871a4-9442-4866-a199-20289f594402
재현 방법
dq3 backtest composite-experiment
가격 조정
액면분할 / 무상증자 (100%) / 감자 완전 보정. 유상증자 희석은 empirical bucket correction 적용 (JEF-153). 배당락 / 합병 / 상장폐지 잔여 왜곡 존재. KOSPI200_PR 기준 fair comparison 유지.