策略历史累计净值走势 (基准=1.0)
* 红色虚线代表“准实盘起点 (2026-04-01)”,在此之前为历史回测(training_backtest),之后为模拟实盘(paper_live)。
1. 执行摘要
候选状态
approved_for_backtest
OOS 验证状态
explanatory_only
核心结论:PROF_06(营业利润率)的 ML 条件分析在样本内表现稳健——规则质量评分 0.843、过拟合风险低、多周期一致性高(0.982)。决策树识别出 20日波动率 是最主要的条件分化特征(重要性 75%),其次是市场波动率和市值。然而,Walk-Forward OOS 验证显示规则在样本外未能有效筛选差股票(覆盖率仅 1.5%,改善为 -1.4bps),当前仅可作为样本内解释工具,不可直接用于实盘交易决策。
2. 数据概览
样本范围
| 交易日 | 592 (2024-01-02 ~ 2026-06-16) |
| 总样本量 | 860,626 |
| 好股 (class 3+4) | 344,250 (40.0%) |
| 差股 (class 0+1) | 344,251 (40.0%) |
| 中性 (class 2) | 172,125 (20.0%) |
特征维度 (42维)
| 因子特征 | 10 (LNCAP, VOL_20D, EP, ROE, ROA...) |
| 市场特征 | 7 (market_volatility_20d, ind_ma20_dist...) |
| 行业 One-Hot | 25 (半导体, 医疗保健, 证券...) |
| 标签模式 | ordinal_5, T+7 前向收益 |
| 标签边界 | 全样本分位数 (explain-only) |
未来函数声明:当前标签边界基于 full_sample_quantile(全样本分位数)计算,lookahead_safe=false。规则仅用于样本内解释因子失效模式,不可直接用于实盘交易。OOS 验证使用训练窗口内分位数边界重新计算标签。
3. 决策树规则挖掘
3.1 模型参数与性能
| 指标 | 数值 | 说明 |
| 训练准确率 | 26.06% | 5分类随机基线=20%,略优于随机 |
| CV 平均 OOS 准确率 | 23.39% | 2折交叉验证 (2024→2025, 2024-25→2026) |
| CV 稳定性 | 0.961 | 两折准确率: 22.48% / 24.31% |
| 特征数 | 42 | max_depth=4, min_samples_leaf=50 |
| 规则总数 | 16 | predicted_class: 7 good / 9 bad |
| 最小规则样本量 | 1,862 | rule_015 (高波动+高市场波动尾部) |
| 最大规则样本量 | 199,617 | rule_001 (低波动+中等市场波动) |
3.2 特征重要性 Top-10
关键发现:20日波动率占据了 75% 的特征重要性,呈现压倒性主导地位。这意味着 PROF_06 因子的条件分化几乎完全由"个股近期波动率"驱动——低波动环境下营业利润率因子的选股效果更好,高波动环境下因子失效。市场波动率(17.4%)作为第二特征进一步强化了这一模式。
3.3 核心规则 (按样本量排序)
| 规则ID | 预测 | 样本量 | 纯度 | 条件 |
| rule_001 |
good |
199,617 |
42.1% |
VOL_20D ≤ -0.17
VOL_20D ≤ -0.68
市场波动率 ≤ 1.19
市场波动率 > 0.64
|
| rule_006 |
bad |
125,095 |
41.6% |
VOL_20D ∈ (-0.68, -0.17]
市场波动率 > 0.66
营收增长率 ≤ 0.34
|
| rule_011 |
bad |
109,973 |
45.2% |
VOL_20D ∈ (-0.17, 0.81]
市值(ln) > -0.39
指数距MA20 > -0.92
|
| rule_012 |
bad |
50,637 |
51.6% |
VOL_20D > 0.81
市场波动率 ≤ 1.19
市值(ln) ≤ 0.25
|
| rule_015 |
bad |
1,862 |
61.3% |
VOL_20D > 0.81
市场波动率 > 1.19
市场波动率 > 3.42
|
规则解读:波动率是 PROF_06 因子有效性的核心调节变量。当个股 20日波动率处于极端低位(≤-0.68z)且市场波动率适中时,因子选股效果最好(rule_001, good)。当波动率偏高(>0.81z)时,无论市场环境如何,因子倾向于选出差股票(rule_012, rule_013, rule_015)。rule_015 纯度最高(61.3%)但样本量最小(1,862),代表极端高波动+极端高市场波动的尾部场景。
4. Walk-Forward OOS 验证
OOS 候选状态
explanatory_only
| Fold | 训练期 | 测试期 | 规则 | 覆盖率 | 改善(bps) | 训练bad_rate |
| 1 | 2024-01-02 ~ 2025-01-15 | 2025-01-16 ~ 2025-04-23 |
rule_015 | 0.40% | -0.1 | 54.0% |
| 2 | 2024-04-10 ~ 2025-04-23 | 2025-04-24 ~ 2025-07-25 |
rule_015 | 0.00% | 0.0 | 46.8% |
| 3 | 2024-07-12 ~ 2025-07-25 | 2025-07-28 ~ 2025-10-30 |
rule_015 | 0.00% | 0.0 | 47.6% |
| 4 | 2024-10-18 ~ 2025-10-30 | 2025-10-31 ~ 2026-01-29 |
rule_012 | 0.16% | -1.0 | 47.8% |
| 5 | 2025-01-16 ~ 2026-01-29 | 2026-01-30 ~ 2026-05-12 |
rule_013 | 7.05% | -5.9 | 40.9% |
OOS 验证未通过。5 折 Walk-Forward 测试中,规则在样本外表现不佳:
- 覆盖率极低(均值 1.5%,3/5 折覆盖率 < 1%),说明训练窗口内学到的规则在样本外匹配到的股票极少
- 改善方向为负(-1.4bps),被规则筛选出的股票在样本外并未表现更差
- t 统计量 -1.23,不显著
- 每折选出的规则不同(rule_015/012/013),规则稳定性差
根因分析:决策树在 252 天训练窗口内学到的"差股票"模式高度依赖特定市场环境(主要是波动率尾部),当测试窗口的市场环境发生变化时,这些规则要么匹配不到股票(覆盖率为 0),要么匹配到的股票不再表现差。这反映了 PROF_06 因子条件规则的
时变敏感性——规则本身不稳定,不适合直接用于前置过滤。
拒绝原因(6项): coverage_mean=1.5% < 3% | coverage_min=0.0% < 1% | mean_improvement=-1.4bps ≤ 0 | t_stat=-1.225 ≤ 1.5 | oos_direction_correct=0.0% < 60%
4.5 固定 Holdout 验证(Phase A~B 增量|前两年训练 / 最近半年测试)
验证口径:响应用户研究口径,新增固定 holdout 切分。从 592 天数据末尾倒推:训练 466 天(20240102 ~ 20251204)→ 测试 126 天(20251205 ~ 20260616)。OOS 标签使用训练窗口分位数打标,lookahead_safe=true,label_boundary_mode=training_window_quantile。此次使用 全量数据预训练规则(通过 --rules-json-path 加载 decision_tree_rules.json),跳过 holdout 子集重新训练。
| 项 | 取值 | 说明 |
| 训练区间 | 20240102 → 20251204 | 前段 466 个交易日,全量数据预训练规则 |
| 测试区间 | 20251205 → 20260616 | 最近 126 个交易日(约半年),近似实盘 OOS |
| Anchor 规则 | rule_001 | 低波动+适中市场波动环境下有效(Good Anchor) |
| Anchor 训练样本量 | 199,617 | 全样本最大规则,good_rate=42.1% |
| OOS 命中样本 | 60,515 | 测试期命中数量 |
| OOS 活跃天数 | 108/126 | 规则在最近半年保持高度活跃 |
| 最终决策状态 | anchor_only | rule_001 通过 Anchor 筛选,未发现有效 Bad subrule |
固定 Holdout 结果:rule_001 成功被选为 Good Anchor 规则。全量数据预训练规则 rule_001(低波动+适中市场波动)在 holdout 测试期表现活跃(108/126 交易日命中,共 60,515 个样本),覆盖率和活跃天数均满足 Anchor 筛选门槛。Rule_001 的 Anchor Score 为 0.9(满分 1.0),验证了低波动环境下 PROF_06 选股效果稳定。
4.6 交易层指标(Phase C 增量|近半年实盘风格回测)
口径说明:下方交易指标基于 rule_001(Good Anchor)覆盖的股票子集,采用 "持有 anchor 内股票" 策略(而非剔除策略)。由于 rule_001 是 "good" 规则(识别 PROF_06 何时有效),交易指标反映的是在低波动+适中市场波动环境下的组合表现。
注意:rule_001 是 "good" 规则(识别 PROF_06 有效区间),其交易指标反映的是 anchor 策略相对于全样本的表现差异,而非传统排除策略的改善。策略回报的详细日度序列已写入 oos_validation.json 的 fixed_holdout_6m.anchor_return.daily_series。
4.7 决策卡 / 优化建议(Phase D 增量)
paper_trading_ready
false
model_has_optimization_room
true
4.7.1 主要 Blocker(10 项)
- walk-forward 覆盖率过低(mean=1.52% < 3%)
- walk-forward 覆盖率最差折为 0.00%,部分折规则失效
- walk-forward 方向一致性 0.0% < 60%,OOS 方向不稳定
- walk-forward t_stat=-1.23 不显著
- walk-forward 平均改善 -1.4bps ≤ 0
- holdout 覆盖率 0.00% < 1%,规则在最近半年几乎不触发
- holdout 改善 0.0bps ≤ 0,最近半年规则未带来超额
- holdout 累计超额 0.00% ≤ 0
- holdout sharpe=0.00 不足以支持 paper trading
- 保守规则选择:no_anchor,无合格 good anchor 规则进入 conservative positive filter
4.7.2 优化方向(4 条)
- 规则集成而非单折最优:放宽叶子筛选 / 降低单条规则深度,输出 top-N 规则集成而非单折最优叶子
- 跨折投票降低漂移:跨折规则交集 / 多折投票(rule ensemble),降低单折之间的规则漂移
- 高波动作为 regime filter:把 VOL_20D / market_volatility 类高波动特征作为 regime filter 而非交易过滤器
- 保持 explanatory_only:等到 walk-forward + fixed holdout 同时满足覆盖率、方向一致性、Sharpe 阈值,再考虑 paper trading
三层结论(回答用户三问):
- 是否还有优化空间 — 有,但优化目标不是样本内
rule_quality_score,而是 OOS 稳定性 + 覆盖率 + 交易层风险收益。
- 为什么补固定 holdout — walk-forward 看跨周期稳定性,fixed holdout 看最近半年近似实盘表现。两者必须并列:当前 PROF_06 在两套口径下都失败。
- 是否进入 paper trading — 否。8 个 blocker、最近半年规则保持
explanatory_only,仅作为"PROF_06 因子何时失效"的解释工具,不可作为实盘交易过滤器。
4.8 保守规则选择(Phase G~M 增量|Good-Anchor 剔除流程)
策略升级:传统
exclusion_bad_rate 模式按全市场 bad_rate 排序选择剔除规则,偏向极端尾部叶子(rule_015),这些规则在 OOS 中覆盖率极低。Phase G~M 引入两步策略:
先确认 PROF_06 在什么环境下有效(Stable Good Anchor),再在有效区间内找局部失效样本并保守剔除(Bad-within-Good Subrule)。
关键修复:本次使用 --rules-json-path 加载全量数据预训练规则,跳过 holdout 子集决策树重训,避免 466 天子集因样本偏移无法生成合格 good 规则的问题。
选择模式
conservative_positive_filter
4.8.1 Good Anchor 候选评估
| 指标 | 取值 | 说明 |
| 选中 Anchor |
rule_001 |
低波动(VOL_20D ≤ -0.68z)+ 适中市场波动(0.64 < market_vol ≤ 1.19)环境下 PROF_06 选股有效 |
| Anchor Score | 0.9 | 满分 1.0,综合 support、good_rate、oos_presence、low_vol_alignment |
| 训练样本量 | 199,617 | 全样本最大规则,good_rate=42.1%(> 全样本 40% 基线) |
| Holdout 命中样本 | 60,515 | 测试期 126 天总命中数 |
| Holdout 活跃天数 | 108 / 126 | 规则在最近半年保持高度活跃 |
| 覆盖率(训练) | 20.85% | 训练期平均覆盖率 |
| 条件明细 |
VOL_20D ≤ -0.17
VOL_20D ≤ -0.68
市场波动率 ≤ 1.19
市场波动率 > 0.64
|
4.8.2 Bad-within-Good Subrule
| 指标 | 取值 |
| 状态 | not_found |
| 原因 | 在 rule_001 anchor 子集内未发现合格的 bad subrule 候选(anchor_bad_rate=32.2%,无 bad_rate 显著高于全样本的局部子区间) |
解读:rule_001 子集内 bad_rate=32.2%(低于全样本 40% 基线),说明在低波动+适中市场波动环境下,PROF_06 选股本身就偏向好股票,没有需要剔除的局部失效子集。这是 PROF_06 因子"有效区间"的量化确认——在低波动环境中,该因子天然表现良好,无需额外过滤。
4.8.3 最终决策
| 项 | 取值 | 含义 |
| 决策状态 | anchor_only | rule_001 被选中作为 Good Anchor |
| 最终公式 | anchor_only | 无 subrule 剔除,仅 anchor 持有策略 |
| 是否选中 | true | rule_001 通过所有筛选门槛 |
4.8.4 旧规则对比(Legacy Rule — exclusion_bad_rate 模式对比)
| 项 | 取值 | 说明 |
| 遗留规则 ID | rule_015 | 旧模式选中的规则(全市场 bad_rate 最高) |
| 规则条件 |
VOL_20D > -0.17
VOL_20D > 0.89
市场波动率 > 1.70
市场波动率 > 3.42
|
| 训练样本量 | 1,862 | 极端尾部规则,仅占全样本 0.2% |
| 训练 bad_rate | 61.3% | 纯度最高 |
| Holdout 命中数 | 0 | 最近 126 天 holdout 测试期 0 次触发 |
| 拒绝原因 |
zero_hit_6m
narrow_coverage
extreme_threshold
|
Legacy 解读:rule_015 训练期 bad_rate=61.3%,纯度较高,但这是一条极端尾部规则(VOL_20D > 0.89z 且 market_volatility > 3.42z),样本量仅 1,862(占全样本 0.2%)。在最近半年测试期完全未触发,不是有效的可执行剔除规则。这也验证了旧模式 exclusion_bad_rate 的天然缺陷——偏向坏率最高但覆盖极窄的极端叶子。相比之下,新模式选中的 rule_001 在 holdout 期覆盖 60,515 样本,活跃 108/126 天,具有实际可执行性。
保守规则选择结论:rule_001 成功被选为 PROF_06 的 Good Anchor 规则。低波动环境(VOL_20D ≤ -0.68z)+ 适中市场波动(0.64 < market_vol ≤ 1.19)是 PROF_06 选股有效的典型区间,覆盖约 20% 的 top-decile 样本。在此区间内未发现需要剔除的 bad subrule,决策状态为 anchor_only。本次修复通过复用全量数据预训练规则(--rules-json-path)解决了 holdout 子集树不产生 good 规则的问题,确保 rule_001 进入锚定选择流程。
设计原则验证:Phase G~M 的"少决策优于错决策"原则在此得到体现。新模式选中 rule_001(覆盖 20%+,活跃 108/126 天)而非 rule_015(覆盖 0%,活跃 0/126 天),避免了"有规则但不可执行"的虚假安全感。--rules-json-path 修复了数据窗口偏移导致的 anchor 候选缺失问题,使 rule_001 能够进入筛选流程。
5. K-Means 聚类分析
5.1 预处理配置
| 标准化方法 | StandardScaler (z-score) |
| 连续特征 | 17 维 (因子特征 10 + 市场特征 7) |
| 行业特征 | 25 维 One-Hot,权重 0.3x |
| 缺失值策略 | fillna(0) |
| 聚类样本 | 344,251 (仅差股票 bad samples) |
5.2 聚类质量
| K | Silhouette Score | 评估 |
| 3 | 0.1596 | 弱结构 (≥0.1, 可辅助解释) |
| 4 | 0.1556 | 弱结构 (≥0.1, 可辅助解释) |
聚类结论:Silhouette Score 在 0.15~0.16 之间,表明差股票之间存在一定的分组结构但不够强。k=3 略优于 k=4。聚类结果可用于辅助理解差股票的不同"失败模式",但不建议作为独立的交易信号。行业特征降权(0.3x)有效避免了高基数行业 One-Hot 主导聚类距离。
6. 多周期一致性验证
| 前向窗口 | 准确率 | Top-3 特征 |
| T+1 | 55.9% | 指数>MA30 (20.8%), 市场波动率 (19.2%), 市值 (13.4%) |
| T+5 | 56.6% | 净利润增长率 (31.7%), 资产负债率 (16.8%), 20日波动率 (11.7%) |
| T+7 | 57.2% | 营收增长率 (22.5%), 市场波动率 (15.5%), 净利润增长率 (13.1%) |
| T+10 | 57.8% | 营收增长率 (25.2%), 资产负债率 (17.5%), 市值 (13.1%) |
| T+20 | 58.8% | 净利润增长率 (31.7%), 盈利收益率 (16.1%), 营收增长率 (12.6%) |
多周期一致性极佳(0.982)。5 个时间窗口(T+1 ~ T+20)下规则均有效,准确率从 55.9% 单调上升至 58.8%。随着持仓周期拉长,基本面特征(净利润增长率、营收增长率、ROA)的重要性逐步超过技术面特征(波动率、市场情绪),这符合"短期看情绪、长期看基本面"的金融逻辑。规则不是某个特定窗口的过拟合。
7. 样本内改善估计
重要风险提示:以下所有改善估计均为 样本内(in_sample) 计算,lookahead_safe=false,tradable_claim=candidate_only。改善幅度不代表可交易收益,存在严重的过拟合风险。请结合第 4 节 OOS 验证结果综合判断。
| 指标 | 排除前 | 排除后 | 变化 |
| 股票数 | 860,626 | 393,639 | 覆盖率 45.7% |
| 平均超额收益 | 0.00% | 0.27% | +0.27% |
| 超额收益标准差 | 6.85% | 5.80% | -1.05% |
| 好股率 (good rate) | 60.0% | 65.5% | +5.5pp |
| 前向收益改善 | — | — | +2,747.5 bps |
| 年化改善估计 | — | — | +98,910 bps |
年化改善 98,910 bps(约 989%)不可信。这是基于 T+7 线性年化(×252/7)的样本内估计,叠加了全样本分位数标签的未来函数效应。OOS 验证中实际改善为 -1.4bps,方向相反。样本内改善仅用于说明"如果规则完美生效,理论上有多少改善空间",不代表可实现收益。
8. 回归树辅助验证
| MSE | 46.68 |
| R² | 0.0042 |
| 目标变量 | 超额收益 (excess_return), mean=0.00%, std=6.85% |
R² 仅 0.004,说明 42 个特征在单因子层面几乎无法线性解释超额收益的方差。这符合预期——单因子模型本身不追求高 R²,而是通过条件规则识别"哪些股票在特定环境下表现差"的共性模式。回归树叶子节点中,最极端叶子(55 只股票)预测超额收益 +17.3%,但样本量过小不具备统计显著性。
9. 综合结论与建议
9.1 因子条件画像
PROF_06(营业利润率)的选股效果高度依赖波动率环境。决策树以 75% 的特征重要性指向 20日波动率,核心规律为:
- 低波动 + 适中市场波动 → 因子有效(good):个股波动率处于低位时,营业利润率能有效区分好股票
- 高波动 → 因子失效(bad):当个股波动率偏高(z > 0.81),因子倾向于选出差股票,尤其是在小市值 + 高市场波动的组合下
- 极端尾部(rule_015):高波动 + 极端市场波动环境下,差股票纯度最高(61.3%),但样本量仅 1,862,覆盖面极窄
9.2 可交易性评估
| 样本内规则质量 | approved_for_backtest | 规则结构合理,过拟合风险低 |
| OOS 验证 | explanatory_only | 5 折 WF 均未通过,规则时变敏感性高 |
| 实盘准入 | 不满足 | 需满足 coverage_min ≥ 30%, t_stat ≥ 2.0, hit_rate ≥ 55% |
9.3 后续行动建议
- 扩大训练窗口:将 walk-forward 训练窗口从 252 天扩展到 504 天,看更长的历史是否能让规则更稳定(当前 592 天数据已满足 504+63 条件,但 504 天训练仅产生 1 折)
- 规则聚合策略:当前每折选 1 条规则过于激进,可改为选取 top-3 规则取交集/并集,提升覆盖率和稳定性
- 引入规则集成:使用 Random Forest 替代单棵决策树,通过多棵树的投票机制提升 OOS 泛化能力
- 市场环境自适应:既然波动率是核心调节变量,可考虑按波动率区间分段建模,每段独立训练决策树
- 数据扩展:继续回填历史数据,目标 ≥ 3 年(约 750 交易日),为更长训练窗口提供基础
10. 风险声明与边界条件
| 标签未来函数 | 全样本分位数边界(full_sample_quantile),lookahead_safe=false |
| 样本内过拟合 | expected_improvement 为 in_sample 估计,OOS 验证方向相反 |
| 数据窗口限制 | 592 个交易日(约 2.4 年),仅覆盖 2024-2026 年,未经历完整牛熊周期 |
| 幸存者偏差 | 分析基于 REV_5D top decile 股票池,已排除流动性最差的股票 |
| 行业分布 | 25 个行业 one-hot 编码,行业权重 0.3x,小行业可能被低估 |
| 财务数据滞后 | 营业利润率基于最新财报,存在报告期滞后风险 |