城南老街上有一家生意火爆的小馆,招牌菜「满堂红」的配方里有四味主料:辣椒、食盐、大蒜、砂糖。老板总拍着胸脯说:辣椒是灵魂,这是我几十年的心得。可顾客们真正想知道的是:到底哪一味料换成别家的,这盘菜就砸了招牌?答案不能靠老板自夸,得靠一场「盲测」——把每桌盘里的辣椒悄悄换成随机替代品,再请评审团重新打分。分数大跌,说明这味料动不得;没啥变化,说明它可有可无。这套「换料试吃」的思路,就是机器学习里的排列重要性(Permutation Importance)。 模型里的「特征」就好比食材,预测指标(准确率、AUC)好比评审团的打分。内置重要性是厨师自评——它按分裂次数、不纯度下降这类「使用痕迹」论功行赏,天然偏心、易被相关特征迷惑;排列重要性则是客观盲测——打乱某一列特征的值再重新预测,看分数跌多少,跌幅就是该特征的真实贡献。本文用这个比喻贯穿始终,从原理讲到实现,再到工程坑点,帮你拿到一张比内置重要性可靠得多的特征贡献榜。
一句话价值:掌握排列重要性,你就能在特征筛选、模型解释与特征工程评估中给出不依赖模型内部偏见的可靠结论,避免被内置重要性的「自夸」误导。
目录
可视化演示
展示排列重要性原理:通过打乱特征值测量性能下降,对比内置重要性偏差,支持切换模式观察排列过程与多重复采样稳定性。
本节配有交互动效(进入视口后自动加载,约 3KB)。
排列特征重要性 排列重要性(打乱后性能下降) 内置重要性(树模型分裂增益) Importance = Acc(原) − Acc(打乱)
核心原理:一场「盲测」如何量出食材的真本事
前面故事里的老板为什么一定要换成盲测?因为「辣椒最重要」只是他的主观感受,真正该问的是:换掉哪一味料,这道菜就崩了?排列重要性用的正是这个逻辑——把每一个「食材」(特征)单独从配方里抽出来,换成随机的东西(打乱列值),然后再请「评审团」(模型)重新打分。
模型里的特征,通俗说就是输入给模型的每一列数据,比如用户的年龄、消费金额;性能分数则是准确率、AUC 这类衡量预测好坏的指标。打乱某个特征的值,等于破坏了它和标签之间好不容易学到的对应关系。如果模型预测质量因此大跌,说明这个特征承担了关键信息;如果几乎没影响,说明它是可有可无的配料。
在一次打乱-评分完成后,我们记录:基准分减去打乱后的分数,就是该特征在这一轮中的「跌幅」。
所以老食客们总结出了一句行话:别问厨师哪味料最得意,只问「换掉哪味料,菜就变味」——排列重要性就是把这个直觉变成数字的标准答案。
- 基准分 $s_0$模型不动,用原始验证集跑一遍预测得到的性能分数,相当于盲测第一轮先给原配方打分。
- 打乱后分数 $s_j$只把第 $j$ 个特征的值在各样本间随机交换,其余列保持原样,再跑同样的模型得到的分数。
- 跌幅 $\Delta_j$两者相减,正值越大说明第 $j$ 个特征贡献越关键;接近 0 说明它可有可无;若为负则另有故事,后面会讲。
内置重要性缺陷:厨师的自评为什么偏心
老板自评「辣椒最要紧」,是因为辣椒便宜、用量大、他最习惯;而盐虽然天天用,却没什么存在感。树模型的内置重要性(也叫基尼重要性)正是这种「自评」——它记录的是「哪个特征被用来分裂、每次分裂降了多少不纯度」,按节点的样本权重累积。
这种统计方式有三个天然缺陷。第一是基数偏好:取值特别多、取值特别碎的连续特征(比如用户 ID 的某种编码)更容易被选中当分裂点,累积的功劳自然更大。第二是相关特征分摊:两个强相关的特征会轮流去当分裂点,功劳被两人平分,单个看都不高。第三是训练集乐观:它在训练集上累计,会把模型「背答案」式的过拟合也当成贡献,于是某些噪声特征被高估。它的计算公式长这样。
自评的偏差在于「谁经常被用谁就重要」,而盲测只看「换掉谁影响大」。这也是从业者越来越倾向于用排列重要性复查模型的原因——它绕开了树的内部偏好,直接问结果。
- 节点 $t$ 与分裂特征 $v(t)$遍历树中每个内部节点,只看那些用第 $j$ 个特征做分裂决策的节点,条件写在求和号下面。
- 权重 $w_t$每个节点的样本量占比,落入该节点的样本越多,它对最终重要度的发言权越大。
- 不纯度下降 $\Delta G_t$分裂前后基尼系数或熵的减少量,代表「这次分裂让类别变纯了多少」。
- 求和 $\sum$把所有相关节点的贡献累加,得到特征 $j$ 的内置重要度 $\hat{I}_j$。
实现步骤:从基准分到跌幅榜
一次标准的盲测有四个动作:先请评审团给原配方打分;再把某一味料在每桌菜里换成随机替代品;重新请评审打分;最后算出分差。排列重要性的工程实现一模一样,总共四步。
第一步,划分数据。模型在训练集上拟合好之后,评估必须放在「没参与训练、没参与调参」的验证集或测试集上进行,防止过拟合干扰结论。第二步,测基准分:用原始验证集做一次预测,算出准确率等指标。第三步,逐列打乱:对第 $j$ 个特征执行随机排列(permutation),其他特征全部保持原样,重新预测并打分——这个过程中模型参数一动不动。第四步,计算跌幅并对所有特征重复,按跌幅从大到小排序,得到一张「跌幅榜」。分类任务里最常用的基准分是准确率,它的公式很直白。
四步走完,一卷「换料跌幅榜」就出炉了。跌幅大的食材就是配方命脉,这份榜单也成了模型解释里最常被贴进汇报 PPT 的图。
- 样本下标 $i$验证集里一共有 $n$ 条样本,$i$ 从 1 数到 $n$。
- 指示函数 $\mathbb{1}[\cdot]$括号里的等式成立就记 1,不成立记 0——也就是「这一条猜没猜对」。
- $\hat{y}_i$ 与 $y_i$前者是模型预测的类别,后者是真实类别,两者相等才算这条预测对。
- 平均 $\frac{1}{n}\sum$把 n 条样本的 0/1 相加再除以 n,得到的比例就是准确率这个基准分。
多重复采样:多办几轮盲测才敢下结论
如果盲测只办一场,恰好评审团有个人牙疼,给低分,结论就歪了。经验老到的评论家会连办七场,取平均分、看波动范围。排列重要性也必须这样做:单次打乱是随机的,换一个随机种子,同一特征两次的跌幅都可能差好几个百分点。
所以工程的正确姿势是:对每个特征,把「打乱-评分」整套动作重复 $K$ 次(sklearn 里叫 n_repeats,经验值 5-10 次,想更稳可以更多),得到 $K$ 个跌幅。对它们取平均值作为该特征的重要性,再算一个标准差作为不确定性。标准差小,说明排名可信;标准差大,说明这个特征的重要性「时灵时不灵」,要谨慎解读。多次重复后的重要性公式如下。
盲测多办几轮,老板才敢把「辣椒是不是命脉」写进菜单——多重复采样给重要性排序加上了一根「可信度标尺」,这是它和拍脑袋式自评的重要区别。
- 打乱后分数 $s_{j,k}$第 $k$ 次重复打乱特征 $j$ 后得到的验证分数,下标里的两个字母一个指特征、一个指第几次。
- 平均 $\frac{1}{K}\sum_{k=1}^{K}$把 $K$ 次打乱后的分数取平均,抹平单次运气带来的波动。
- 相减 $s_0 - \cdots$基准分减平均打乱分,得到更稳定的特征重要度 $I_j$。
- 标准差提醒实践中还要记录 $K$ 次跌幅的标准差 $\sigma_j$,画图时加误差棒,波动大的排名别太当真。
应用场景:跌幅榜的三个用武之地
这张「跌幅榜」不是挂在后厨当装饰的:经营分析用它的排名决定采购预算,给顾客解释口味,研发新配方时还能评估新料到底灵不灵。对应到算法工程,就是特征筛选、模型解释和特征工程评估三大场景。
特征筛选:按重要度从高到低排序后,把重要度接近 0 甚至为负的特征剔除,用剩下的稳定子集重新训练,常常能降低过拟合风险、减小线上存储与计算成本。模型解释:回答业务方「为什么给这个客户拒贷」「为什么给这个用户推这个商品」时,用全局跌幅榜给出可读、可复现的依据。特征工程评估:新造的聚合特征或文本特征,上线前对比加入前后各自的排列重要性是否显著,避免「闭眼堆特征」。实际操作中,我们常要回答「到底保留前几个特征」,于是用累计贡献率来定。
就像菜单上标注「灵魂食材」一样,跌幅榜把含糊的「业务直觉」变成了可以写进特征文档、评审报告的数字,让每一次删特征都有据可依。
- 前 m 个特征集合 $\mathrm{top}_m$按重要度从大到小排,取前 $m$ 个特征组成一个集合。
- 分子 $\sum_{j \in \mathrm{top}_m} I_j$这前 $m$ 个特征的重要度之和,表示它们「扛下了多少预测动力」。
- 分母 $\sum_{j} I_j$全部特征重要度之和,作为整体贡献的基准。
- 比值 $R_m$从 1 开始逐一加大 $m$,找到第一个让 $R_m \geq 0.8$ 的位置,就是推荐的保留特征数。
注意事项:别被相关性与负值带偏
番茄和罗勒总是同时出现在一道菜里:单独换掉番茄,罗勒的香气还在,菜没怎么变味,你差点误判番茄不重要。还有一味料,换掉后菜反而更好吃——这可能是配方本身的败笔,也可能是评审当天口味异常。这两个场景恰好对应排列重要性最经典的两个坑。
第一个坑是强相关特征分摊功劳。A 和 B 高度相关时,单独打乱 A,模型还能从 B 里把信息补回来,于是 A 的单独跌幅被低估。要评估「一组特征」的整体贡献,正确做法是同时打乱整组,计算组合重要度。
第二个坑是负重要度:打乱后分数反而上升,说明该特征在模型里主要携带的是噪声或过拟合模式,在验证集上「帮倒忙」。此时先别急着删,要多重复几次、固定随机种子确认,再用独立测试集复验。第三,验证集太小或打乱时和训练集纠缠不清(数据泄露),跌幅会被严重高估——务必在干净的、模型没见过的数据上做盲测。盲测也要讲条件:相关食材打包试,负值要查根因,这样才吃得到真实的味道。
- 组合 $\{A,B\}$把两个强相关特征当作一个「料理组合」来对待,而不是各自单测。
- 组合打乱后分数 $s_{\{A,B\}}$同时打乱这两个特征的列,其余列不动,重新预测得到的验证分数。
- 组合重要度 $I_{\{A,B\}}$基准分减组合分,能反映协同贡献,避免逐个评估时的功劳漏算。
- 使用顺序先在单特征榜上粗筛,再对可疑的相关组合做一次「打包盲测」,两组结果对照着看。
实践工具:三行代码与手工实现
后厨不用真的把每道菜重做一遍才能知道换料效果——市面上已经有标准的「试菜工具箱」。sklearn 的 sklearn.inspection.permutation_importance 就是其中最常用的一件,传入训练好的模型、验证集特征、验证集标签,再指定重复次数,一次调用就能返回每个特征 K 次跌幅的完整矩阵。
拿到结果后,取 importances_mean 当排名依据,取 importances_std 画误差棒。手工实现同样不复杂:复制一份验证集、随机打乱某一列、重新 predict 并计算自定义指标、循环 K 次——这样做的最大好处是可以自由定制评分函数,比如换成 AUC、对数损失甚至业务成本函数。画图时经常给均值加误差棒,这就用到标准误(SE)的概念。
工具有了,谁都能给自己的模型办一场公平盲测——不再依赖厨师的自我感觉,报告里每一根误差棒都在替结论背书。
- 标准差 $\sigma_j$第 $j$ 个特征 $K$ 次重复跌幅的标准差,反映单次结果的离散程度。
- $\sqrt{K}$重复次数开根号,出现的分母越大,误差越小——这正是「测越多越有底」。
- 标准误 $\mathrm{SE}_j$均值估计的误差大小,画条形图时常用来给每个特征加一根竖直误差棒。
- 判读SE 相对均值很小,排名可信;接近甚至超过均值,说明这个特征的重要性波动极大。
对比与选型:何时相信这张榜单
盲测法虽好,也有成本:每换一味料就要让评审团把一桌菜全部重新试吃一遍。如果菜式有几百道(样本很多)、每味料试 10 轮,试吃成本相当可观;而问厨师只要一句话——内置重要性在训练时顺带就算出来了,完全不额外花钱。
两者的取舍,本质上是在「快但可能有偏见」和「慢但客观」之间做选择。内置重要性适合模型迭代早期快速粗筛,帮你在几十个特征里快速圈出候选;到了要上线、要汇报、要做特征删减决策的关键节点,就切换成排列重要性精排。如果模型里强相关特征成堆,还要辅以分组打乱。成本估算很简单:每个特征打乱 K 次,每次要预测验证集全部 N 条样本,总耗时大约如下。
聪明的后厨都是双轨制:日常试菜凭经验快速判断,正式发布招牌菜前必办盲测。模型团队也一样——内置重要性用来快速探路,排列重要性用来拍板定案,两者配合才是成熟的模型解释姿势。
- 验证集样本数 $N$每次打乱后都要对全部 $N$ 条验证样本重新预测一遍,样本越多开销越大。
- 重复次数 $K$每个特征都要重复 $K$ 次打乱-评分,所以总预测次数再乘以 $K$。
- 单条预测耗时 $t_{\mathrm{inf}}$模型对一条样本做一次前向预测所花的时间,模型越深、特征越多,这个值越大。
- 权衡落地特征多、数据大的时候,先内置粗筛到前 20 个,再对候选做排列精排,成本立刻可控。
AI 应用场景
场景一:信贷风控模型的特征白名单
阶段:模型评估与解释
解决的问题:监管要求解释「为什么拒绝这位客户的贷款申请」。内置重要性会把基数大的特征(如历史查询次数)捧上榜首,却把取值少但关键的「收入稳定性」压到后排,误导风控策略调整。排列重要性像一场「换料盲测」:把每个特征在真实拒绝样本上逐个打乱,看模型分数跌多少,给出与业务直觉对得上的排序。
具体案例:某消费金融公司对 57 个特征的信贷评分模型做复查,用 permutation_importance 重排后发现内置榜前三名里有两个是噪声相关特征。按新榜单筛选后重训,模型 KS 提升 0.03,同时向监管提交了一份可复现的全局解释报告。
场景二:推荐系统特征工程的价值验证
阶段:特征工程评估
解决的问题:特征团队常常「造了一堆新特征却不知道有没有用」。盲加特征轻则浪费存储、重则过拟合掉线上效果。用排列重要性对比新旧特征加入前后的跌幅,就能量化新特征的边际贡献,用数据决定「上还是不上」。
具体案例:某推荐团队给排序模型新增「用户近 7 天点击序列的 embedding」后,跑排列重要性发现该特征跌幅 0.08,显著高于原有特征平均的 0.02,且重复 10 次标准差仅 0.005,遂决定上线,CTR 提升 2.1%。
场景三:医疗预警模型的医师友好解释
阶段:模型解释与合规评审
解决的问题:医生不信任「模型内部系数」,但容易理解「删掉这个变量,预测就崩」的证据。排列重要性把模型行为翻译成直观的「特征-跌幅」图,正是医师评审时最容易接受的解释形式。
具体案例:某三甲医院脓毒症早期预警模型评审会上,算法团队用排列重要性制作特征贡献榜,发现「体温」因与多个相关特征共享信息而被内置榜低估。改为打包打乱后确认其重要性显著,ICU 医生认可并推动模型进入试点。
Python 演示
import numpy as npfrom sklearn.datasets import make_classificationfrom sklearn.ensemble import RandomForestClassifierfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import accuracy_scorefrom sklearn.inspection import permutation_importance X, y = make_classification( n_samples=300, n_features=6, n_informative=3, random_state=42)X_train, X_val, y_train, y_val = train_test_split( X, y, test_size=0.3, random_state=42) model = RandomForestClassifier(n_estimators=50, random_state=42)model.fit(X_train, y_train) def perm_importance(model, X_val, y_val, n_repeats=10, seed=42): rng = np.random.default_rng(seed) base = accuracy_score(y_val, model.predict(X_val)) result = {} for j in range(X_val.shape[1]): drops = [] for k in range(n_repeats): X_perm = X_val.copy() X_perm[:, j] = rng.permutation(X_val[:, j]) score = accuracy_score(y_val, model.predict(X_perm)) drops.append(base - score) result[j] = (np.mean(drops), np.std(drops)) return result print("内置重要性:", np.round(model.feature_importances_, 3)) imp = perm_importance(model, X_val, y_val)for j, (mean, std) in imp.items(): print(f"特征{j}: {mean:.3f} +- {std:.3f}") sk_imp = permutation_importance( model, X_val, y_val, n_repeats=10, random_state=42)print("sklearn排列:", np.round(sk_imp.importances_mean, 3))
base = accuracy_score(y_val, model.predict(X_val))先测基准分,相当于盲测前先给原配方打分。X_perm[:, j] = rng.permutation(X_val[:, j])只打乱第 j 列特征的值,其余列原样保留,这就是「换掉一味料」。drops.append(base - score)每次打乱后记录一次跌幅,凑齐 K 次重复。result[j] = (np.mean(drops), np.std(drops))多次重复取均值与标准差,均值定排名、标准差定可信度。permutation_importance(model, X_val, y_val, n_repeats=10, random_state=42)sklearn 官方一行实现,结果应与手工版基本一致。print("内置重要性:", np.round(model.feature_importances_, 3))打印树模型自带的基尼重要度,方便和盲测榜对照,观察排名差异。
常见误区
误区模型训练完直接打印 `feature_importances_`,这就是最权威的特征排名,排列重要性是多余的重复劳动。
正解基尼重要度是「厨师自评」:它按分裂次数与不纯度下降累加功劳,天然偏向取值多、更容易被选中分裂的特征;强相关特征会轮流分裂导致功劳被均摊;而且它在训练集上累计,会把对噪声的过拟合当成「贡献」。排列重要性则是「盲测换料」,在验证集上直接测量预测能力的实际跌幅,不依赖树的分裂偏好,更贴近「这个特征对预测结果到底有什么用」。
为何常见:内置重要性一行代码就能拿到,名字又像「官方权威指标」,很多人默认它最客观,忽略了它背后的统计偏见。
误区辣椒重要度是 0.26,那删掉辣椒准确率大约也会掉 0.26,直接拿这个跌幅估算上线效果。
正解排列重要度衡量的是「在这个模型、这批数据上,打乱该特征后的预测质量跌幅」,它既不是因果贡献,也不是把特征整列删掉后重训的效果。强相关特征会被分摊,删除后模型会重新分配权重,实际损失往往既不同于单个跌幅、也不等于跌幅之和。它适合用来「排名与解释」;若想估计删除后的真实损失,应该做特征子集重训实验。
为何常见:打乱和删除在直觉上很像,人们容易想当然地把「打乱的跌幅」换算成「删除的损失」。
误区打乱之后分数反而涨了,说明这特征就是毒药,赶紧从特征集里删掉!
正解负值意味着「打乱反而让预测更好」,说明该特征在当前模型里携带的更多是噪声或过拟合模式,比如一个和标签几乎无关的高基数 ID 列。但它也可能是小样本、验证集噪声大造成的偶然。正确姿势是多重复几次、固定随机种子确认负值稳定出现,再删除,并在独立测试集上复验效果。
为何常见:人天然想把负数解读成「坏东西」,但统计噪声和过拟合也能制造负值,单次出现不能当实锤。
误区每列打乱一次、算一次跌幅就够了,重复十次太浪费算力。
正解单次打乱的结果严重依赖随机状态,换一个随机种子,同一特征两次跌幅可能差好几个百分点。工程标准是每个特征重复 5-10 次以上,报告均值与标准差:均值决定排名,标准差决定可信度。sklearn 的 n_repeats 参数就是专门干这个的。
为何常见:直观上「打乱一次代表一种效果」,容易忽略打乱这个动作本身也是一个随机过程。
误区特征 A 和 B 强相关,单独打乱谁都不怎么跌,说明这两个特征都是鸡肋,可以一起删掉。
正解强相关特征会互相「顶班」:打乱 A 时 B 的信息还在,预测几乎不受影响。此时应把 A、B 打包成一组同时打乱,计算组合重要度,组合跌幅往往非常显著。这也提醒我们:排列重要度解释的是「在现有特征集合下的边际贡献」,而不是特征的独立价值。
为何常见:榜单是「逐个打乱」的结果,人们直接把它读成「每个特征的独立重要性」,忽略了特征之间的信息重叠。
面试题
Q1. 排列重要性的核心思想是什么?
- A.打乱特征值观察性能下降← 正确答案
- B.删除特征后重新训练看效果
- C.计算特征与标签的相关系数
- D.统计特征在树中的分裂次数
答案:A。排列重要性是「换料盲测」——把某一列特征的值在样本间随机打乱,再看模型性能掉多少,模型本身不重训。A 正合此意;B 错在要重新训练,排列法恰恰「模型不动、只动数据」;C 是线性相关思维;D 是内置重要性的逻辑。
Q2. 与树模型内置重要性相比,排列重要性的最大优势是?
- A.计算速度更快且无需验证集
- B.直接把重要度归一化到一
- C.直接度量真实预测贡献更客观← 正确答案
- D.无需任何重复采样便可稳定
答案:C。排列重要性在验证集上直接测量「打乱后预测能力跌多少」,不受树分裂偏好影响,是名副其实的盲测。A 错,它需要额外预测反而更慢;B 错,它不保证和为 1;D 错,单次打乱方差大,必须重复采样。
Q3. 某特征被打乱后验证集分数反而上升,最合理的解释是?
- A.模型对该特征信息存在过拟合← 正确答案
- B.该特征其实非常关键重要
- C.打乱操作必然出现代码错误
- D.验证集样本数量一定过小
答案:A。打乱后分数升高,说明原模型在该特征上学到的模式在验证集上是「帮倒忙」的,典型表现是过拟合了噪声或与标签几乎无关的高基数特征。B 与现象完全相反;C、D 说得太绝对,负值也可能是数据本身的统计现象,不能直接归咎于 bug 或样本量。
Q4. 为什么排列重要性需要多次重复并取平均?
- A.单次打乱方差大需降低随机误差← 正确答案
- B.增加计算量让项目成本更高
- C.使所有重要度加和恰好等于一
- D.避免模型需要重新拟合的问题
答案:A。打乱是随机过程,单次结果受随机种子影响很大,就像一场盲测可能碰上评审状态不佳。重复 K 次取均值能抹平随机误差,再配合标准差判断排名可信度,这也是 sklearn 里 n_repeats 参数存在的意义。
Q5. 关于树模型内置重要性的缺陷,下列说法正确的有?
- A.偏好取值多的连续型特征← 正确答案
- B.相关特征之间会分摊重要度← 正确答案
- C.在训练集上评估易受噪声影响← 正确答案
- D.一定会和真实贡献完全一致
答案:ABC。基数高的特征更容易被选中当分裂点,这是基数偏好;强相关特征轮流分裂、功劳被均摊;在训练集上累计还会把过拟合当贡献。A、B、C 都是内置重要性被诟病的点。D 恰恰相反,内置重要性并不保证与真实贡献一致,这正是要用排列重要性复查的原因。
Q6. 特征 A 与 B 强相关:单独打乱 A 分数几乎不掉,同时打乱 A、B 大幅下降。这说明?
- A.两特征共享信息打乱被补偿← 正确答案
- B.A 和 B 其实都完全不重要
- C.模型没有学到 A 的任何信息
- D.必须先打乱 B 再打乱 A 才行
答案:A。就像番茄和罗勒同菜出现,单独换掉番茄时罗勒的香气还在。A 与 B 信息重叠,单独打乱一个,另一个能补位,所以单测跌幅小;同时打乱两者才暴露真实贡献。这提醒我们要对相关特征做「打包盲测」。B、C、D 都与原理相悖。
Q7. sklearn 的 permutation_importance 中 n_repeats 参数表示?
- A.需要打乱的特征总个数
- B.每个特征打乱重复的次数← 正确答案
- C.交叉验证划分的折数
- D.并行执行的线程数量
答案:B。n_repeats 是「每场盲测办几轮」——即每个特征独立重复打乱-评分的次数,默认 5,常用 5-10 甚至更多,用于降低单次打乱的随机误差。它不管特征个数、不划分交叉验证折数,也不决定线程数。
Q8. 用排列重要性做特征筛选时,正确的做法有?
- A.在独立验证集上完成全部评估← 正确答案
- B.重要度为负立即删除该特征
- C.报告均值并参考标准差判断← 正确答案
- D.保留排名靠前少数特征必然最优
答案:AC。A 对,评估必须在模型没见过的干净验证集上做,否则会因过拟合高估跌幅;C 对,均值定排名、标准差定可信度,波动大的排名要谨慎;B 错,负值要先排查是不是噪声和偶然,不能一票否决;D 错,排名靠前的特征组合不一定最优,要用累计贡献率等方法综合判断。
Q9. 下列哪一步不是排列重要性的必要步骤?
- A.计算原模型在验证集的基准分
- B.打乱目标特征的值并重新预测
- C.重新训练一遍完整的模型← 正确答案
- D.计算打乱前后分数的差值
答案:C。排列重要性的精髓就是「模型不动、只动数据」——基准分、打乱重预测、算差值三步缺一不可,唯独不需要重新训练。这正是它比「重训式评估」成本低、比内置自评更客观的原因。
Q10. 关于排列重要性的应用,说法正确的有?
- A.可用于任何有评分指标的预测模型← 正确答案
- B.只能用于随机森林等树模型
- C.可用于特征筛选与模型解释← 正确答案
- D.要求特征必须服从正态分布
答案:AC。排列重要性只需要「模型能对验证集做预测、且有评分指标」,对模型的内部结构不做假设,XGBoost、逻辑回归、神经网络都能用;它也不要求特征服从任何分布,因为打乱操作与分布假设无关。B、D 都是常见误解。