跳转到内容

特征重要性与可解释性

方法原理在金融里的问题
MDI(不纯度重要性)树分裂时该特征带来的不纯度下降偏向高基数特征;共线特征互相稀释
MDA(置换重要性)打乱该特征后样本外性能下降更可靠;共线时仍会稀释;计算贵
SHAP博弈论归因,边际贡献分配局部解释好;全局聚合仍受共线干扰

共同敌人是共线性:金融特征天然共线(动量、反转、波动率互相纠缠),共线特征的重要性会互相稀释——两个完全相同的特征各拿一半重要性,单独看都"不重要"。

处理共线的标准流程:

  1. 聚类:对特征按相关性(或 MDI 共现)聚类,同一簇内视为一个"信息源";
  2. 簇内取代表:每簇选一个代表特征(或对簇做正交化/主成分);
  3. 在去共线后的特征集上评估 MDA/SHAP——此时的重要性才反映真实的边际贡献。

重要性是研究工具,不只是解释工具

Section titled “重要性是研究工具,不只是解释工具”
  • 筛选:MDA 在样本外计算,能识别真正有预测力的特征——把长期垫底的簇整个删掉,降低过拟合维度;
  • 诊断:重要性不稳定本身就是过拟合的信号——不同折、不同种子下重要性排名剧变,说明模型在拟合噪声,见金融交叉验证;
  • 直觉:SHAP 用于抽查个别预测为什么发生,是排查"模型是不是学到了不该学的东西"(如泄漏特征)的利器。
mda.py
import numpy as np
def mda_importance(model, X_val: np.ndarray, y_val: np.ndarray, seed: int = 42) -> np.ndarray:
"""置换重要性:打乱每列后样本外性能下降多少"""
rng = np.random.default_rng(seed)
base = model.score(X_val, y_val)
imp = np.zeros(X_val.shape[1])
for j in range(X_val.shape[1]):
Xp = X_val.copy()
rng.shuffle(Xp[:, j])
imp[j] = base - model.score(Xp, y_val)
return imp
  • 特征集先聚类去共线,再做重要性评估;
  • MDA 用样本外计算,MDI 只做参考;
  • 重要性跨折/跨种子不稳定 → 直接判过拟合,删特征或降维。
  • 共线特征会互相稀释重要性,先聚类再评估
  • MDA 在样本外计算,能识别真正的预测力
  • 重要性不稳定本身就是过拟合的信号