Exhaustive CHAID决策树

所属分类:决策树与神经网络

这个方法是做什么的

和「CHAID决策树」用的是同一套卡方框架、同一份六卡报告,差别只在怎么找类别的合并方案。普通 CHAID 是贪心的:反复并掉“最不显著的一对”,并到不能再并为止,得到的只是一条路径上的局部最优。Exhaustive CHAID 不走这条路,它把候选划分枚举一遍,逐个算 Bonferroni 校正后的 p,取最小的那个。有序自变量(连续变量分箱后就是有序的)只枚举“连续区间”的划分,候选数 2^(k−1)−1;定类自变量则在水平数不超过 6 时才真正枚举,超过 6 就自动退回贪心合并。

报告结构与 CHAID 完全一致,读法也一致:卡⑤ 表9 的“分裂统计量”仍是分组后的 Pearson χ²,“分裂 p”仍带 Kass(1980) Bonferroni 乘子。真正不同的是卡⑥ 那段学术表述会替换成枚举口径,并且写了一句关键的话:“枚举本身是一次大规模多重检验,校正在这里不是可选项:不校正会把纯噪声也判成显著分裂。”这句不是修辞——校正乘子随候选数一起长大,所以更彻底的搜索并不必然长出更大的树:把 CHAID 的那份 240 条演示数据同时喂给两个模块,CHAID 得到 7 个叶节点、它只得到 6 个。

需要准备什么数据

  • 放入[定类]目标变量Y:定类变量(分组/标签)
  • 放入自变量X:至少 1 个

数据要求

  • 数据表至少 20 行。
  • 单列缺失率不超过 30%。
  • 不接受取值全都一样的列(零方差列没有可分析的变异)。
  • 「放入[定类]目标变量Y」的类别数需在 2~20 之间。
  • 「放入[定类]目标变量Y」的每一组至少 2 个样本。

以上条目由系统从该方法的校验规则直接生成,与上传数据时的实际拦截规则一致。

什么时候用它

  • 已经跑过「CHAID决策树」,但担心贪心合并把某个真正好的分组方案错过了
  • 自变量是定类且水平数不多(≤ 6),此时枚举才真正生效,也最可能与贪心给出不同答案
  • 样本量和变量数都不大,跑一次几十秒可以接受,而你要的是“这一层我确实找过全部方案”
  • 需要在方法学部分交代分裂搜索是穷举而非启发式的场景(论文审稿常问这一条)
  • 想拿它和贪心 CHAID 的结果互相印证:两边结论一致,比单跑一次更有说服力

前提与「CHAID决策树」完全相同:目标变量必须是定类(2~20 类)、每类至少 2 条记录,至少 20 条完整记录,禁止常数列,目标变量不得同时出现在自变量里;含缺失的整行剔除;定量自变量唯一值超过 10 个时按分位切成至多 10 个区间;定类自变量原始水平 ≥ 9 时只保留频次前 7 名、其余归并为“其他”。

什么时候不要用它

  • 样本量大、变量多或急着出结果:同一份 240 条、3 个定量自变量的数据,端点耗时 35.76 秒,而「CHAID决策树」只要 1.98 秒、「C&RT决策树」只要 0.07 秒。数据规模再上一个量级会明显难等。
  • 自变量全是水平数很多的定类变量:这种情况下它逐个退回贪心,结果与「CHAID决策树」一模一样,白等一场。
  • 目标变量是连续数值:会直接报“当前算法要求目标变量为定类变量”,回归树请用「C&RT决策树」。
  • 想避开“分裂偏向候选切点多的变量”:枚举本身就是在放大候选数,靠 Bonferroni 事后压回来;从机制上解决这件事的是把选变量与找切点分开的「QUEST决策树」。
  • 目标是把预测做准,而不是把这一棵树找对:单棵树再优化也有限,改用「随机森林分类」或「XGBoost分类」。

容易误读的地方

  • “穷举”是对分裂准则穷举,不是对预测效果穷举。 同一份 240 条演示数据横比:CHAID 折外准确率 0.7292 ± 0.0642、它 0.7250 ± 0.0713;两边训练集准确率完全相同(0.7833),训练−CV 差 0.0542 对 0.0583。它找的是“Bonferroni 校正后 p 最小的划分”,那不等于“交叉验证表现最好的划分”,所以换成它之后指标变差是完全正常的结果,不是配置出错。
  • 定类自变量超过 6 个水平时,它就是普通 CHAID。 拿同一列数据分别喂给两套合并算法实测:水平数 5、6 时分组不同;水平数 7、8 时分组与校正 p 完全一致——源码在水平数超过 6 时直接调用贪心版本。再叠加建模前的水平归并(≥ 9 个水平只留前 7 名 + “其他”,共 8 组),结论是:只要某个定类自变量原始水平 ≥ 7,它在这一列上就永远走不到枚举分支。想用上穷举,先把类别归并到 6 个以内。
  • 慢在哪里可以估算。 一个被切成 10 档的有序自变量,单次分裂搜索要评 2^9−1 = 511 个候选划分;实测这一步贪心 0.016 秒、枚举 0.497 秒,约 31 倍。这个倍数还要乘上自变量个数、树的节点数、以及交叉验证的 5 折——这就是端到端从 2 秒变成 36 秒的来源。
  • 表9 的 p 依然不是“该变量显著影响目标”的检验。 Kass Bonferroni 校正的是枚举这一层,表注同时写明“另外两层多重比较仍未校正”(每节点在全部自变量上择优、逐层重复检验)。枚举得越彻底,被校正压住的 p 越大,这是设计如此,不要因为 p 变大就认为数据变差了。
  • 两个 CHAID 给出不同的树时,不要默认穷举那棵是对的。 树结构对数据扰动本来就敏感,表注也写着“删掉少量样本就可能选中另一个分裂变量”。差异应当按卡② 的折间 SD 来衡量:本次两边准确率相差 0.0042,而折间 SD 是 0.06~0.07,这点差别根本分辨不出来。真要选一个,看卡④ 的置换重要性排序是否稳定,而不是看谁的叶节点更少。

报告里有什么

  1. 输出结果一:数据概览与前提检验
  2. 输出结果二:交叉验证性能主结果表
  3. 输出结果三:树结构图与折外预测诊断图
  4. 输出结果四:判别效能与变量重要性
  5. 输出结果五:节点明细与叶节点决策规则
  6. 输出结果六:结论与学术表述
树结构图
图1 树结构图
树图自左向右展开:每个节点标注编号、本节点采用的分裂变量、落入该节点的样本数与预测类别;叶节点没有分裂变量。可用右上角切换器切到「表格」查看同一棵树的节点清单。
混淆矩阵(基于折外预测)
图2 混淆矩阵(基于折外预测)
混淆矩阵基于交叉验证的折外预测:行是真实类别、列是预测类别,对角线为预测正确的样本数。
ROC 曲线(正类 = 1,折外预测)
图3 ROC 曲线(正类 = 1,折外预测)
ROC 曲线以「1」为正类,基于折外预测概率绘制;对角虚线为随机猜测参考线,曲线越靠左上判别力越强。

在线统计分析平台 · 233 种分析方法 · AI 智能解读

在线使用
使用教程