元知识详解:因果推断

2026 年 7 月 23 日 · 跨学科核心概念
Day 67
因果科学 统计推断 认识论 机器学习

因果阶梯

The Ladder of Causation
三层不可跨越的问题
核心洞察

相关、干预、反事实,是三个层级完全不同的问题。反直觉之处在于:低层的数据再多,也回答不了高层的问题——这是数据本身的天花板,不是样本量不够。你能从观测里算出「看见 X 时 Y 有多可能」,却永远算不出「我动手改变 X、Y 会怎样」。想上一层楼,必须往数据里注入数据本身没有的东西:一张因果假设图。

机制

三级阶梯,一级比一级难。第一级关联(看见):纯观测的 P(Y|X),是今天机器学习的主场。第二级干预(动手):P(Y|do(X))——我主动去改 X,而不是被动观察它自己变。第三级反事实(想象):如果当时没这么做,会怎样,针对同一个个体的平行世界。关键是每上一级,你都得额外提供「谁导致谁」的假设;光靠更多观测样本,永远爬不上去。

▸ 因果阶梯:三个不同的问题
1
关联 · 看见 P(Y | X):看见 X,Y 有多可能?
纯观测就能算 · 机器学习的主场
2
干预 · 动手 P(Y | do X):我改变 X,Y 会怎样?
需要一张因果图或一次实验 · A/B 测试在这一级
3
反事实 · 想象 当时不这么做,本会怎样?
同一个体的平行世界 · 最难,也最接近「理解」
每上一级都要额外注入因果假设——多少观测数据也替代不了
反直觉例子

气压计与暴风雨。气压计读数和暴风雨高度相关(第一级),可你要是用手把指针拨低(do),暴风雨并不会来——真正的原因是大气压,气压计只是它的另一个显示屏。同一批数据,在第一级和第二级给出截然相反的行动结论。而数据从不会告诉你它属于哪一级;只有你脑中那张因果图能。

跨学科迁移

今天的机器学习几乎全部住在第一级——预测下一个词、下一次点击,靠的都是相关。这解释了一个反复上演的翻车:一个在历史数据上预测极准的模型,一旦你依它去「干预」(改推荐、改定价),效果就崩,因为它学的是关联、你要的是干预,中间隔着整整一级台阶。A/B 测试之所以珍贵,正因为它是把系统从第一级抬到第二级的电梯:随机化让你真的在 do(X)。

BigCat 应用

你手上的监控指标几乎都停在第一级。「报错率和延迟一起涨」是关联;「我扩容能不能压下报错」是干预——后者翻遍历史仪表盘也答不了,只能靠一次真实验,或一张你敢写下来的因果图。下次做容量或架构决策前,先分清:这个结论是「看见的」,还是「动过手验证的」?

思考题

你上一个基于线上数据做出的技术判断,若被追问「这是相关还是因果」,你是靠一次真实干预验证的,还是悄悄把第一级的相关,当成了第二级的因果?

混杂因子

Confounding
共因 · 后门路径
核心洞察

两个变量一起变,未必谁导致谁——很可能有个躲在背后的第三者,同时推着它俩动。这个「共因」(混杂因子)凭空制造出一条纯属虚假的相关。危险在于:它看起来和真因果一模一样,你不专门去找,就永远发现不了它的存在。

机制

在因果图上,混杂是一条「后门路径」:X ← Z → Y。Z 同时导致 X 和 Y,于是哪怕 X 和 Y 之间毫无直接因果,它俩也会同步起伏。破解办法是「控制/分层」:把 Z 固定住(只在相同的 Z 值内比较),后门就被堵上,剩下的关联才是真因果。所以面对混杂因子,多控制一个变量是对的。

反直觉例子

激素替代疗法。上世纪大量观测研究显示,服用激素替代疗法的更年期女性心脏病明显更少,医学界一度普遍推荐。但 2002 年一项大型随机对照试验反而发现它升高心脏病风险。差在哪?愿意也有条件用激素替代的女性,往往更富裕、更注重健康、更常锻炼——健康的生活方式才是那个共因,它同时抬高了「用药」和「心脏好」。真做了随机化、切断后门,因果直接反了号。

跨学科迁移

机器学习里的「伪特征」正是混杂:模型看见图里有草就判是牛,因为训练集里牛总站在草地上——草是牛与标签的共因,换个背景模型就崩。分布式系统同理:两个指标的强相关,常常只是被「流量」这个隐藏变量共同推着走,你去单独优化其中一个,另一个纹丝不动。

BigCat 应用

你比较两个方案、两组用户的效果时,最该先问一句:这两组除了我关心的那点差异,还有没有别的系统性不同(老用户 vs 新用户、高配机器 vs 低配)?那个「别的不同」就是混杂。不把它控制住,你测到的差距,可能全是它的功劳。

