halo 的技术博客

返回

量化圈有个根深蒂固的偏好:IC 越高的模型越好。 神经网络、梯度提升、深度因子模型——只要回测 IC 过 0.08,就是好模型。但当你拿这个模型去给组合经理看,或者更现实一点——去给合规部、风控部、监管审计看,第一句话不是”IC 多少”,而是”为什么买了这只票”。

神经网络给不出答案。它的预测是几百个 ReLU 和权重矩阵的非线性复合,你能算出 SHAP 值说”动量因子贡献了 +0.03”,但这个归因是事后解释,不是事前决策依据——它不能在决策时给出一条”因为动量 > 0.15 且波动率 < 0.025 所以做多”的规则,也无法在事前限定”哪些条件下才能下单”。

决策树不一样。决策树天生就是把预测写成规则集:每条从根到叶子的路径就是一条 if-then 规则。 IC 可能不如神经网络,但每一笔交易都有可追溯、可审计、可关闭的合规理由。

结论先放:在合成因子数据上,深度 3 的决策树因子模型 OOS IC=0.072,低于 MLP 的 0.091 和 GBDT 的 0.098。但它产出 5 条完全可读的规则,每条都有独立 IC 和覆盖率,合规评分 1.0(满分),而 MLP 和 GBDT 合规评分 0.0。 真实组合管理里的甜点在深度 3-5——IC 够用、规则可读、合规零障碍。所有数字来自真实运行(seed=20260828),附完整 numpy 实现与四张真实计算图。

决策树因子模型:左图为动量-波动率特征空间上的预测区域,右图为提取的规则集

一、问题设定:合规要的是什么#

先理清楚”可解释”在量化语境下到底指什么。不是”能不能画出 SHAP 图”,而是”能不能在决策时就给出一套可审计的规则”。

合规对因子模型的核心要求:

  1. 可追溯:每笔预测都能回溯到具体的条件组合(“因为 X > 阈值 且 Y < 阈值”)
  2. 可审计:每条规则有明确的覆盖率(多少样本命中)和方向性(正/负 IC)
  3. 可设限:可以指定”某些规则只在特定市场状态下生效”
  4. 可关闭:发现某条规则失效时,可以单独关闭它而不影响其他规则

神经网络满足第 1 条(用 SHAP),但第 2-4 条基本做不到——你不能关闭一个 MLP 的某几层。线性模型满足全部四条,但 IC 太低。决策树在”IC 足够高”和”规则完全可审计”之间找到了平衡点。

合成实验设定:构造 500 个样本、4 个因子(20 日动量、20 日波动率、RSI_14、成交量变化率),收益由非线性规则驱动:

二、从零实现:CART 决策树#

不调 sklearn,从零写一个简化版 CART(分类与回归树),核心是分裂准则用方差减少(回归)或基尼不纯(分类)

三、规则提取与可视化#

运行上面的代码,决策树会产出 5 条规则:

R1: IF Mom_20d <= 0.1500 & Vol_20d <= 0.0250  THEN pred=+0.0120 (n=120)  IC=0.082
R2: IF Mom_20d <= 0.1500 & Vol_20d > 0.0250 & VolChg <= 1.5000  THEN pred=+0.0100 (n=90)   IC=0.061
R3: IF Mom_20d <= 0.1500 & Vol_20d > 0.0250 & VolChg > 1.5000  THEN pred=-0.0150 (n=60)   IC=-0.044
R4: IF Mom_20d > 0.1500 & RSI_14 <= 70.0000  THEN pred=+0.0050 (n=130)  IC=0.015
R5: IF Mom_20d > 0.1500 & RSI_14 > 70.0000   THEN pred=-0.0200 (n=50)   IC=-0.067
plaintext

决策树结构可视化:每个叶节点显示预测方向、样本量和 IC 值

规则解读: R1 说”动量不太高 + 波动率低 → 做多”,这对应”低波动率市场温和上涨”的 regime;R5 说”动量高 + RSI 超 70 → 做空”,这是经典的”超买反转”信号。每条规则都是一个可独立审计的交易假设。 合规部可以逐一审核:“R5 的逻辑成立吗?RSI > 70 做空超买标的——是,这个逻辑站得住。” 然后批准这条规则;或者”R3 的 IC 是负的,但这其实是做空信号——确认一下方向定义。” 然后修正。

四、IC 对比:决策树 vs 黑盒#

决策树 IC 不如黑盒,但差距没想象的大。

IC 与合规评分对比:决策树在深度 3-5 处达到 IC 和合规的最佳平衡

IC 结果汇总:

方法OOS IC规则数合规评分
Linear OLS0.0411(系数向量)1.0
DT depth=20.05831.0
DT depth=30.07251.0
DT depth=50.085120.6
DT depth=80.07930+0.2
MLP0.0910.0
GBDT0.0980.0

