卷 V · 交代CH 20工位 20/24

把结果读成一句人话(以及为什么必须画图)

工位 STEP 8.2 / 8.3 / 8.5 可视化 · 解释 · 迭代 20% 的收尾 评分员在找:一句业务方能懂、而且经得起追问的结论;以及你有没有承认模型的局限——尤其是别把相关说成因果。

Step 8.3 只有三个词:interpret the results。它是全课最短的要求,也是最容易写错的一节——因为写错的方式不是「写得不好」,而是写出一句听起来很专业、其实站不住脚的话。这一章用两个实验说明这有多容易发生:一次是统计量骗你,一次是回归系数骗你。

Anscombe共线性符号翻转相关≠因果局限性

实验一:四份统计量完全相同的数据

1973 年,统计学家 F. J. Anscombe 造了四组数据,每组 11 个点。它们的均值、标准差、相关系数、回归线、R² 全部相同。下面这台把它们画出来,并当场算了那些统计量:

数据集x 均值y 均值相关 r回归线但它其实是
I9.007.500.816y = 3.0 + 0.5x正常的线性关系+噪声
II9.007.500.816y = 3.0 + 0.5x一条完美的抛物线
III9.007.500.816y = 3.0 + 0.5x一条完美直线 + 一个离群点
IV9.007.500.816y = 3.0 + 0.5xx 只有两个取值,整条回归线由一个点决定

如果你只报统计量,这四份数据的报告会一字不差:「x 与 y 存在较强正相关(r = 0.816),线性回归显示 x 每增加 1 单位,y 增加 0.5 单位。」

而这句话对第 II、III、IV 组都是错的:II 组的关系是二次的,III 组的相关完全由一个离群点撑起,IV 组更极端——去掉那个 x=19 的点,剩下 10 个点的 x 全是 8,相关系数无法定义。

这就是 Step 8.2 为什么单独占一条(visualize the data, results, models and patterns):可视化不是给报告配图,它是一种检验手段。你在第 8 章那个散点图里看到「点云是弯的」,就是这种检验的成果——它直接导致了第 11 章的对数变换。

◆ 三个必画的诊断图(画完再写结论)
  1. 目标 vs 每个重要特征的散点图。看形状(直线?弯的?分层?),看有没有单点撑起整条关系。
  2. 回归的残差图(预测值 vs 残差)。理想是一团没有形状的云。如果呈喇叭形 → 异方差;如果有弯曲趋势 → 你漏了一个非线性项。这一张图能让 8.4 的「结果可靠性」讨论立刻有内容。
  3. 分类的概率分布图(按真实类别分开画预测概率的直方图)。两个峰分得开 → 模型有信心;重叠严重 → 阈值怎么定都会有大量错分。它比 ROC 更直观地解释「为什么召回和精确率不能兼得」。

实验二:同一列数据,两个符号

现在换一种被骗的方式。下面这台对示例数据里的每个数值列做了三件事:算它与目标的相关系数、单独放进回归模型看系数、七列一起放进去看系数:

与 u5mr 的相关 r单独入模的系数七列一起入模的系数标准化后(每 1 个标准差)
每千人医生数−0.748−45.7+2.496+0.59
人均 GDP−0.674−0.006499+0.0007032+1.06
清洁水覆盖率−0.829−1.255−0.4336−4.17
疫苗覆盖率−0.778−1.231−0.3273−3.01

看第一行:医生密度与死亡率的相关系数是 −0.748(医生越多,死亡率越低),单独进模型的系数是 −45.7(同一个方向)。但七列一起放进去,它的系数变成了 +2.496 —— 正的。

如果你照着这个系数写解释,会写出:「模型显示增加医生密度会提高儿童死亡率。」这句话会毁掉整份报告的可信度,而它完全是「照着输出写」的结果。

为什么会这样:共线性

第 12 章已经给出了线索:七个特征的第一主成分独占 70% 的方差,说明它们讲的是同一件事——人均 GDP 高的地方,医生多、水干净、识字率高。相关矩阵里这些列之间普遍在 0.7 以上。

当 GDP、清洁水、识字率、城镇化率已经把「发展水平」这件事解释掉之后,剩给医生密度的只是残差里的一点边角——而那点边角的方向可以是任意的。它甚至可能捕捉到一个反向机制:医生多的地方也可能是因为那里病人多、疾病负担重。

正确的写法:

8.3 解释(节选)

在单变量层面,医生密度与 5 岁以下死亡率呈显著负相关
(r = −0.748)。但在纳入全部七个特征的多元回归中,其偏回归
系数变为正(+2.50)。这一符号反转是共线性的典型表现:七个
特征的第一主成分已解释 70.0% 的总方差(见 4.1),说明它们
共同刻画同一潜在维度「综合发展水平」。当经济与基础设施变量
已进入模型后,医生密度的偏效应不再具有独立的解释意义。

因此本报告的解释限定如下:
· 本模型用于预测与排序,不用于因果推断;
· 单变量层面的相关性可用于描述(「医生稀少的地区风险更高」),
  但不可解读为「增加医生将降低死亡率」这一因果主张;
