卷 III · 认出来CH 10深度 10/24

后门准则:把偷偷绕过去的路堵死

「该控制哪些变量」这个问题,几十年里靠的是经验、习惯和期刊审稿人的口味。后门准则把它变成了一个图上的判定问题——有确定答案,而且可以让机器去搜。

后门准则调整集可搜索

▷ 先判一次

你要估计「某种疗法 X 对康复 Y 的效果」。手上有四个变量可以放进回归:A 病情严重度(治疗前测的)、B 医院等级M 用药量(治疗方案定下来之后决定的)、R 是否复诊(治疗之后的行为)。该放哪些?

A 四个全放,信息越多越好B 放 A 和 B,不放 M 和 RC 放 A、B、M,不放 RD 只放和 X 相关性最高的那两个

这一章之后,这道题不需要「觉得」,可以直接判。

后门路径

第 2 章里出现过这个词,现在给精确定义。

◆ 后门路径

XY 的一条路径,如果第一支箭头是射进 X 的(即形如 X ← …),就叫一条后门路径(backdoor path)。

X ← A → Y            这是后门(第一支箭头指着 X)
X ← A ← B → Y        这也是后门
X → M → Y            这不是,这是因果通路(第一支箭头从 X 射出去)

名字的画面感很准:因果效应从前门走(顺着箭头出去),混淆从后门绕(逆着箭头进来)。两种关联在数据里长得一模一样,你要做的是把后门堵上,只留前门。

为什么「第一支箭头射进 X」这个判据抓的正好是混淆?因为箭头射进 X,意味着这条路上有东西在影响 X;而它又能通到 Y,说明它也在影响 Y(或者通过某个共同原因)。这正是第 2 章那只手的形状。

后门准则

◆ 后门准则(Pearl, 1993)

一组变量 Z 满足关于 (X, Y)后门准则,如果:

  1. Z 里不包含 X 的任何后代
  2. Z 堵住 X 与 Y 之间的所有后门路径(按第 6 章的通断规则判定)。

如果 Z 满足后门准则,那么因果效应可以算出来

P(Y | do(X=x)) = Σ_z  P(Y | X=x, Z=z) × P(Z=z)

这个式子叫调整公式(adjustment formula),第 12 章会逐项拆开。

两条要求各管一件事,而且都不能少:

  • 第一条防的是「控制了不该控制的」。X 的后代包括中介(第 11 章)、对撞机(第 7 章)、以及处理之后发生的一切。这一条一刀切地把它们全排除了。
  • 第二条防的是「该控制的没控制」。只要还有一条后门开着,估计就是偏的。

注意第一条的形式:它不是「Z 里不能有对撞机」。它比那个更粗暴也更安全——只要是 X 的后代,一律不要。因为在实践中你未必分得清一个后代到底是中介还是对撞机,而这条规则不需要你分清。

让机器去搜

准则是可以机械执行的,所以可以写成程序。下面这台搜索器做三件事:枚举所有后门路径、判定你选的调整集、并且穷举所有子集找出全部可用的极小集。

那张图上,从 X 到 Y 一共有:

后门路径 2 条:
  X ← A → Y
  X ← B → Y

有向(因果)路径 1 条:
  X → M → Y      ← 这条必须留着,它就是我们要测的东西

四个候选变量的 16 个子集里,满足后门准则的只有 1 个:{A, B}
而它同时也是极小的。

逐个试一遍会更有感觉:

  • 只放 {A}:不通过——X ← B → Y 还开着。
  • 只放 {B}:不通过——X ← A → Y 还开着。
  • {M}:不通过,理由是第一条——M 是 X 的后代
  • {R}:不通过,同样是第一条——R 也是 X 的后代(而且它还是个对撞机)。
  • {A, B, M}:不通过。加了正确的 A、B,但只要多带一个 M,整个集合就废了。

最后一条值得盯着看:{A, B} 可用,{A, B, M} 不可用。后门准则不是「越多越好」,它是一个精确的集合条件——加错一个成员,整组作废。

✂ 后门准则在做什么

换个角度看这件事:你剪不动真实世界的箭头,那就在算式里把后门堵上。

随机化是物理上剪断 C → X;调整是数学上让那条路失效。两者达到同一个效果——让「看到 X=1 的那些人」和「被拨成 X=1 的那些人」变成同一批人(至少在 Z 相同的每一层内部是这样)。