思考题

你最近一次「A 组比 B 组好」的结论里,两组是被随机分开的,还是本来就因为某种原因(自选、筛选)而不同?若是后者,你真正测到的,是方案,还是那个把人分进两组的隐藏共因?

对撞因子

Colliders
共果 · 选择偏倚
核心洞察

混杂教你「要多控制变量」,对撞因子却抛来一个吓人的反面:有些变量你一旦去控制,反而会凭空造出一段本不存在的假相关。控制变量绝不是越多越好——控错了地方,你是在亲手制造偏见。

机制

对撞是混杂的镜像:X → C ← Y,C 是 X 和 Y 的「共果」。X 与 Y 本来毫无关系,可一旦你按 C 分层(只看 C 取定值的样本),它俩就被强行拽出一段负相关——既然结果 C 已经定了,一个原因弱,另一个原因就必然强来凑数。而「挑选样本」这个动作本身,就是一次隐蔽的「按共果分层」。

▸ 该控制谁:共因要堵、共果别碰

混杂(共因)

X ← Z → Y
假相关 Z X Y
控制 Z ✓ 堵住后门

对撞(共果)

X → C ← Y
分层后冒出的假相关 X Y C
控制 C ✗ 凭空造假
同样是那个第三变量:在共因位置该控制,在共果位置一控制就出错
反直觉例子

大学录取。假设录取只看两项——成绩和特长,任一项够高就能进。在全体高中生里,成绩和特长毫不相关;可你一旦只看「已录取」这群人,就会发现成绩越高的特长越差、反之亦然,凭空冒出一条负相关。原因不是它俩真有关系,而是「录取」这个共果被你固定住了(你只研究录取者)。同一机制也解释了为什么医院里两种病看起来负相关、为什么「越好看的人往往越渣」的错觉挥之不去——你的样本早被某个共果筛过一遍。

跨学科迁移

二战给飞机加装甲的故事是同一回事:只统计返航飞机的弹孔分布,是在「能返航」这个共果上分层——最该加固的,恰是返航样本里弹孔最少处(中那儿的飞机根本没回来)。机器学习里,只拿「成功/被点击」的样本训练,就是在对撞因子上做了选择,模型学到的相关会被系统性地扭曲。

BigCat 应用

你的日志、你的数据集,几乎总是被某道关卡筛过的幸存者——只有跑通的请求才留下记录,只有留存的用户才进得了分析。在这种被筛过的数据里发现的相关,第一反应该是警惕:它是真的,还是我这道筛子(共果)凭空造出来的?

思考题

你正在分析的这批数据,是「全体」,还是「通过了某道关卡的幸存者」?如果是后者,你看到的那些相关里,有多少可能是这道关卡自己制造出来的?

do-演算与自然实验

do-Calculus & Natural Experiments
干预的算法 · 老天做的随机化
核心洞察

好消息是:拿到因果,不一定非得做实验。有一套严格方法(do-演算)能告诉你——给定一张因果图,哪些因果问题可以纯靠观测数据算出来、又该控制谁、别碰谁;而当实验实在做不了时,还能去捡「老天替你做好的随机实验」。因果不是玄学,是有算法的。

机制

do-演算是一组数学规则,在因果图允许的条件下,把含 do(X) 的干预问题改写成只含普通观测概率的式子——它同时替你判定:该控制混杂、别控制对撞(否则越算越错)。真做不了实验时,就用「自然实验」:现实中某个近乎随机的外力(政策生效日、地理边界、一次抽签)恰好像随机化一样把人分了组,你借它来估因果。

反直觉例子

越战征兵抽签。要问「服兵役对日后收入有何影响」,直接拿当过兵的和没当过的比,必被混杂——谁去当兵本身就不随机。但美国当年按出生日期抽签决定征召顺序,而生日是随机的,等于老天替研究者做了一次随机分组。借这个抽签当「杠杆」,人们干净地估出了服役对收入的因果效应——没做过一天实验,却拿到了实验级的答案。

跨学科迁移

A/B 测试是工程师亲手造的随机化,功能灰度、金丝雀发布,本质都是在做小型干预实验。做不了 A/B 时,工程里也常靠自然实验:一次只在某个区域生效的配置变更、一次机房故障,都可能是估计因果的天赐断点。经济学、流行病学、机器学习,如今正共用同一套因果语言。

BigCat 应用

下次遇到「这个改动到底有没有用、可又不方便做 A/B」,别急着从历史数据里生凑相关——先找有没有一个近乎随机的断点:某次只影响了一部分用户的发布、一次时间上的硬切换。那往往就是你能拿到的、最接近因果的一手证据。

思考题

你负责的系统里,最近有没有一次「只影响了一部分、而非全部」的变更或故障?如果有,它是不是一个被你白白浪费掉的、本可用来干净估计因果的天然实验?