config_F_no_profitability, OOS Sharpe 1.69 로 최상위 — 하지만 채택 관문은 모두 폐쇄
17개 composite config 를 walk-forward 로 재검증한 리포트.
01우리가 묻는 것
우리는 Factor Intelligence에서 개별 팩터의 품질을 진단한다. 그러나 “예측력이 강한 팩터” 가 곧 “실제로 돈이 되는 전략” 을 의미하지는 않는다. 팩터들을 어떻게 조합하는가, 어떤 기간으로 학습 · 검증하는가, 거래비용을 넣었을 때도 살아남는가에 따라 성과는 크게 달라진다.
이번 리포트는 위 세 가지 질문에 답하기 위해 17개의 계층적 composite config 를 walk-forward 프레임워크로 재검증한 결과다. 우리가 답하려는 것은 다음 세 가지다.
- 학습 구간(In-Sample)에서 어떤 조합이 가장 강했는가?
- 그 강함이 검증 구간(Out-of-Sample)에서도 유지되었는가? — 즉 과적합이 아닌가?
- 그래서 우리가 실제 운용에 채택할 전략이 있는가?
02실험 설계
우리는 다음 구조로 실험을 설계했다. 파라미터는 연구 노트 전체에 걸쳐 동일하게 적용되며, 개별 실험마다 달라지는 것은 팩터 조합과 합성 방식뿐이다.
- 팩터 조합
- 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) 네 가지 관문을 종합한다.
이번 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)
| Config | OOS Sharpe | OOS CAGR | Excess EW | IR | Win% | PBO | DSR | Decision |
|---|---|---|---|---|---|---|---|---|
config_1_flat 1. flat 13-factor (baseline) | 1.18 | 24.6% | 0.6% | 0.03 | 71% | 0.50 | 0.99 | 보류 |
config_2_hier_2 2. 계층 (value 8 / momentum+vol 5) | 1.07 | 25.8% | -2.9% | -0.26 | 71% | 0.33 | 0.99 | 보류 |
config_3_hier_3 3. 계층 (yield 4 / profitability 4 / momentum+vol 5) | 1.21 | 26.4% | -0.4% | -0.02 | 71% | 0.33 | 0.99 | 보류 |
config_4_rank_value 4. 계층 hier_3 + value rank / momentum zscore (JEF-87) | 0.29 | 5.4% | -0.6% | -0.04 | 71% | 0.50 | 0.79 | 보류 |
config_5_ic_weighted 5. 계층 hier_3 + IC 가중 zscore (JEF-88) | 1.01 | 19.7% | 6.0% | 0.54 | 71% | 0.50 | 0.98 | 보류 |
config_6_ic_rank 6. 계층 hier_3 + IC 가중 + value rank (JEF-88) | -0.08 | -3.0% | -16.4% | -1.70 | 43% | 1.00 | 0.42 | 폐기 |
config_A_rank_sum A. 계층 hier_3 + rank_sum (Borda count) (JEF-90) | 0.05 | 1.9% | -16.2% | -1.43 | 57% | 0.67 | 0.55 | 보류 |
config_B_geometric_mean B. 계층 hier_3 + geometric_mean (JEF-90) | -0.06 | -2.2% | -18.1% | -1.67 | 43% | 1.00 | 0.44 | 폐기 |
config_C_min_rank C. 계층 hier_3 + min_rank (quality screen) (JEF-90) | 0.06 | 2.0% | -21.1% | -1.51 | 57% | 0.67 | 0.56 | 보류 |
config_D_dual_norm D. dual-norm 26 leaf (zscore+rank per factor) + IC 가중 + shrinkage (JEF-89) | 0.90 | 19.4% | 5.6% | 0.49 | 71% | 1.00 | 0.97 | 보류 |
config_E_no_yield E. [ablation] yield 제거 — profitability(4) + momentum(5) (JEF-95) | -0.05 | -1.4% | -15.1% | -0.88 | 43% | 0.50 | 0.45 | 폐기 |
config_F_no_profitability F. [ablation] profitability 제거 — yield(4) + momentum(5) (JEF-95) | 1.69 | 53.3% | 18.5% | 0.88 | 57% | 0.17 | 1.00 | 보류 |
config_G_no_momentum G. [ablation] momentum 제거 — value only: yield(4) + profitability(4) (JEF-95) | 1.20 | 24.0% | 1.5% | 0.07 | 71% | 0.50 | 0.99 | 보류 |
config_H_flat_value_8 H. [baseline] flat 8 value factors (JEF-95) | 0.96 | 18.7% | -3.2% | -0.26 | 71% | 0.50 | 0.99 | 보류 |
config_I_flat_momentum_5 I. [baseline] flat 5 momentum/vol factors (JEF-95) | -0.22 | -9.1% | -20.8% | -0.71 | 43% | 0.67 | 0.31 | 폐기 |
config_J_hier_4_clustered J. [grouping] 상관 클러스터 기반 4-그룹 계층 (JEF-95) | 0.87 | 19.9% | -6.4% | -0.26 | 71% | 0.33 | 0.97 | 보류 |
config_K_ic_group K. [group-IC] hier_3 + leaf AND group 수준 IC 가중 (JEF-95) | 1.20 | 28.5% | 6.5% | 0.46 | 71% | 0.50 | 0.99 | 보류 |
최상위 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)
04결론 — 채택 / 보류 / 폐기
17개 config 를 관문 통과 여부에 따라 세 버킷으로 분류한다. 채택된 config 는 live priority report 에 등록 대상이며, 보류 config 는 추가 실험 또는 파라미터 튜닝 대상이다.
- 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
- 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 유지.