简介:这份资源是斯坦福大学Stefan Wager于2024年9月更新的《Causal Inference: A Statistical Learning Approach》教科书草稿,面向数据科学、统计学、经济学与公共政策领域的学习者和研究者,帮助其系统掌握基于统计学习方法的因果推断理论与应用框架。压缩包内仅含1个PDF文件,大小约1.66MB,轻量便携,适合在电脑或平板上随时查阅。全书共十二章,从随机对照试验中的差异均值估计与回归调整讲起,依次展开无混淆性与倾向得分、双重稳健方法与双重机器学习、异质处理效应估计、政策学习、自适应实验、平衡估计器、回归断点设计,并延伸至内生处理、局部平均处理效应、溢出与干扰等进阶主题,每章附有文献注记便于延伸阅读。目前已有1998人学习下载,适合希望以统计学习视角深入理解因果关系的中高级读者作为核心教材或研究参考。
1. 因果推断到底在解决什么问题:从“相关不等于因果”说起
“相关不等于因果”这句话,大概每个学过点统计的人都听过。但真被问到“那怎么才能知道因果”,多数人还是会卡住。比如你观察到冰淇淋销量高的月份,溺水人数也高,这两件事高度相关,但显然吃冰淇淋不会导致溺水——真正的原因是夏天到了。问题来了:如果连“夏天”这个共同原因都没观测到,我们还能不能从数据里把因果关系挖出来?
因果推断就是干这件事的。它要回答的不是“X 和 Y 有没有一起变”,而是“如果我们主动改变 X,Y 会跟着变多少”。这个“主动改变”是核心——它把因果问题从被动观察变成了干预问题。斯坦福 2024 年这份《Causal Inference: A Statistical Learning Approach》教科书,就是系统讲这套方法的教材,作者把随机实验、倾向得分、双重稳健估计、异质处理效应、政策学习这些工具串成了一条线,从最基础的 RCT 一路讲到断点回归和干扰效应。搞懂它,你就能分清哪些结论是数据真正支持的,哪些只是看起来像那么回事。
2. 随机对照试验:为什么它是因果推断的“黄金标准”
2.1 潜在结果框架:一个让因果变得可计算的思想实验
要理解因果推断,先得接受一个有点反直觉的设定:每个人其实有两个“潜在结果”。比如你吃了某种药,有一个结果;你没吃,有另一个结果。因果效应就是这两个结果的差。但麻烦在于,你只能观察到其中一个——你不可能同时既吃药又没吃药。
这就是因果推断的根本难题:个体因果效应永远不可直接观测。教科书里把它形式化成 $\Delta_i = Y_i(1) - Y_i(0)$,其中 $Y_i(1)$ 是接受处理的结果,$Y_i(0)$ 是未接受处理的结果。你只能看到 $Y_i = Y_i(W_i)$,$W_i$ 是实际接受的处理。
那怎么办?答案是用随机化来“模拟”那个缺失的反事实。如果处理分配是随机的,那么接受处理组和未接受处理组在一切其他特征上就“统计等价”了。两组人唯一的系统差异就是有没有接受处理。这样一来,两组平均结果的差,就可以无偏地估计出平均处理效应。
打个比方:你想知道某种肥料对庄稼产量的影响。你不能让同一块地同时施肥和不施肥。但你可以随机选一半地块施肥,另一半不施。只要随机分配,两块地在土壤、光照、水分上的差异就会在期望上抵消掉,剩下的产量差就归因于肥料。
2.2 差值估计与回归调整:从最简单到更精细
最直观的估计方法叫差值均值估计:把处理组的平均结果减去对照组的平均结果。教科书第一章给出的公式是:
# 差值均值估计的伪代码 # Y: 结果变量数组 # W: 处理指示变量数组,1 表示处理,0 表示对照 n1 = sum(W == 1) # 处理组人数 n0 = sum(W == 0) # 对照组人数 tau_dm = mean(Y[W == 1]) - mean(Y[W == 0]) # tau_dm 就是平均处理效应的估计值这个估计量在随机化条件下是无偏的,而且几乎不需要任何分布假设。它的好处是简单、透明、不容易被“操纵”——你没法通过换模型来挑一个好看的结果。
但差值均值估计没有利用协变量信息。如果你在实验前测了一些变量(比如年龄、基线健康水平),这些变量会影响结果,那么把它们纳入分析可以提高估计精度。这就是回归调整的思路:在回归模型中加入处理变量和协变量,处理变量的系数就是调整后的处理效应估计。
教科书里强调,回归调整在随机试验中依然是无偏的,而且当协变量与结果强相关时,方差会明显小于差值均值估计。通俗地说,如果你知道哪些因素会让结果波动,把它们控制住,剩下的“噪音”就小了,估计就更准。
注意:回归调整的前提是模型设定正确。如果协变量和处理变量之间存在复杂的交互作用,简单的线性调整可能不够,需要更灵活的方法。
2.3 常见误区:随机化不是万能药
误区一:随机化就能保证两组完全一样。随机化保证的是“期望上一样”,不是“实际上一样”。小样本里,两组在某个协变量上不平衡是完全可能的。这时候需要检查基线平衡性,必要时做调整。
误区二:RCT 结果一定能推广到所有人。随机试验估计的是参与实验那群人的处理效应。如果参与者不是从目标人群中随机抽取的,推广就要小心。教科书里区分了样本平均处理效应和总体平均处理效应,前者不需要抽样假设,后者需要。
误区三:不随机也能用差值均值估计。观察性研究中,处理组和对照组可能在很多维度上本来就不同。直接做差值均值估计,你估计的可能是“选择效应”而不是“处理效应”。这正是后面倾向得分和双重稳健方法要解决的问题。
3. 无混淆性与倾向得分:观察性研究怎么“模仿”随机实验
3.1 无混淆假设:观察性研究的“救命稻草”
随机实验之所以能识别因果,是因为处理分配与潜在结果独立。观察性研究没有这个保障,但如果我们愿意假设:在控制了某些协变量之后,处理分配与潜在结果独立,那么因果效应仍然可以识别。这个假设叫“无混淆性”或“可忽略性”。
用大白话说:只要我们把所有同时影响“是否接受处理”和“结果”的变量都测到并控制住,那么剩下的差异就可以归因于处理。这个假设无法用数据检验,只能靠领域知识来判断。教科书里反复强调,无混淆性是一个很强的假设,研究者必须说清楚为什么它在这个场景下是合理的。
3.2 倾向得分:把“多维匹配”压缩成一维
如果协变量很多,直接匹配或分层会非常困难——维度一高,数据就稀疏了。倾向得分提供了一个巧妙的解决方案:它把“接受处理的概率”作为一个综合指标。具体来说,倾向得分 $e(X) = P(W=1 | X)$ 是在给定协变量 $X$ 下接受处理的概率。
倾向得分有一个关键性质:在倾向得分相同的条件下,处理分配与协变量独立。这意味着你不需要在几十个维度上匹配,只需要在倾向得分这一个维度上匹配或加权,就能平衡所有协变量。
教科书第二章介绍了两类基于倾向得分的方法:
分层估计:把样本按倾向得分分成若干层,每层内处理组和对照组的倾向得分接近,然后层内做差值估计,最后加权平均。这就像把“几乎相同”的人分到一组,组内比较。
逆倾向加权:给每个样本赋予权重 $1/e(X)$(处理组)或 $1/(1-e(X))$(对照组),构造一个“伪总体”,使得处理组和对照组的协变量分布一致。直观理解是:如果某个人接受处理的概率很低但他实际接受了处理,那他就“代表”了很多类似的人,所以给他更大的权重。
# 逆倾向加权的伪代码 # e_hat: 估计的倾向得分 # W: 处理指示变量 # Y: 结果变量 weights = np.where(W == 1, 1 / e_hat, 1 / (1 - e_hat)) tau_ipw = np.sum(weights * W * Y) / np.sum(weights * W) - \ np.sum(weights * (1 - W) * Y) / np.sum(weights * (1 - W)) # tau_ipw 是逆倾向加权估计的处理效应逆倾向加权在倾向得分模型正确时是无偏的,但它对极端权重很敏感。如果某个样本的倾向得分接近 0 或 1,权重会爆炸,估计方差会很大。
3.3 常见误区:倾向得分不是“因果魔法”
误区一:用了倾向得分就不需要无混淆假设了。倾向得分只是工具,它不能替代无混淆假设。如果存在未观测的混淆变量,倾向得分再准也救不了。
误区二:倾向得分模型越复杂越好。倾向得分的目标是平衡协变量,不是预测处理分配越准越好。有时候一个简单的模型反而能获得更好的平衡。教科书里提到,倾向得分模型的选择应该以协变量平衡为目标,而不是以预测精度为目标。
误区三:逆倾向加权总是比分层估计好。两者各有适用场景。逆倾向加权在倾向得分极端时不稳定,分层估计则更稳健但可能引入分层偏差。实际应用中,常常需要结合使用或做诊断。
4. 双重稳健与双重机器学习:当两个模型都不完美时
4.1 双重稳健估计:两个“保险”叠加
逆倾向加权依赖倾向得分模型正确,回归调整依赖结果模型正确。如果其中一个错了,估计就有偏。双重稳健方法的设计思路是:只要倾向得分模型和结果模型有一个是对的,估计就是一致的。这就像买了两份保险,一份失效还有另一份兜底。
教科书第三章给出的双重稳健估计量结合了逆倾向加权和回归调整:
# 双重稳健估计的伪代码 # mu0_hat: 对照组结果模型的预测 # mu1_hat: 处理组结果模型的预测 # e_hat: 倾向得分 # W, Y: 处理指示和结果 dr_estimate = np.mean( mu1_hat - mu0_hat + W * (Y - mu1_hat) / e_hat - (1 - W) * (Y - mu0_hat) / (1 - e_hat) ) # dr_estimate 是双重稳健估计的处理效应这个公式看起来复杂,但逻辑很清晰:先用结果模型给出一个“基线估计”,然后用逆倾向加权的残差来修正。如果结果模型对了,修正项期望为零;如果倾向得分模型对了,修正项能纠正结果模型的偏差。
4.2 双重机器学习:用机器学习来拟合 nuisance 函数
传统双重稳健估计假设倾向得分和结果模型是参数化的(比如逻辑回归和线性回归)。但如果协变量和处理效应的关系很复杂,参数模型可能不够用。双重机器学习的核心思想是:用灵活的机器学习方法来拟合倾向得分和结果模型,同时通过交叉拟合和正交化来消除过拟合带来的偏差。
教科书里介绍了双重机器学习的基本框架:把样本分成若干折,用其他折的数据训练模型,再在当前折上做预测。这样做的目的是让 nuisance 函数的估计误差不会“污染”处理效应的估计。正交化则确保处理效应的估计对 nuisance 函数的小扰动不敏感。
通俗地说,双重机器学习让你可以用随机森林、梯度提升、神经网络这些工具来拟合复杂的倾向得分和结果模型,同时还能得到有效的置信区间。这是近年来因果推断领域最受关注的方向之一。
4.3 常见误区:双重稳健不是“双重保证”
误区一:双重稳健意味着两个模型都错也没关系。双重稳健的前提是“至少一个模型正确”。如果两个模型都错了,估计仍然有偏。而且“正确”指的是模型设定正确,不是预测精度高。
误区二:双重机器学习可以自动解决所有问题。双重机器学习处理的是 nuisance 函数的估计问题,它不能替代无混淆假设。如果存在未观测混淆,再好的机器学习方法也无能为力。
误区三:双重稳健估计一定比逆倾向加权好。在有限样本中,双重稳健估计的方差可能更大,尤其是当倾向得分极端时。方法选择需要根据具体数据和问题来权衡。
5. 异质处理效应与政策学习:从“平均”到“个性化”
5.1 异质处理效应:平均效应掩盖了什么
平均处理效应告诉你“总体上处理有没有用”,但它不告诉你“对谁有用”。如果处理对一部分人效果很好,对另一部分人效果很差甚至有害,平均效应可能接近零,但你不能说处理没用。异质处理效应研究的就是处理效应如何随个体特征变化。
教科书第四章介绍了半参数建模和专门为处理异质性设计的损失函数。核心思路是:把处理效应建模为协变量的函数 $\tau(X)$,然后用数据来估计这个函数。难点在于你永远看不到个体处理效应,所以不能直接做回归。教科书里给出的方法通过构造一个特殊的损失函数,使得最小化这个损失函数等价于估计异质处理效应。
5.2 政策学习:从估计效应到做决策
知道了处理效应对不同人不同,下一步就是做决策:对谁施加处理?这就是政策学习要解决的问题。教科书第五章把政策学习形式化为一个优化问题:找到一个决策规则 $\pi(X)$,使得在给定数据下,期望福利最大化。
政策评估和政策学习是两回事。政策评估是给定一个策略,估计它的效果;政策学习是从数据中找一个好策略。教科书里介绍了经验福利最大化的方法,以及如何用双重稳健方法来评估和优化政策。
打个比方:你有一种稀缺资源(比如奖学金),想分配给最需要的学生。政策学习就是根据学生特征,学出一个分配规则,使得奖学金的总效益最大。
5.3 常见误区:异质效应不是“分组回归”
误区一:按协变量分组做回归就能估计异质效应。分组回归会引入选择偏差,而且分组越细,每组样本越少,估计越不稳定。异质处理效应的方法通过借用所有样本的信息来估计 $\tau(X)$,比简单分组更有效。
误区二:政策学习就是预测谁最可能受益。预测受益和处理效应是两回事。一个人可能因为基线结果差而被预测为“受益大”,但实际上处理对他可能没效果。政策学习需要的是因果效应,不是预测。
误区三:异质效应估计可以替代平均效应。两者回答不同问题。平均效应告诉你“总体上值不值得做”,异质效应告诉你“对谁做最值得”。实际决策中,两者往往都需要。
6. 回归断点与干扰效应:当随机化不完整或个体不独立时
6.1 回归断点设计:利用“阈值规则”做因果推断
有些场景下,处理分配不是随机的,而是基于某个连续变量是否超过阈值。比如奖学金按考试分数发放,分数超过 80 分的人获得奖学金,低于 80 分的人没有。在 80 分附近,获得和未获得奖学金的人几乎一样,唯一的系统差异就是有没有奖学金。回归断点设计就是利用这个“断点”附近的局部随机化来估计因果效应。
教科书第八章介绍了局部线性回归和偏差感知推断。局部线性回归是在断点两侧分别拟合线性模型,然后比较断点处的截距差。偏差感知推断则处理了断点附近非线性带来的偏差问题。
# 局部线性回归的伪代码 # X: 断点变量(如考试分数) # Y: 结果变量 # cutoff: 断点值 # h: 带宽 mask_left = (X >= cutoff - h) & (X < cutoff) mask_right = (X >= cutoff) & (X <= cutoff + h) # 在断点两侧分别拟合线性回归 # 然后计算断点处的预测值之差回归断点设计的核心挑战是带宽选择:带宽太宽,非线性偏差大;带宽太窄,方差大。教科书里介绍了最优带宽选择和数据驱动的方法。
6.2 干扰效应:当个体之间不独立
标准因果推断假设个体之间互不干扰(SUTVA)。但在很多场景下,这个假设不成立。比如疫苗接种:一个人接种疫苗不仅保护自己,还可能通过减少传播保护周围的人。这就是干扰效应。
教科书第十一章和第十二章讨论了干扰下的因果推断。核心思路是定义“暴露映射”:一个个体的结果不仅取决于自己的处理,还取决于周围人的处理。然后在这个框架下定义和估计因果效应。置换检验和有限总体方法被用来做推断。
6.3 常见误区:断点设计不是“随便找个阈值”
误区一:断点两侧的人可以直接比较。只有在断点附近,两侧的人才具有可比性。远离断点的人差异很大,直接比较会引入偏差。
误区二:断点设计不需要无混淆假设。断点设计确实比一般观察性研究更可信,但它仍然假设断点附近没有其他不连续变化。如果断点处同时发生了其他政策变化,估计就会混淆。
误区三:干扰效应可以忽略。在很多社会和经济场景中,干扰效应不仅存在,而且可能是主要效应。忽略干扰会导致估计有偏,甚至方向都反了。
7. 什么时候该用因果推断,什么时候别硬上
因果推断不是万能钥匙。它有一套明确的适用条件,用错了比不用更危险。
该用的时候:你有一个明确的干预或处理,想知道它对某个结果的影响;你有数据,无论是实验数据还是观察性数据;你愿意花时间思考无混淆假设是否成立,并做敏感性分析。比如某公司想评估新推荐算法对用户停留时长的影响,做了 A/B 实验,这就是典型的因果推断场景。或者某机构想评估培训项目对就业的影响,没有随机化但测了很多协变量,可以用倾向得分或双重稳健方法。
别硬上的时候:你只有相关性数据,没有任何关于处理分配机制的信息,也不愿意做假设;你的样本量极小,连基本的统计功效都不够;你关心的变量之间存在复杂的反馈循环,无混淆假设明显不成立。这时候硬做因果推断,得到的可能只是“看起来像因果”的相关性,翻车概率很高。
教科书里有一个细节值得注意:作者在每一章末尾都附了“文献注记”,说明方法的来源和适用边界。这种写法本身就在提醒读者,因果推断是一个有条件的工具,不是一套自动算法。
我自己的血泪经验是:每次做因果推断之前,先问自己三个问题——处理是什么、结果是什么、什么因素同时影响两者?如果第三个问题答不上来,或者答上来的因素没测到,那就别急着跑模型。从那以后我每次做分析都强制走一遍这个清单,省了很多后悔药。
希望帮到你。
本文还有配套的精品资源,点击获取