随机森林分类
这个方法是做什么的
用一组自变量预测一个类别型因变量属于哪一类。做法是对训练样本做有放回重抽样,在每一份抽样上长出一棵分类树,每个节点只在随机抽到的一部分自变量里找最优切分,最后让 100 棵树投票。单棵树容易把训练数据的偶然波动当成规律,而不同的树犯的错各不相同,投票时互相抵消掉一部分。你不必事先写出函数形式,非线性关系与变量交互由树自己切出来;定类自变量可以直接拖进自变量区,管线内会做独热编码。代价是没有系数、没有优势比、也没有针对任何一个自变量的 p 值。
报告共五张卡。卡① 给建模设置、因变量的类别分布,以及八项机器学习特有的体检(样本量与特征维数、类别不平衡、分层折数可行性、特征尺度、共线性、重复记录、标签泄漏 NMI 扫描、高基数定类特征);卡② 表4 是分层 5 折交叉验证的九项指标,表5 把准确率与“无信息率”做单侧精确二项检验;卡③ 出混淆矩阵、ROC、PR 与各类别指标四张图;卡④ 给逐类别派生指标、κ/MCC/平衡准确率/AUC 的 Bootstrap 区间,以及置换重要性;卡⑤ 给可誊入论文的规范表述。读之前先记住一处口径不统一:卡②③④ 的主结果算在全部 240 例的折外预测上,而卡④ 表8 的置换重要性只算在留出测试集那 48 例上,两者的样本量差五倍。
需要准备什么数据
- 放入因变量Y:不限
- 放入自变量X:至少 1 个
数据要求
- 数据表至少 30 行。
- 单列缺失率不超过 20%。
- 不接受取值全都一样的列(零方差列没有可分析的变异)。
- 「放入因变量Y」的类别数需在 2~20 之间。
- 「放入因变量Y」的每一组至少 5 个样本。
以上条目由系统从该方法的校验规则直接生成,与上传数据时的实际拦截规则一致。
什么时候用它
- 判断“会不会达成目标 / 会不会流失 / 属于哪一档”,而自变量既有数值也有类别
- 关系明显不是直线,且存在交互(折扣力度在大店和小店里作用不同),又不想手工构造交互项
- 自变量里混着几个不确定有没有用的列,希望模型自己压低它们的权重,而不是先做筛选
- 只关心预测准不准,不需要给每个自变量一个可解释、可检验的系数
前提:因变量必须是定类列,2~20 个类别,且每个类别至少 5 例——少数类只有 4 例时请求会被直接挡下(分层 5 折交叉验证放不下);整表至少 30 行,29 行同样会被挡下。所选变量上有任一缺失的整行会被剔除,缺失比例超过 20% 的列不要拖进来。同一列不能同时进因变量区与自变量区,那等于把答案当特征。
什么时候不要用它
- 因变量是连续数值(销售额、评分):用「随机森林回归」。
- 要的是每个自变量的效应方向、大小与显著性:本模块整份报告没有系数表。二分类结局要优势比与置信区间用「逻辑回归」;结局有序(轻 / 中 / 重)用「有序逻辑回归」。
- 要一张能打印出来、照着走的判别规则:森林是 100 棵树投票,画不出单一路径;需要可读规则用「C&RT决策树」或「CHAID决策树」。
- 观测之间不独立(同一批门店的多期记录、同一所学校内的学生):交叉验证会把同一个体拆到训练折与验证折两边,性能虚高;有个体—时间两维结构用「面板模型」,分层嵌套用「混合模型」。
- 少数类占比极低(1:20 以上):先用「样本均衡诊断」看清结构,再决定重采样或改看哪些指标;直接跑本模块会得到一份准确率漂亮而毫无用处的报告(见下)。
- 只想知道两个分类变量有没有关联:这是列联表问题,不必建模,用「卡方检验」。
容易误读的地方
- 准确率高不等于模型有用,少数类越稀少越是这样。 把演示数据的类别改成 216∶24(不平衡比 IR=9.00)重跑,表4 的 Accuracy 反而升到 0.8875,比原来的 0.7458 还“好看”;而同一张表里平衡准确率只有 0.4930、Macro-F1 只有 0.4701、Cohen's κ 是 −0.0199,卡④ 表6 少数类“1”的召回率是 0.0000、F1 印成“—”。表5 的无信息率检验 p=0.778,不拒绝“模型不优于恒预测多数类”,卡⑤ 于是写“模型尚不满足全部可用性判据”。表4 第一行从来不是结论,必须连表5 一起读。
- “树的数量”不是控制过拟合的旋钮。 装袋的性质是加树只降低预测方差,不会让模型更贴合训练数据。实测把树的数量从 100 改到 500,交叉验证 Accuracy 一位不差还是 0.7458、κ 还是 0.4925,Macro-F1 只从 0.7455 挪到 0.7453,代价是跑得更慢。卡① 那句“最大深度越大越容易过拟合”才指向真正能压复杂度的两个控件:把“最小叶节点样本数”从 1 调大,或给“最大深度”设一个上限。
- 同一个指标在报告里有两个数值,既不是矛盾也不能混用。 表4 的 ROC-AUC 是 0.8151、Cohen's κ 是 0.4925,而卡③ 的图题与卡④ 表7 写的是 0.8141 与 0.4921。两边都对:表4 是五折各自算完再取平均(所以它才有“折间标准差”这一列),卡③④ 是把五折的折外预测汇总成一份 240 例的预测后重算一次。往外报时挑定一个口径并写明,不要一处引表4、一处引表7。
- 置换重要性回答的是“这个模型用没用上它”,不是“它有没有作用”。 表8 的做法是打乱某一列后看 Macro-F1 掉多少,重复 10 次给出 t 区间。演示数据里三个自变量的区间下限都大于 0,但表8 的第三条表注写着“置换重要性衡量的是预测贡献,不是因果效应,也不等价于回归系数的显著性”。它还对共线性敏感:卡① 表3 一旦把“定量特征共线性”判成中度以上,相关的两个自变量会互相稀释重要性,真正有用的变量可能因为有替身而排到末位。
- “留出测试集”那一列不是第二次独立验证。 交叉验证跑在全部 240 条上,所以留出的 48 条照样落在各折的训练折里(每条都进 4 折)。它与五个折的验证集重合率实测分别是 14.6%、27.1%、18.8%、20.8%、18.8%,都在随机水平(20%)附近,说明它不是某一折的副本,但也不是一批新样本。表4 的表注写着“仅一次划分,波动大,列此仅作对照”。要声明模型可推广,只能另找一批完全没参与过建模的数据。
报告里有什么
- 输出结果一:数据概览与前提检验
- 输出结果二:交叉验证性能主结果表
- 输出结果三:分类效果可视化
- 输出结果四:效应量与事后分析
- 输出结果五:结论与学术表述
卡③ 全部基于交叉验证折外预测绘制:混淆矩阵与曲线所用的预测都来自模型未见过该样本的那一折,不是训练集回代结果。