跳到主要内容

机器学习与数据挖掘

随机森林特征重要性

用一丛决策树在分裂时减少了多少不纯度,给特征打分并排序;可选按分组各自建林再对比。

更新日期 2026-08-29 机器学习

这篇能回答什么

随机森林特征重要性回答的是「这片森林在预测目标时,主要靠哪些列来做分裂」。每棵树在节点上挑选能让不纯度下降最多的特征;把所有树上的下降加总并归一,得到基尼重要度(也称平均不纯度减少,MDI)。目标唯一值多于 10 且为数值时按回归森林拟合,否则按分类森林拟合。可选 1–2 个定类分组,各组单独训练,用来对比不同城市或房屋类型下的排序。

适合:在非线性、有交互的特征里做变量筛选,或给后续回归决定「先看哪几列」。教学示例目标为总价(万元),特征为面积(平米)、楼层、总楼层、建筑年份。

什么时候不该用

基尼分只说明「分裂时用得多」,不说明把预测推高还是拉低,也不能当因果。需要方向与局部贡献时用SHAP 模型解释。没有目标、只想分群时用K-Means。有效行少于 10 不能运行。房源ID、小区名称这类准标识符不要当特征。

如何选择方法

三种常见「谁重要」不要混用。基尼重要度快、总和为 1,但偏爱取值水平多的列;排列重要度看打乱后误差升多少,和模型种类无关;SHAP 把单次预测拆成可加贡献并带方向。线性回归的 |Beta| 只在近似直线时可比。

  • 随机森林特征重要性:≥2 个特征 + 1 个目标,输出 Gini 与累积;可分组。

  • SHAP 模型解释:同一类树模型,要 mean|SHAP| 与正负向。

  • BP 神经网络预测:要测试集预报误差,重要度是排列而非基尼。

  • 线性回归:要带标准误的边际系数,而不是森林分裂份额。

输入、输出与限制

输入

特征可为定量或定类:定类会按水平做哑变量,再进入森林。目标 1 个,定量或定类均可。分组变量可选,须为定类。

  • 特征变量:最少 2 个,最多 100 个。

  • 目标变量:正好 1 个定量或定类变量。

  • 分组变量:最少 0 个,最多 2 个定类。

输出

结果表列:特征名称、基尼重要度、累积重要度。表注带训练集 R²(回归)或训练集准确率(分类)。同时输出重要度柱状图与文字洞察。若指定分组,每个组一张表,并对比各组模型得分。

产品限制

  • 有效样本至少 10 行;拟合最多 4000 行。

  • 森林固定 40 棵树,随机种子 42;深度不额外封顶。

  • 目标唯一值 ≤10 或为字符串 / 布尔时走分类,否则走回归。

  • 报告的是训练集拟合,没有留出测试集,不能当成泛化分数。

  • 这些上限来自 StatsX,不要用 SPSS Modeler 随机森林或 Python 默认 100 棵树对格子。

案例

研究问题。 综合评价教学表希望在预测总价时,先排出户型结构里哪一列最常被树拿来分裂,而不是先解释系数符号。

教学示例工作表为「Sheet1」,有效样本 600,任务为回归。特征为面积(平米)、楼层、总楼层、建筑年份,目标为总价(万元)。面积(平米) 的基尼重要度为 0.5199,前三项累积约 0.85,表注训练集 R²=0.8823。下载后按同样四列特征、总价目标即可复现。

下载教学示例表(综合评价)

在 StatsX 中操作

  1. 步骤 1 · 上传表格

    打开工作台,将 Excel / CSV / JSON 拖入上传区。本案例使用综合评价 xlsx,确认工作表为「Sheet1」。单文件不超过 20 MB。

  2. 步骤 2 · 查看画像与质量

    确认总价为定量目标,面积(平米)、楼层、总楼层、建筑年份为定量特征。不要勾选房源ID、小区名称。若要对比不同城市的排序,把城市放到分组变量(最多 2 个)。

  3. 步骤 3 · 选择「随机森林特征重要性」

    在算法目录搜索「随机森林」或「特征重要」并点选。适合/可用标记仅供参考。

  4. 步骤 4 · 指定特征与目标并运行

    特征变量勾选面积(平米)、楼层、总楼层、建筑年份(至少 2 个);目标变量选总价(万元)。本教学示例不设分组。点击运行分析。

  5. 步骤 5 · 阅读结果

    先看表注里的任务类型与训练集 R²,再沿基尼列往下读到累积接近 1。柱状图截断时以表为准。