所以调整法也常被叫做「统计上的随机化」。但它有一个随机化没有的软肋:它只能堵住你测到了的那些后门。

这个方法最大的软肋

后门准则告诉你「哪些变量要控制」,但它有一个不能回避的前提:那张图得是对的,而且要控制的变量你得真的测到了。

现实里最常见的失败不是「选错了调整集」,是「有一个混淆变量你根本没测」——它在图上,但不在你的数据表里。这时候后门准则会诚实地告诉你:没有可用的调整集。

这个「诚实」很重要。它不会给你一个凑合的答案,它会说无解。而知道无解,比拿到一个假答案强得多——因为你会去找别的办法(第 13 章的前门,第 19–21 章的自然实验),而不是把一个有偏的数字写进报告。

✎ 术语正名:「可忽略性」与「无未测混淆」

你在文献里会遇到几个说法:可忽略性(ignorability)、条件独立假设(CIA)、无未测混淆(no unmeasured confounding)、选择在可观测量上(selection on observables)。

它们说的基本是同一件事,只是来自不同传统:前两个来自潜在结果框架(第 15 章),后两个一个来自流行病学、一个来自计量经济学。

而在图的语言里,它们就是「你的 Z 满足后门准则」。图的好处在于,它把一句不可检验的口头承诺,变成了一张可以指着吵架的图。

▸ 在现实里

这套东西的工程用法,是把「控制变量清单」变成一次代码评审。

下次看到一份分析报告写着「我们控制了年龄、性别、地区、设备、使用时长」,可以逐条问:

  • 「使用时长」是在处理之前测的,还是之后?如果之后——它是 X 的后代,第一条就否了
  • 有没有哪个明显的混淆没在这个清单里?(比如用户的付费意愿、账号的来源渠道)
  • 这个清单里有没有哪个是「处理之后才发生的行为指标」?那几乎一定是对撞机或中介。

顺带说一句:DAGitty(dagitty.net)是一个免费的网页工具,画好图它就能自动给你所有的极小调整集,和这一章的搜索器做的是同一件事。R 和 Python 都有对应的包。第 24 章会给完整的入口。

✗ 这个直觉是错的
调整集越大越安全——多控制几个变量,最多损失一点效率。 调整集是一个集合条件,不是一个清单。{A, B} 可用而 {A, B, M} 不可用——多一个成员就整组作废。

「多控制点更保险」这个直觉之所以顽固,是因为它在预测问题里基本成立:多一个特征顶多过拟合,不会让你的预测系统性地偏。

但因果估计不是预测。在因果估计里,多一个变量可以把符号弄反。第 12 章下一章就会给你看:真值 +5.00,控制对了得 4.96,多控制一个得 3.31,只控制那一个错的得 −4.81。

这也是为什么「把所有列都丢进模型让它自己学」在因果问题上是危险的:机器不知道哪些列是处理之后才有的。

◇ 判词

B放 A 和 B,不放 M 和 R。

A(病情严重度)和 B(医院等级)都在治疗之前定下来,且同时影响「用不用这个疗法」和「康复」——它们各自撑着一条后门,必须都堵。M(用药量)和 R(是否复诊)都发生在治疗之后,是 X 的后代,被后门准则第一条直接排除。

搜索器的答案是:16 个子集里唯一可用的是 {A, B}

A 「全放」——违反第一条。而且不是「稍微差一点」,是让整个估计失效。 C 「放 M 不放 R」——察觉到 R 有问题(它是对撞机,很显眼),但漏了 M。M 是中介,控制它会把疗法通过用药量起的那部分作用一起抹掉。第 11 章会给你看这一刀砍掉多少:61.9% D 「按相关性挑」——第 7 章的教训:相关性完全区分不了混淆和对撞机。相关性是一个对称的量,装不下「谁在前」。

这一章的一句话

后门准则把「该控制哪些变量」从一个手艺问题变成了一个图上的判定问题:不要处理的后代,堵住所有后门——两条,缺一不可。

下一章专攻第一条。你会看到两种「看起来完全该控制、控制了就毁掉估计」的变量:一种把真效应 1.293 砍成 0.495,另一种把 0.402 砍成 0.201。第二种尤其阴险——它和处理相关、也和结果相关,长得就像一个标准的混淆变量。