加权,和「错一个还站得住」
这一章有一个听上去像是免费午餐的结果:把两个都可能写错的模型绑在一起,只要其中任意一个写对,估计就是对的。它是真的。而弄清它保护什么、不保护什么,比会用它更重要。
「双重稳健估计只要两个模型有一个是对的,结果就是对的。」这句话里的「对」是指?
这道题分的是「遗漏变量」和「函数形式」——而这正是双重稳健被高估的原因。
加权:造一个假的总体
匹配的做法是「配对,配不上的丢掉」。加权是另一条路:一个人都不丢,但给他们不同的分量。
给每个人一个权重,等于他实际拿到的那个处理的概率的倒数:
处理组的人:w = 1 / e(Z) e(Z) = P(X=1 | Z) 是倾向得分 对照组的人:w = 1 / (1 − e(Z))
直觉:一个倾向得分只有 0.05 的人却接受了处理,说明他代表了很多和他类似、但没接受处理的人——所以让他一个顶 20 个。
加权之后你得到一个伪总体(pseudo-population):在这个假想的人群里,处理与协变量无关。加权,就是在算式里把 Z → X 那条箭头剪断。
这个视角很值得停一下:匹配是「造一对可比的人群」,加权是「造一个箭头已被剪断的人群」。它们从两个方向逼近同一个目标——第 9 章那把剪刀。
权重会爆炸
倒数有个众所周知的毛病:分母接近零的时候会炸。用第 12 章那台机器(两万人):
IPW 估计 4.9766 真值 5.00 最大的那个权重 38.57 ← 一个人顶 39 个人 稳定化之后最大权重 19.41 有效样本量 13237.7 名义上有 20000 人
有效样本量(effective sample size)是衡量这件事的好指标:权重越不均匀,你实际拥有的信息越少。这里两万人只剩一万三的分量。极端情况下,几个人的权重能占掉整个估计的一半——那时候你的结论其实是被那几个人决定的。
常见的三种缓解办法,各有代价:
- 稳定化权重:分子换成边际处理概率。上表里最大权重从 38.57 降到 19.41,方差小很多,而且估计值一点没变(还是 4.9766)——这是免费的。
- 截断(trimming):把极端的倾向得分掐到某个范围内。这个不免费,它引入偏差换方差。
- 直接丢掉重叠差的人:诚实但改变了估计对象,必须在报告里说清楚。
双重稳健:把两个模型绑在一起
到这里,我们有两条独立的路:
- 结果模型:拟合
E[Y | X, Z],然后预测每个人在两种处理下的结果。(回归走的这条) - 处理模型:拟合
e(Z) = P(X=1 | Z),然后加权。(IPW 走的这条)
两条都可能写错——你不知道 Y 对 Z 是不是线性的,也不知道 logit 是不是对的链接函数。
而有一个式子,可以把两者组合起来:
Ê[Y(1)] = (1/n) Σᵢ [ m̂₁(Zᵢ) + Xᵢ × (Yᵢ − m̂₁(Zᵢ)) / ê(Zᵢ) ]
───────── ───────────────────────────
结果模型的预测 用倾向得分加权的【残差修正】
读法:先用结果模型给每个人预测一个值,然后用加权后的残差去纠正它。
- 如果结果模型是对的,残差的期望是零,第二项自动消失 → 对。
- 如果倾向得分是对的,第二项恰好补偿掉结果模型的偏差 → 也对。
所以只要有一个对,整体就对。这个性质叫双重稳健(doubly robust)。
把它拆开看
下面这个 demo 故意把模型写错——「写错」的方式是把混淆变量 C 从模型里拿掉。四种组合:
结果模型对 结果模型错
─────────────── ───────────────
PS 模型对 4.9362 ✓ 4.9843 ✓
PS 模型错 4.9637 ✓ −3.3185 ✗
# 真值 5.0000。四格里三格是对的。
# 唯一崩掉的那一格,正好等于什么都不控制的朴素差 −3.3185。
这张表是当场算出来的,不是抄来的。三格落在 4.94–4.98,第四格掉到 −3.32。双重稳健是真的。
那个 −3.3185 值得注意:它精确地等于第 12 章「什么都不控制」的那个数。这不是巧合——两个模型都不放 C,就等于根本没有调整。双重稳健在这里没有任何魔法可施。
它保护什么,不保护什么
| 错法 | 双重稳健能救吗 |
|---|---|
| 函数形式写错了(该加平方项没加、该加交互没加) | 能——只要另一个模型形式对 |
| 漏掉了一个没测量的混淆变量 | 不能——两个模型会同时错 |
因为漏掉的混淆变量既不在结果模型里,也不在倾向得分模型里。两条腿一起断,正好落在右下角那一格。
而在实践中,第二种错误远比第一种常见,也远比第一种致命。
所以「双重稳健」这个名字是有点误导的:它稳健的是模型设定,不是识别假设。没有任何统计方法能对识别假设稳健——识别假设是所有方法共同的地基,地基塌了,上面盖什么都一样。
双重稳健现在是「因果 + 机器学习」这条线的核心。
为什么?因为 AIPW 那个式子有一个很好的性质(叫 Neyman 正交性):两个模型的估计误差在一阶上互相抵消。这意味着你可以用随机森林、梯度提升、神经网络这些收敛得比较慢的方法来拟合那两个模型,而最终的 ATE 估计仍然能达到 √n 的收敛速度、并且有有效的置信区间。
这套东西叫双重/去偏机器学习(Double/Debiased Machine Learning,Chernozhukov 等,2018),配上交叉拟合(cross-fitting)来避免过拟合导致的偏差。它是过去十年这个领域最实用的进展之一,Python 里的 EconML、DoubleML 都是干这个的。第 24 章会给入口。
但请注意它没有改变的东西:这些方法解决的全是「怎么把 E[Y|X,Z] 和 e(Z) 估得更好」。Z 里该放什么,仍然要你来定。而那是第 10 章的事,机器学习一个字都帮不上。
一个更锋利的说法:因果推断有两个阶段,识别和估计。近二十年的方法学进展几乎全在第二阶段,而实践中翻车几乎全在第一阶段。
这也解释了一个常见的困惑:为什么一篇用了最新方法的分析,结论可能还不如一个简单的、但设计巧妙的自然实验可靠。因为后者在第一阶段就赢了。卷 V 讲的就是怎么在第一阶段赢。
B两个模型有一个的函数形式写对了(在都用了同一批变量的前提下)。
那张 2×2 表里的「错」,指的是设定错误。真正致命的那种错——漏掉一个没测的混淆——会让两个模型同时错,落在右下角那一格:−3.3185。
A 「有一个抓住了全部混淆变量」——如果一个模型抓住了全部混淆而另一个没有,双重稳健确实能救。但现实中「有一个没测到的变量」意味着两个模型都拿不到它,不存在「其中一个抓住了」这种情况。 C 「预测精度足够高」——预测精度和设定正确不是一回事。第 16 章说过:倾向得分模型的 AUC 高反而可能是坏消息。而结果模型预测得准也不保证 X 的系数是因果的(第 12 章那个加了对撞机的模型 R² 更高)。 D 「以上都算」——把识别和估计混成一锅,这正是本章要拆开的。这一章的一句话
双重稳健让你在模型形式上有两次机会,但它对「漏了一个没测的混淆」毫无办法——因为那时候两条腿一起断。
下一章回头拆一个你已经用了很多年的东西:回归里的「控制变量」到底做了什么?答案会精确到小数点后六位——一步到位的 4.963182,和分三步走的 4.963182,两者之差是 1.12e-12。