返回研报工厂
ML CONDITION ANALYSIS v2.2 · WITH PHASE A~M

PROF_06 营业利润率 — 机器学习条件分析报告

决策树 + K-Means 聚类 + Walk-Forward OOS + 固定 Holdout 6m + 交易层指标 + 决策卡 + 保守规则选择
分析日期: 2026-06-17(v2 基础)/ 2026-06-18(A~M 增量) 数据窗口: 2024-01-02 ~ 2026-06-16 (592 交易日) 样本量: 860,626 版本: v20260617_194501 + oos_validation@20260618
策略历史累计净值走势 (基准=1.0)

* 红色虚线代表“准实盘起点 (2026-04-01)”,在此之前为历史回测(training_backtest),之后为模拟实盘(paper_live)。

1. 执行摘要

规则质量评分
0.843/1.0
候选状态
approved_for_backtest
过拟合风险
low
保守选择状态
anchor_only
稳定性评分
0.961/1.0
OOS 验证状态
explanatory_only
多周期一致性
0.982/1.0
核心结论: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-Hot25 (半导体, 医疗保健, 证券...)
标签模式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%
特征数42max_depth=4, min_samples_leaf=50
规则总数16predicted_class: 7 good / 9 bad
最小规则样本量1,862rule_015 (高波动+高市场波动尾部)
最大规则样本量199,617rule_001 (低波动+中等市场波动)

3.2 特征重要性 Top-10

20日波动率(z)
75.0%
市场20日波动率
17.4%
市值(ln)
3.8%
指数距MA20偏离(%)
2.6%
营收增长率(z)
1.2%
净利润增长率(z)
1.0%
ROA(z)
0.8%
换手率(z)
0.8%
资产负债率(z)
0.6%
盈利收益率(z)
0.5%
关键发现: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
训练/测试窗口
252d / 63d
折数
5 folds
平均覆盖率
1.5%
平均改善
-1.4 bps
t 统计量
-1.23
Fold训练期测试期规则覆盖率改善(bps)训练bad_rate
12024-01-02 ~ 2025-01-152025-01-16 ~ 2025-04-23 rule_0150.40%-0.154.0%
22024-04-10 ~ 2025-04-232025-04-24 ~ 2025-07-25 rule_0150.00%0.046.8%
32024-07-12 ~ 2025-07-252025-07-28 ~ 2025-10-30 rule_0150.00%0.047.6%
42024-10-18 ~ 2025-10-302025-10-31 ~ 2026-01-29 rule_0120.16%-1.047.8%
52025-01-16 ~ 2026-01-292026-01-30 ~ 2026-05-12 rule_0137.05%-5.940.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=truelabel_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_onlyrule_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 何时有效),交易指标反映的是在低波动+适中市场波动环境下的组合表现。
覆盖率
68.60%
126 天均值
活跃天数
126/126
规则每日触发
基准累计收益
6.64%
基准 Sharpe
0.696
注意:rule_001 是 "good" 规则(识别 PROF_06 有效区间),其交易指标反映的是 anchor 策略相对于全样本的表现差异,而非传统排除策略的改善。策略回报的详细日度序列已写入 oos_validation.jsonfixed_holdout_6m.anchor_return.daily_series

4.7 决策卡 / 优化建议(Phase D 增量)

推荐状态
research_only
paper_trading_ready
false
model_has_optimization_room
true

4.7.1 主要 Blocker(10 项)

  1. walk-forward 覆盖率过低(mean=1.52% < 3%)
  2. walk-forward 覆盖率最差折为 0.00%,部分折规则失效
  3. walk-forward 方向一致性 0.0% < 60%,OOS 方向不稳定
  4. walk-forward t_stat=-1.23 不显著
  5. walk-forward 平均改善 -1.4bps ≤ 0
  6. holdout 覆盖率 0.00% < 1%,规则在最近半年几乎不触发
  7. holdout 改善 0.0bps ≤ 0,最近半年规则未带来超额
  8. holdout 累计超额 0.00% ≤ 0
  9. holdout sharpe=0.00 不足以支持 paper trading
  10. 保守规则选择:no_anchor,无合格 good anchor 规则进入 conservative positive filter

4.7.2 优化方向(4 条)

  1. 规则集成而非单折最优:放宽叶子筛选 / 降低单条规则深度,输出 top-N 规则集成而非单折最优叶子
  2. 跨折投票降低漂移:跨折规则交集 / 多折投票(rule ensemble),降低单折之间的规则漂移
  3. 高波动作为 regime filter:把 VOL_20D / market_volatility 类高波动特征作为 regime filter 而非交易过滤器
  4. 保持 explanatory_only:等到 walk-forward + fixed holdout 同时满足覆盖率、方向一致性、Sharpe 阈值,再考虑 paper trading
