卷 I · 看不出来CH 02深度 2/24

总有第三只手,在拧那个旋钮

混淆不是「数据有噪声」,也不是「样本不够」。它是一条结构上的通路:有一样东西同时决定了谁接受处理、和结果会怎样。它一个字节的数据都不弄脏,只是让你把别人的功劳记在了 X 头上。

混淆 confounding后门琥珀色

▷ 先判一次

某医院数据显示:住进 ICU 的病人,死亡率是普通病房的十几倍。这个数字说明了什么?

A ICU 的治疗有问题,需要整改B 这是「病情严重度」造成的,ICU 本身的效果无法从这个数字判断C 应该比较「同样病情的人」在两种病房的死亡率D B 和 C 都对,而 C 恰好就是解决 B 的办法

这一题几乎所有人都能答对。有意思的是:同一个人,换个场景就会答错。本章末尾会把那个场景摆出来。

混淆的定义,只有一句

◆ 混淆变量

一个变量 CXY 之间的混淆变量(confounder),如果它同时影响两者

      C
    ↙   ↘
   X  →   Y

关键在那个「同时」。只影响 X 的东西不是混淆(第 19 章会看到,那种东西反而是宝贝)。只影响 Y 的东西也不是混淆(它只增加噪声,不制造偏差)。必须两边都伸手。

ICU 那个例子里,那只手是「病情严重度」:病情越重,越可能被送进 ICU(影响 X),也越可能死(影响 Y)。于是「ICU 死亡率高」这句话里,混着两样东西:ICU 的真实效果(大概率是救命的),和「进 ICU 的人本来就快死了」。

这里有一个细节值得停一下:混淆并没有让数据变脏。医院记录的死亡率是准确的,样本是全量的,统计是对的。脏的不是数据,是从数据到结论的那一步

一根滑杆,把 + 拧成 −

光说不够。下面是一台世界机器,我在里面写死了三条箭头,其中 X→Y 的强度永远是 +0.30,不会动。滑杆只动 U→Y 那一支。

把滑杆从 0 拉到 2,你会看到这样一串数:

U→Y 强度    你从数据里看到的     真效应    控制 U 之后
─────────   ────────────────    ──────    ──────────
   0.0            +0.299         +0.300      +0.302
   0.5            +0.053         +0.300      +0.302
   1.0            −0.193         +0.300      +0.302
   1.5            −0.439         +0.300      +0.302
   2.0            −0.685         +0.300      +0.302

# 中间那一列一次都没动过。左边那一列跑了 0.98 个单位,还翻了号。

请仔细看最右边那一列:0.302,一动不动。只要你把 U 放进回归,不管那只手拧得多用力,你都能把真效应捞回来(0.302 与真值 0.300 之间那 0.002 是抽样误差,两万个样本剩下的零头)。

这就是本书前半本要建立的整个直觉:

◆ 观察到的关联 = 因果 + 后门
你在数据里看到的关联
    = 沿着【因果通路】流过来的部分       ← 你想要的
    + 沿着【后门通路】绕过来的部分       ← 混淆造成的

「后门」这个词第 10 章会给出精确定义。现在只要抓住画面:从 X 出发,有一条路是逆着箭头往上爬、绕到 U、再顺着箭头下到 Y。这条路和因果无关,但它照样会在数据里制造关联。

第二项的大小和符号,你从数据本身看不出来。上面那五行数据,光看第二列的话,从 +0.299 到 −0.685 都有可能,而真相一直是 +0.300。

「控制」这个词,到底在做什么

C 放进回归,通常被叫做「控制 C」或「调整 C」。这个词容易让人误解成「让 C 保持不变」,好像我们真的按住了什么东西。

更准确的画面是:在 C 相同的人里面比较。把所有人按 C 分堆——同样病情的人放一堆——在每一堆内部比 X 和 Y 的关系,最后把各堆的结果按堆的大小加权平均。这就是第 12 章的「调整公式」,而回归是它的一个连续版本。

为什么这样就能去掉后门那一项?因为一旦 C 被固定住,那条「X ← C → Y」的路就断了:在同一堆里,C 不再变化,它也就不再能同时推动两边。第 6 章会把这件事讲成一条通用规则。

✎ 术语正名:「控制变量」

「控制」(control)这个词在这里是统计学的用法,指的是「在回归里加一列」或者「分层后再比」。它和物理实验里的「控制变量法」(真的把温度按住不让它变)不是一回事,尽管中文用了同一个词。

这个词用坏了的地方在于,它暗示了一种主动性——好像你控制了它,它就乖了。实际上你只是在数据上做减法(第 18 章会把这个减法算给你看)。减错了地方,是会出人命的(第 11 章)。

▸ 在现实里

「用了我们 SDK 的 App,崩溃率更高。」——这句话大概率是真的,而且和 SDK 的质量关系不大:愿意接第三方 SDK 的往往是功能更复杂、迭代更快、依赖更多的 App,它们本来崩溃率就高。「App 的复杂度」是那只手。

「加班多的团队,交付质量更差。」——项目的难度同时决定了加班量和交付质量。

「参加了培训的员工,绩效提升更多。」——谁被选去培训?往往是本来就上升势头好的人。

这三句话有一个共同的形状:「谁接受了处理」不是随机的,而决定它的那个东西,同时也在影响结果。看见这个形状,你就看见了混淆。

✗ 这个直觉是错的
混淆会让估计「不准」,样本量够大就没事了。 混淆造成的是偏差(bias),不是方差(variance)。方差随 √n 缩小,偏差完全不随 n 缩小

上面那台机器,你把样本从两万加到两亿,−0.685 会变成 −0.6850000…,只是小数点后更多位的错。

这是「大数据能解决一切」这个信念最硬的一堵墙:数据量买的是精度,买不到无偏。第 14 章会把这两件事并排放在一张表上——随机化让偏差归零,样本量让方差缩小,它们各管各的,谁也替不了谁。

◇ 判词

DB 和 C 都对,而 C 恰好就是解决 B 的办法。

而那个「换个场景就会答错」的场景是这样的:

某编程语言的用户,代码缺陷率比另一门语言低 30%。所以这门语言更安全。

结构完全一样:语言的选择不是随机的(什么项目、什么团队、什么行业规范),而那些因素同时也在决定缺陷率。但因为这一次结论符合我们的偏好,那只手就变得很难看见了。混淆最危险的时候,不是它藏得深,而是结论正合你意。

A 「数据说 ICU 死亡率高,所以 ICU 有问题」——把「看」当成了「拨」。 B 对,但停在了「无法判断」。其实可以判断,只要 C 选对(第 10 章给条件)。 C 对,但它有一个隐含前提:你得先知道该按什么分堆。分错了会更糟——第 11 章有两个当场把对的变成错的例子。

这一章的一句话

混淆是一条结构上的通路,不是数据上的瑕疵;它不改变真效应,只改变你看到的那个数,而且再多的数据也不会让它自己消失。

下一章看一个更过分的版本:不是数字偏了,是方向整个翻过来。1973 年伯克利研究生院的录取数据,全校男性录取率 44.5%、女性 30.4%,差了 14.2 个百分点;而分系去看,六个系里有四个系女性的录取率反而更高。两句话都是从同一张表算出来的。