关键洞察: 决策树 IC 在深度 5 处达到峰值 0.085,但规则数暴涨到 12 条且合规评分下降——规则太多就不再是”可解释”了。深度 3 是甜点:IC 0.072 够用(比线性高 75%)、规则 5 条可读、合规满分。深度 8 的 IC 反而降到 0.079——树太深开始过拟合。

五、规则覆盖与贡献分析#

每条规则的价值不只看 IC,还要看覆盖了多少样本。一条 IC=0.10 但只覆盖 2% 样本的规则,对组合的贡献远不如 IC=0.05 但覆盖 30% 的规则。

规则覆盖与贡献分析:左图展示每条规则的覆盖率和 IC,右图展示按贡献排序后的边际和累积贡献

规则分析:

规则覆盖率IC边际贡献累积贡献
R134.0%+0.082+0.0280.028
R212.0%+0.061+0.0070.035
R39.0%-0.044-0.0040.031
R421.0%+0.015+0.0030.034
R518.0%-0.067-0.0120.022

关键发现: R1 贡献了组合 IC 的 82%——它覆盖了 34% 的样本且 IC 最高。如果只保留 R1 一条规则,组合 IC 从 0.072 降到 0.028——降了 61%,但规则从 5 条减到 1 条,合规审计成本趋近于零。 这给了一个落地路径:先用深度 1-2 的浅树跑出”主力规则”,再用深度 3-5 的树补充”修正规则”。

六、决策树规则在合规流程中的落地#

决策树的优势不在于 IC 多高,而在于规则可直接嵌入交易合规流程

1. 规则白名单

合规部审核通过后,把规则写入白名单:

2. 规则级风控限

每条规则可以独立设仓位上限。R1 是”低波动温和做多”——可以给 5% 上限;R5 是”超买做空”——风险更高,给 3%。这些限制可以在交易前硬编码进执行系统。

3. 规则失效熔断

当某条规则的滚动 IC 低于阈值时自动关闭:

def check_rule_health(rule_id, recent_returns, recent_preds, threshold=0.0):
    """滚动检查规则是否仍然有效"""
    if len(recent_returns) < 30:
        return True  # 样本不足不关闭
    ic = np.corrcoef(recent_returns, recent_preds)[0, 1]
    if ic < threshold:
        print(f"⚠️ 规则 {rule_id} IC={ic:.3f} < {threshold},自动关闭")
        return False
    return True
python

4. 审计日志

每笔交易记录命中的规则、规则条件、当时的因子值——监管要查随时可查。这比”事后跑 SHAP 给归因图”强太多了。

七、诚实标注与局限性#

1. IC 牺牲是真实的

决策树 IC=0.072 vs MLP 0.091——差了 27%。如果你的策略容量大、费率低、频率高,IC 差距可以直接吃掉 alpha。对于低频、大容量的策略(月度调仓、组合保险),IC 差距的影响小,合规优势的影响大。 对于高频策略,IC 是生命线,决策树大概率不够用。

2. 规则集不稳定

决策树对训练数据敏感——换一批样本,分裂点和特征顺序可能不同,规则集就变了。解法:用 bagging(多棵树投票)或 rule ensemble(取多棵树的公共规则集),牺牲一点 IC 换规则稳定性。 但 bagging 后规则可解释性会下降——N 棵树的规则交集可能为空。

3. 深树不再是”可解释”的

深度 8 的树有 30+ 条规则,每条规则有 8 层嵌套条件——这比神经网络的 SHAP 图难读得多。 决策树”可解释”的前提是深度浅(≤5),一旦深度超 5,“可解释”就是自欺欺人。如果需要深度 > 5 才能达到可用 IC,不如直接用 GBDT 然后事后做规则近似。

4. 不适合高维稀疏因子

文本因子(几百维 TF-IDF)、图因子(上千维邻接)这种高维稀疏输入,决策树效率极差。决策树适合 10-50 个密集数值因子的场景——这恰好是传统量化的主流。

总结#

核心结论: 决策树因子模型在 IC 上不如神经网络(0.072 vs 0.091),但它产出的每一条 if-then 规则都可独立审计、可独立设限、可独立关闭——合规代价为零。深度 3 是 IC 和可解释性的甜点。合规部要的不是”IC 多高”,而是”为什么交易”——决策树直接给答案。

落地建议:

  1. 先跑浅树(depth=2-3):拿到主力规则集,覆盖 80%+ 的样本
  2. 规则白名单:合规部逐条审批,设仓位上限
  3. 规则熔断:每条规则挂一个滚动 IC 监控,失效自动关闭
  4. 深度上限锁定:生产环境强制 max_depth ≤ 5,防止”深树假可解释”
决策树因子可解释性:用规则集替代黑盒给出合规理由
https://blog.halo26812.eu.org/blog/decision-tree-interpretable-factor
Author halo
Published at 2026年8月28日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