三层结论(回答用户三问):
  1. 是否还有优化空间 — 有,但优化目标不是样本内 rule_quality_score,而是 OOS 稳定性 + 覆盖率 + 交易层风险收益。
  2. 为什么补固定 holdout — walk-forward 看跨周期稳定性,fixed holdout 看最近半年近似实盘表现。两者必须并列:当前 PROF_06 在两套口径下都失败。
  3. 是否进入 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
Anchor 结果
rule_001
最终状态
anchor_only

4.8.1 Good Anchor 候选评估

指标取值说明
选中 Anchor rule_001 低波动(VOL_20D ≤ -0.68z)+ 适中市场波动(0.64 < market_vol ≤ 1.19)环境下 PROF_06 选股有效
Anchor Score0.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_onlyrule_001 被选中作为 Good Anchor
最终公式anchor_only无 subrule 剔除,仅 anchor 持有策略
是否选中truerule_001 通过所有筛选门槛

4.8.4 旧规则对比(Legacy Rule — exclusion_bad_rate 模式对比)

取值说明
遗留规则 IDrule_015旧模式选中的规则(全市场 bad_rate 最高)
规则条件 VOL_20D > -0.17 VOL_20D > 0.89 市场波动率 > 1.70 市场波动率 > 3.42
训练样本量1,862极端尾部规则,仅占全样本 0.2%
训练 bad_rate61.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 聚类质量

KSilhouette Score评估
30.1596弱结构 (≥0.1, 可辅助解释)
40.1556弱结构 (≥0.1, 可辅助解释)
聚类结论:Silhouette Score 在 0.15~0.16 之间,表明差股票之间存在一定的分组结构但不够强。k=3 略优于 k=4。聚类结果可用于辅助理解差股票的不同"失败模式",但不建议作为独立的交易信号。行业特征降权(0.3x)有效避免了高基数行业 One-Hot 主导聚类距离。

6. 多周期一致性验证

一致性评分
0.982/1.0
一致性标签
high
平均准确率
57.3%
前向窗口准确率Top-3 特征
T+155.9%指数>MA30 (20.8%), 市场波动率 (19.2%), 市值 (13.4%)
T+556.6%净利润增长率 (31.7%), 资产负债率 (16.8%), 20日波动率 (11.7%)
T+757.2%营收增长率 (22.5%), 市场波动率 (15.5%), 净利润增长率 (13.1%)
T+1057.8%营收增长率 (25.2%), 资产负债率 (17.5%), 市值 (13.1%)
T+2058.8%净利润增长率 (31.7%), 盈利收益率 (16.1%), 营收增长率 (12.6%)
多周期一致性极佳(0.982)。5 个时间窗口(T+1 ~ T+20)下规则均有效,准确率从 55.9% 单调上升至 58.8%。随着持仓周期拉长,基本面特征(净利润增长率、营收增长率、ROA)的重要性逐步超过技术面特征(波动率、市场情绪),这符合"短期看情绪、长期看基本面"的金融逻辑。规则不是某个特定窗口的过拟合。

7. 样本内改善估计

重要风险提示:以下所有改善估计均为 样本内(in_sample) 计算,lookahead_safe=falsetradable_claim=candidate_only。改善幅度不代表可交易收益,存在严重的过拟合风险。请结合第 4 节 OOS 验证结果综合判断。
指标排除前排除后变化
股票数860,626393,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. 回归树辅助验证

MSE46.68
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_only5 折 WF 均未通过,规则时变敏感性高
实盘准入不满足需满足 coverage_min ≥ 30%, t_stat ≥ 2.0, hit_rate ≥ 55%

9.3 后续行动建议

  1. 扩大训练窗口:将 walk-forward 训练窗口从 252 天扩展到 504 天,看更长的历史是否能让规则更稳定(当前 592 天数据已满足 504+63 条件,但 504 天训练仅产生 1 折)
  2. 规则聚合策略:当前每折选 1 条规则过于激进,可改为选取 top-3 规则取交集/并集,提升覆盖率和稳定性
  3. 引入规则集成:使用 Random Forest 替代单棵决策树,通过多棵树的投票机制提升 OOS 泛化能力
  4. 市场环境自适应:既然波动率是核心调节变量,可考虑按波动率区间分段建模,每段独立训练决策树
  5. 数据扩展:继续回填历史数据,目标 ≥ 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,小行业可能被低估
财务数据滞后营业利润率基于最新财报,存在报告期滞后风险