第 277 题:实现GBDT的特征重要性,Permutation与Split增益。
题目
实现GBDT的特征重要性,Permutation与Split增益。
完整讲解
一、特征重要性的用途
- 解释模型决策、特征选择、监控与调试。GBDT 中常用特征重要性:基于分裂带来的增益或基于置换(Permutation) 的指标下降。
二、Split 增益(基于树结构)
- 思路:对每个特征,累加其在所有树中作为分裂点时的增益(分裂后损失减少量)。增益越大,该特征越重要。可再按树数或样本数归一化(如除以总增益或总分裂数)。
- 实现:建树时每步记录 (feature_id, gain),训练结束后按 feature_id 聚合 sum(gain);XGBoost/LightGBM 等均提供
feature_importances_,多为基于 gain 或 split count。
- 特点:计算简单、与训练过程一致;偏向高基数、易分裂的特征,且是「模型内」重要性,不一定代表因果或预测力独立贡献。
三、Permutation 重要性
- 思路:在验证集上先算 baseline 指标(如 AUC);对特征 $j$,将其取值打乱(破坏与标签的对应),再算指标;指标下降越多,特征 $j$ 越重要。打乱等价于「去掉该特征信息」,下降量即其贡献。
- 实现:对每个特征 $j$,复制验证集,打乱第 $j$ 列,预测并算指标;importance_j = baseline_metric - metric_after_permute。可多次打乱取平均降方差。
- 特点:与模型无关、可跨模型比较;计算量 O(特征数 × 验证预测次数);更能反映「该特征对当前指标的边际贡献」,且能发现相关特征中谁在给定模型下更被依赖。
四、对比
- Split 增益:快、与树结构直接对应;Permutation:更贴近「预测贡献」、可用于非树模型,但更贵。推荐中两者可结合使用。
面试要点
- 能说清 GBDT 特征重要性的两种方式:基于分裂增益的累加、基于置换的指标下降。
- 能写出 Permutation 的流程(打乱特征→重算指标→下降即重要性)及实现注意(多次打乱、验证集)。
记忆要点
- 特征重要性:Split 增益=按特征累加分裂增益;Permutation=打乱该特征后指标下降量。
- Split 快、与树一致;Permutation 反映预测贡献、可跨模型,计算更贵。