· 若需回答后者,应采用第 14 章所述的增量响应建模或准实验设计
  (见 9.4 未来增强)。
⚠ 顺带说:原始系数不能互相比大小

上表第三列里,人均 GDP 的系数是 +0.0007,医生密度是 +2.496。看起来医生密度的影响大了三千倍——其实完全没有可比性,因为一个的单位是「每 1 美元」,另一个是「每 1 人/千人」。

要比大小,就看标准化系数(第四列:系数 × 该列标准差,含义是「该列变化 1 个标准差时目标变化多少」)。这时才看得出真正最有力的两列是清洁水覆盖率(−4.17)和疫苗覆盖率(−3.01)

报告里给标准化系数还有一个额外好处:它天然对应「相对重要性」,可以和决策树的特征重要度并排比较——两个来自完全不同算法的排序如果一致,你的结论就有了双重证据。

8.3 的四句话模板

把 Step 8.3 写成四句话,每句一个层次。这个结构能防住绝大多数解释错误:

层次句式本例
① 事实模型输出是什么「模型在测试集上召回 0.967、精确率 0.678(阈值 0.15);前 20% 名单覆盖 45.9% 的未达标地区,提升度 2.36。」
② 模式它抓到了什么结构「风险主要由人均 GDP 划出的一条门槛决定(约 1 200 美元);门槛之上,疫苗覆盖率是否达到 71% 成为区分因素。」
③ 业务含义决策者该怎么做「贫困地区需基础投入,仅提高疫苗覆盖不足以达标;中等收入地区的边际收益集中在疫苗服务上。名额建议全部投向前两个等分,第三等分起停止。」
④ 边界这个结论在哪里不成立「本模型不支持因果推断(共线性见上);训练数据为 2015–2023 年 6 个地区,外推至未观测地区需按地区分组交叉验证重估;若统计口径变化,需重新校准阈值。」

第 ④ 句是很多人不敢写的,但它恰恰是加分项。「Critical Thinking」那条毕业生能力(LO 里 4、5 都指向它)要的就是这个:你知道自己的结论到哪里为止。一份没有局限性讨论的报告,读起来像推销;有局限性讨论的,读起来像研究。

8.5 迭代:把回头的痕迹留下来

第 2 章已经讲过这一节的价值,这里给一个具体的、可以照抄的写法——它把这本书前面几章的发现串成了一条链:

8.5 Iteration

本项目在解释阶段共触发三次回溯:

第一次(→ Step 3.1):2.3 的相关矩阵显示 rate_reported 与目标
相关系数达 0.9998。返回 3.1 核对其定义,确认为目标变量的同源
记录,予以排除。排除前的模型准确率为 0.986、AUC 0.999,属
目标泄漏所致的虚高。

第二次(→ Step 3.2):首轮采用全局中位数填补 literacy,模型
在低识字率地区的召回偏低。检查发现该列缺失非随机(缺失组的
人均 GDP 系统性更低),改为按 region 分组填补,RMSE 由 6.42
降至 6.40,召回改善(见表 8.4-2)。

第三次(→ Step 6.3):初始树深度取默认值,训练准确率 0.905
而测试准确率仅 0.799。扫描深度 1–8 后发现深度 2 已达最佳测试
表现(0.861),深度 3 起开始过拟合(树在与目标近乎无关的
spend 列上分裂)。最终采用深度 2。

本报告呈现的是第三轮结果;前两轮指标见附录 B。

这一段有三个特点值得模仿:每次回溯都写清「谁触发的 → 回到哪一步 → 改了什么 → 指标怎么变」;三次回溯覆盖了三个不同的步骤(3.1、3.2、6.3);并且诚实地把第一轮那个更好看的 0.986 写出来并解释为什么不要它。

▣ 本章交付物 —— 报告里放什么

1. Step 8.2:三张诊断图(特征散点、残差图或概率分布图、ROC 或增益图),每张配「观察 + 因此」的图注。

2. Step 8.3:四句话模板(事实 → 模式 → 业务含义 → 边界),约 250 字。

3. 共线性声明(若出现符号翻转):上面那段模板。附标准化系数表,并与树的特征重要度并排比较。

4. Step 8.4:基线对比、指标选择理由(第 18 章)、代价敏感性(第 18 章)、稳定性检查(第 17 章的方差)、局限性清单。

5. Step 8.5:迭代记录,每次一段四要素。至少写一次,最好三次。

这一章的一句话

四份统计量完全相同的数据长得完全不同(所以必须画图),而同一列数据单独入模系数 −45.7、七列一起入模变成 +2.5(所以不能照着系数写因果)——Step 8.3 按「事实 → 模式 → 业务含义 → 边界」四句话写,第四句最不敢写,也最值分。

下一章是 Step 9:假设这个模型真的要用起来。谁来用、多久重训、怎么发现它坏了——而「坏了」的方式可能会让你意外:准确率几乎没掉,精确率掉了 12.7 个百分点。