StatsX 工作台上传综合评价表
将教学示例表拖入工作台上传区。
列画像确认住房特征与总价
列画像确认四列户型特征与总价为定量。
在目录中选择随机森林特征重要性
在算法目录中选定「随机森林特征重要性」。
为随机森林指定四列特征与总价
特征勾选面积、楼层、总楼层、建筑年份,目标为总价后运行。

如何阅读输出

下表由同一份教学示例在 StatsX 中拟合 40 棵回归树得到。有效样本 600。面积(平米) 的基尼重要度 0.5199,约为 楼层(0.1708)的三倍;总楼层 0.1594、建筑年份 0.1499,四者加总为 1。表注训练集 R²=0.8823,说明这片森林在已经见过的 600 行上拟合很好,不是测试集分数。

随机森林特征重要性排序 (任务类型: 回归)
特征名称基尼重要度 (Gini Importance)累积重要度
面积(平米)0.51990.5199
楼层0.17080.6908
总楼层0.15940.8501
建筑年份0.14991

基尼重要度反映了该特征在决策树所有节点分裂中降低不纯度的总贡献,总和为 1。 训练集R²=0.8823。

随机森林基尼重要度表
工作台中的重要度表,数字应与上表一致。
随机森林核心特征重要度排名图
基尼重要度柱状图;面积明显高出楼层、总楼层与建筑年份。

【随机森林】任务=回归,目标=总价(万元),样本量=600,特征数=4,训练集R²=0.882。

解读顺序建议:任务是回归还是分类 → 训练集分数是否高到可疑 → Gini 排序与累积(本例 Top3 约 85%)→ 头部是否被定义性变量垄断。总价与面积近乎核算关系,面积排第一是预期,不能写成「楼层不重要所以定价可忽略楼层」。若分组后某城样本不足 10,该组会被跳过。

理论与公式

回归树常用平方误差不纯度,分类树常用基尼不纯度。以二分类节点为例,基尼为:

一次分裂把节点 t 分成左右子节点,不纯度下降为 n_t G(t)−n_L G(L)−n_R G(R)(回归则把 G 换成组内平方和)。特征 j 的基尼重要度是它在所有树、所有节点上的下降之和,再除以全部特征的总和,使 \sum_j I_j=1。

排列重要度则固定模型,打乱某一列后看误差升多少,与分裂次数无关。SHAP 再进一步给出每条样本、每个特征的有符号贡献。本页只计算 MDI,不计算后两者。

注意事项

  • 高基数定类展开后哑元很多,基尼会偏向「好切的细水平」,排序会被稀释或抬高。

  • 共线特征会分摊下降:面积与总价绑定强时,其它列即使有用也会看起来更弱。

  • 训练集 R²=0.88 不能写成「模型能预测未见过的房价」,那是拟合而非验证。

  • 40 棵树、4000 行上限与种子 42 是产品规则;换 n_estimators 后排序可能微变。

  • 分组建模不是交互项检验,只是把样本切开各训一林。

  • 不能替代随机化试验:分裂贡献 ≠ 干预效应。

常见问题

参考文献

  • Breiman, L. Random forests[J]. Machine Learning, 2001, 45: 5–32.

  • Strobl, C., Boulesteix, A.-L., Zeileis, A., Hothorn, T. Bias in random forest variable importance measures[J]. BMC Bioinformatics, 2007, 8: 25.

  • Lundberg, S. M., Lee, S.-I. A unified approach to interpreting model predictions[C]//Advances in Neural Information Processing Systems. 2017.