特征重要性与可解释性
三种重要性,三种问题
Section titled “三种重要性,三种问题”| 方法 | 原理 | 在金融里的问题 |
|---|---|---|
| MDI(不纯度重要性) | 树分裂时该特征带来的不纯度下降 | 偏向高基数特征;共线特征互相稀释 |
| MDA(置换重要性) | 打乱该特征后样本外性能下降 | 更可靠;共线时仍会稀释;计算贵 |
| SHAP | 博弈论归因,边际贡献分配 | 局部解释好;全局聚合仍受共线干扰 |
共同敌人是共线性:金融特征天然共线(动量、反转、波动率互相纠缠),共线特征的重要性会互相稀释——两个完全相同的特征各拿一半重要性,单独看都"不重要"。
先正交化(聚类)再评估
Section titled “先正交化(聚类)再评估”处理共线的标准流程:
- 聚类:对特征按相关性(或 MDI 共现)聚类,同一簇内视为一个"信息源";
- 簇内取代表:每簇选一个代表特征(或对簇做正交化/主成分);
- 在去共线后的特征集上评估 MDA/SHAP——此时的重要性才反映真实的边际贡献。
重要性是研究工具,不只是解释工具
Section titled “重要性是研究工具,不只是解释工具”- 筛选:MDA 在样本外计算,能识别真正有预测力的特征——把长期垫底的簇整个删掉,降低过拟合维度;
- 诊断:重要性不稳定本身就是过拟合的信号——不同折、不同种子下重要性排名剧变,说明模型在拟合噪声,见金融交叉验证;
- 直觉:SHAP 用于抽查个别预测为什么发生,是排查"模型是不是学到了不该学的东西"(如泄漏特征)的利器。
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量化中的用法
Section titled “量化中的用法”- 特征集先聚类去共线,再做重要性评估;
- MDA 用样本外计算,MDI 只做参考;
- 重要性跨折/跨种子不稳定 → 直接判过拟合,删特征或降维。
- 共线特征会互相稀释重要性,先聚类再评估
- MDA 在样本外计算,能识别真正的预测力
- 重要性不稳定本身就是过拟合的信号