量化交易中文教材

第 16 章 因果推断

本章对应 Wasserman 原书第 16 章。前面各章反复出现同一个提醒:"关联不等于因果"——犯罪数据中警务支出系数为正,CORIS 数据中收缩压不显著,扁桃体切除与霍奇金病相关。本章终于正面回答:因果到底是什么意思?什么时候可以从数据中估计它?原书用反事实(潜在结果)框架给出了精确的数学定义,然后说明随机化为什么能识别因果效应、观察性数据中如何通过调整混杂变量来估计它,最后用这一框架拆解辛普森悖论。下一章将用有向图给出同一套思想的另一种表述。

量化研究几乎全是观察性研究:我们不能随机分配哪些公司回购、哪些股票被纳入指数、哪些日子央行降息。理解本章,是判断一个"因子效应"或"事件效应"能否被当作可交易规律的前提。计量经济学中的工具变量、双重差分、断点回归等识别策略见第 05 册。

学习目标

  1. 会用潜在结果 \((C_0,C_1)\) 与一致性关系 \(Y=C_X\) 表述因果问题,能区分平均因果效应 \(\theta\) 与关联 \(\alpha\)。
  2. 理解 \(\theta\neq\alpha\) 的根源是处理分配与潜在结果相关,会构造关联与因果符号相反的例子。
  3. 会证明随机分配下 \(\theta=\alpha\),理解随机化的作用。
  4. 理解连续处理下的因果回归函数 \(\theta(x)=\mathbb E\,C(x)\) 与回归函数 \(r(x)\) 的区别。
  5. 掌握"无未观测混杂"假设与调整公式 \(\theta(x)=\int\mathbb E(Y\mid X=x,Z=z)\,dF_Z(z)\),知道可加线性调整在效应异质时的局限。
  6. 能用反事实语言解释辛普森悖论,并联系到组合绩效归因。

读前导读

这一章在解决什么问题

量化研究里最常见的一类结论是"具有某特征的股票(或发生某事件的公司)随后跑赢了"。本章要回答的是:这个"跑赢"有多少是特征或事件本身造成的,有多少只是因为具有这个特征的公司本来就不一样? 前者是因果效应,后者是选择偏差,两者加起来才是你在数据里看到的关联。

CFA 里你一定见过"相关不等于因果"这句话,也见过事件研究法(异常收益、累计异常收益)。本章把这句话变成可以计算的数学:给每个个体设想两个"平行世界"的结果(回购了会怎样、没回购会怎样),因果效应就是两个世界的平均差;数据只给你每个个体其中一个世界。由此可以精确地说明:随机分配为什么能解决问题;观察性数据里控制变量需要满足什么条件才有效;控制变量时为什么要按"总体分布"而不是"各组自身的分布"加权。最后的辛普森悖论在组合绩效归因里天天出现:每个行业都跑赢、总体却跑输,Brinson 归因的逻辑与本章的调整公式是同一件事。

需要先想起来的数学

1. 条件期望与全期望公式。 \(\mathbb E(Y)=\sum_z\mathbb E(Y\mid Z=z)P(Z=z)\),即"总平均 = 各组平均按组的占比加权"。例:组合收益 = 各行业收益 × 行业权重之和。连续情形把求和换成积分,记作 \(\int\cdots dF_Z(z)\)(\(dF_Z(z)\) 可以读作"按 \(Z\) 的分布加权",离散时就是 \(P(Z=z)\))。参见 第 00 册第 07 章 概率中的分析工具、第 03 章 积分。

2. 独立与条件独立。 \(A\amalg B\) 表示独立:知道 \(B\) 不改变 \(A\) 的分布,因此 \(\mathbb E(A\mid B)=\mathbb E(A)\)。\(A\amalg B\mid Z\) 表示条件独立:在 \(Z\) 取同一个值的人群里,\(A\) 与 \(B\) 独立。例:在同一行业内,股票是否被分析师覆盖与其盈利能力无关,但跨行业时两者相关。

3. 回归系数与交互项。 \(Y=\beta_0+\beta_1X+\beta_2Z+\beta_3XZ\) 中,\(X\) 的效应是 \(\beta_1+\beta_3Z\),随 \(Z\) 变化;没有交互项时效应对所有人相同。参见第 13a 章。

4. 逻辑记号。 \(\Rightarrow\) 读作"推出";\(\Longleftrightarrow\) 读作"等价于"。参见 第 00 册第 08 章 读懂数学证明与符号。

怎么读这一章

本章数学不难,难在概念。核心必读:16.2(潜在结果、\(\theta\) 与 \(\alpha\)、定理 16.3 的证明)、16.4 的定理 16.6 与注 16.7、16.5 辛普森悖论,以及 16.6 实战的七条读法(特别是第 3、5、6 条)。16.3 连续处理是 16.2 的推广,读懂例 16.5 的图像直觉即可。建议读完 16.2 后先做练习 1,自己构造一个关联与因果符号相反的例子,比读十遍定义更能掌握这套语言。


16.1 因果是什么意思

粗略地说,"\(X\) 导致 \(Y\)"的意思是:改变 \(X\) 的值,会改变 \(Y\) 的分布。如果 \(X\) 导致 \(Y\),二者必然相关;但反过来不成立,相关不意味着因果。

问题在于,"改变 \(X\)"是一个关于假想操作的陈述,而数据只记录了实际发生的事。要把因果说清楚,需要一种语言来描述"如果当初做了别的选择会怎样"。原书介绍两种等价的语言:本章的反事实随机变量,以及第 17 章的有向无环图。


16.2 反事实模型

潜在结果与一致性

设 \(X\) 是二元处理变量:\(X=1\) 表示接受处理(服药、吸烟、公司宣布回购),\(X=0\) 表示未接受。\(Y\) 是结果变量。

引入一对潜在结果(potential outcomes)\((C_0,C_1)\):\(C_0\) 是该个体若未接受处理时的结果,\(C_1\) 是若接受处理时的结果。实际观察到的结果是

\[Y=\begin{cases}C_0,&X=0\\C_1,&X=1\end{cases}\quad\Longleftrightarrow\quad Y=C_X.\tag{16.1}\]
(16.1) 称为一致性关系(consistency relationship)。

每个个体只能观察到两个潜在结果中的一个。原书的玩具数据(星号表示未观测):

\(X\) \(Y\) \(C_0\) \(C_1\)
0 4 4 *
0 7 7 *
0 2 2 *
0 8 8 *
1 3 * 3
1 5 * 5
1 8 * 8
1 9 * 9

\(X=0\) 时 \(C_1\) 不可观测,称为反事实(counterfactual)——"如果与事实相反地接受了处理,会得到什么结果"。同理 \(X=1\) 时 \(C_0\) 是反事实。因果推断本质上是一个缺失数据问题:每个人都缺了一半的数据。

金融直觉:这和评估一笔对冲决策是一回事。你在 3 月给组合加了股指期货空头,随后市场大跌,组合少亏了 5%。"对冲的价值"是对冲后的实际结果减去"如果当初不对冲"的结果,而后者永远观察不到,只能靠模型推算(这里推算很容易,因为对冲的作用机制已知)。研究"回购对股价的影响"时难就难在:同一家公司同一时期"不回购的股价"不存在,也没有可靠的机制模型可以推算,只能拿别的公司来近似,而别的公司和它不一样。

结果为二元时,可以按 \((C_0,C_1)\) 把个体分成四类:

  • 幸存者(survivors)\((1,1)\):无论是否处理结果都好;
  • 响应者(responders)\((0,1)\):处理才有好结果;
  • 反响应者(anti-responders)\((1,0)\):处理反而有害;
  • 注定者(doomed)\((0,0)\):无论如何结果都不好。

可以把 \((C_0,C_1)\) 看作一个隐变量,它包含了关于这个个体的全部相关信息。

因果效应与关联

平均因果效应(average causal effect,也称平均处理效应,average treatment effect)定义为

\[\theta=\mathbb E(C_1)-\mathbb E(C_0),\tag{16.2}\]
即"所有人都接受处理时的平均结果"减去"所有人都不接受处理时的平均结果"。它是一个关于假想总体的量。二元结果时还有其他度量,如因果优势比 \(\frac{\mathbb P(C_1=1)}{\mathbb P(C_1=0)}\big/\frac{\mathbb P(C_0=1)}{\mathbb P(C_0=0)}\) 与因果相对风险 \(\mathbb P(C_1=1)/\mathbb P(C_0=1)\);主要思想对各种度量都相同,下面只用 \(\theta\)。

数据能直接估计的是关联(association):

\[\alpha=\mathbb E(Y\mid X=1)-\mathbb E(Y\mid X=0).\tag{16.3}\]

定理 16.1(关联不是因果)。 一般地,\(\theta\neq\alpha\)。

例 16.2。 一个 8 人总体:

\(X\) \(Y\) \(C_0\) \(C_1\)
0 0 0 0*
0 0 0 0*
0 0 0 0*
0 0 0 0*
1 1 1* 1
1 1 1* 1
1 1 1* 1
1 1 1* 1

每个人都有 \(C_0=C_1\),处理对任何人都没有作用:\(\theta=\frac48-\frac48=0\)。但观测数据给出 \(\alpha=\frac{1+1+1+1}4-\frac{0+0+0+0}4=1\)。

原书给出的故事是:\(Y=1\) 表示健康,\(X=1\) 表示服用维生素 C。维生素 C 毫无作用,人群分两类——健康型 \((1,1)\) 和不健康型 \((0,0)\)——而健康的人恰好更爱服用维生素 C。是 \((C_0,C_1)\) 与 \(X\) 之间的关联制造了 \(X\) 与 \(Y\) 的关联。

更有意思的是后续:如果有人把这个关联误读为因果,劝所有人服用维生素 C,假设 4 个不健康者中有 3 人照做,那么新总体中服用者有 7 人(4 个健康、3 个不健康),未服用者 1 人(不健康),\(\alpha=\frac47-\frac01=\frac47\)。关联从 1 降到了 \(4/7\)。因果效应始终为零,但一个不区分关联和因果的观察者会困惑:推广服用之后,"维生素 C 的效果"似乎变差了。

在金融中这个现象非常常见:一个因子被发现、发表、被广泛交易后,其"效应"衰减。部分原因是套利,但另一部分原因正是这里描述的机制——原先的关联来自"哪些股票具有该特征"的选择机制,当市场参与者的行为改变了这种选择机制,关联也随之改变。

原书习题 1 要求构造 \(\alpha>0\) 而 \(\theta<0\) 的例子:关联与因果效应的符号都可以相反。\(\theta\neq\alpha\) 的根本原因是 \((C_0,C_1)\) 与 \(X\) 不独立,即处理的分配依赖于个体的类型。

推导拆解(关联 = 处理组效应 + 选择偏差):由一致性,\(\alpha=\mathbb E(C_1\mid X=1)-\mathbb E(C_0\mid X=0)\)。在中间加一项再减一项 \(\mathbb E(C_0\mid X=1)\): \(\alpha=\underbrace{\mathbb E(C_1\mid X=1)-\mathbb E(C_0\mid X=1)}_{\text{处理组的平均因果效应(ATT)}}+\underbrace{\mathbb E(C_0\mid X=1)-\mathbb E(C_0\mid X=0)}_{\text{选择偏差}}\)。 选择偏差是"处理组如果不接受处理,会比对照组好多少",即两组人本来就有的差别。例 16.2 中 ATT \(=0\),选择偏差 \(=1-0=1\),所以 \(\alpha=1\)。回购的例子里,选择偏差就是"爱回购的高质量公司即使不回购也会跑赢"的那部分,16.6 节的模拟里它占了关联的大头。ATT 本身还可能与 \(\theta\) 不同(当效应因人而异时),16.6 节读法第 5 条会看到。

随机化

定理 16.3。 若随机分配处理,且 \(\mathbb P(X=0)>0\)、\(\mathbb P(X=1)>0\),则 \(\alpha=\theta\)。因此 \(\alpha\) 的任何相合估计都是 \(\theta\) 的相合估计,特别地

\[\hat\theta=\bar Y_1-\bar Y_0,\qquad\bar Y_1=\frac1{n_1}\sum_iY_iX_i,\quad\bar Y_0=\frac1{n_0}\sum_iY_i(1-X_i),\]
其中 \(n_1=\sum_iX_i\),\(n_0=\sum_i(1-X_i)\)。

证明。 随机分配意味着 \(X\) 与 \((C_0,C_1)\) 独立。于是

\[\theta=\mathbb E(C_1)-\mathbb E(C_0)=\mathbb E(C_1\mid X=1)-\mathbb E(C_0\mid X=0)=\mathbb E(Y\mid X=1)-\mathbb E(Y\mid X=0)=\alpha.\]
第二个等号用了独立性,第三个等号用了一致性 \(Y=C_X\)。相合性来自大数定律。\(\square\)

推导拆解:

  1. 第二个等号为什么需要独立:\(X\) 与 \(C_1\) 独立意味着"知道某人被分进处理组"不改变对其 \(C_1\) 的预期,所以 \(\mathbb E(C_1)=\mathbb E(C_1\mid X=1)\);同理 \(\mathbb E(C_0)=\mathbb E(C_0\mid X=0)\)。用上面的分解看,就是选择偏差 \(\mathbb E(C_0\mid X=1)-\mathbb E(C_0\mid X=0)=0\)。
  2. 第三个等号:在 \(X=1\) 的人里,\(Y\) 就是 \(C_1\),所以 \(\mathbb E(C_1\mid X=1)=\mathbb E(Y\mid X=1)\)。左边含不可观测量,右边全是可观测量,这一步把因果量"翻译"成了数据能估计的量。
  3. 条件 \(\mathbb P(X=0)>0\)、\(\mathbb P(X=1)>0\) 的作用:两组都得有人,否则条件期望没有数据可估。

证明虽短,却是整个实验科学的逻辑基础:随机化切断了"个体类型"与"是否处理"之间的一切联系,于是处理组和对照组在所有方面(包括无法观测的方面)平均来说都可比。

条件因果效应。 若有协变量 \(Z\),可以定义

\[\theta_z=\mathbb E(C_1\mid Z=z)-\mathbb E(C_0\mid Z=z).\]
例如 \(Z\) 为性别时,\(\theta_0\) 是女性中的因果效应,\(\theta_1\) 是男性中的。随机试验中 \(\theta_z=\mathbb E(Y\mid X=1,Z=z)-\mathbb E(Y\mid X=0,Z=z)\),可以用相应子样本的均值差估计。

反事实模型小结。

  • 随机变量:\((C_0,C_1,X,Y)\);
  • 一致性:\(Y=C_X\);
  • 因果效应:\(\theta=\mathbb E(C_1)-\mathbb E(C_0)\);
  • 关联:\(\alpha=\mathbb E(Y\mid X=1)-\mathbb E(Y\mid X=0)\);
  • 随机分配 \(\Rightarrow(C_0,C_1)\amalg X\Rightarrow\theta=\alpha\)。

16.3 超越二元处理

当处理是连续的(如药物剂量、持仓规模、交易速度),潜在结果从一对数推广为一个函数。反事实函数 \(C(x)\) 表示个体在接受剂量 \(x\) 时的结果,观测结果由一致性关系给出:

\[Y\equiv C(X).\tag{16.4}\]
(原书图 16.1:每个个体有一条曲线 \(C(x)\),我们只看到曲线在实际剂量 \(X\) 处的一个点。)

因果回归函数(causal regression function)为

\[\theta(x)=\mathbb E\big(C(x)\big),\tag{16.5}\]
即"如果所有人都接受剂量 \(x\)"的平均结果。而通常的回归函数 \(r(x)=\mathbb E(Y\mid X=x)\) 度量的是关联。

定理 16.4。 一般地 \(\theta(x)\neq r(x)\);但当 \(X\) 随机分配时,\(\theta(x)=r(x)\)。

例 16.5。 原书图 16.2:4 个个体的反事实函数 \(C_i(x)\) 都是水平线,分别取值 3、2、1、0。改变剂量不会改变任何人的结果,\(\theta(x)=\frac14\sum_iC_i(x)=1.5\) 为常数,没有任何因果效应。但实际观测点 \(Y_i=C_i(X_i)\) 中,\(C\) 值越高的个体恰好剂量越小(\(X_1<X_2<X_3<X_4\)),于是回归曲线 \(r(x)\) 是递减的——无因果却有清晰的关联。

原书习题 4 把这个例子推到极端:令 \(C_i(x)=\beta_{1i}x\),每个人的斜率 \(\beta_{1i}\) 都为正(剂量对每个人都有正效应),却可以构造 \((\beta_1,X)\) 的联合分布,使 \(\mathbb E(Y\mid X=x)\) 关于 \(x\) 递减。只要"效应越大的人选择的剂量越小"即可。量化中的对应:如果每只股票的流动性对其收益的效应都为正,但流动性改善最大的恰是效应最弱的股票,横截面回归就可能得到负斜率。


16.4 观察性研究与混杂

处理不是随机分配、而是由个体自己选择(或由环境决定)的研究,称为观察性研究(observational study)。报纸上的大多数健康研究都属于此类,量化研究中的几乎所有"因子"和"事件"研究也都属于此类。此时关联与因果不同,原因是潜在结果 \(C\) 与 \(X\) 不独立。

混杂变量与调整公式

假设能找到一组变量 \(Z\),使得在 \(Z\) 相同的个体中,\(X\) 的取值近似随机——例如年龄、性别、教育程度、族裔都相似的人群中,是否服药更接近随机。用符号表示:

\[\{C(x):x\in\mathcal X\}\amalg X\mid Z.\tag{16.6}\]
这样的 \(Z\) 称为混杂变量(confounding variables)。若 (16.6) 成立且 \(Z\) 被观测到,称为无未观测混杂(no unmeasured confounding)。

白话解释:(16.6) 读作"给定 \(Z\),潜在结果与处理选择独立"。它说的是:把公司按质量 \(Z\) 分成很多小组,在每个小组内部,谁回购、谁不回购就像抛硬币一样,与它们本来的前景无关。它不要求回购与质量无关(高质量公司照样可以更爱回购),只要求质量之外没有其他同时影响"是否回购"和"未来收益"的因素。这个假设无法用数据检验:你永远看不到同一家公司不回购时的收益,因而无法验证组内的分配是不是真的"像抛硬币"。

定理 16.6。 若 (16.6) 成立,则

\[\theta(x)=\int\mathbb E(Y\mid X=x,Z=z)\,dF_Z(z).\tag{16.7}\]
若 \(\hat r(x,z)\) 是 \(\mathbb E(Y\mid X=x,Z=z)\) 的相合估计,则 \(\hat\theta(x)=\frac1n\sum_{i=1}^n\hat r(x,Z_i)\) 是 \(\theta(x)\) 的相合估计。特别地,若 \(r(x,z)=\beta_0+\beta_1x+\beta_2z\) 是线性的,则
\[\hat\theta(x)=\hat\beta_0+\hat\beta_1x+\hat\beta_2\bar Z_n,\tag{16.8}\]
其中 \((\hat\beta_0,\hat\beta_1,\hat\beta_2)\) 为最小二乘估计。

证明思路。 由全期望公式,\(\theta(x)=\mathbb E\,C(x)=\int\mathbb E(C(x)\mid Z=z)dF_Z(z)\)。由 (16.6),在给定 \(Z=z\) 时 \(C(x)\) 与 \(X\) 独立,所以 \(\mathbb E(C(x)\mid Z=z)=\mathbb E(C(x)\mid X=x,Z=z)\);再由一致性,这等于 \(\mathbb E(Y\mid X=x,Z=z)\)。\(\square\)

推导拆解:三步分别对应三个工具。

  1. 全期望公式:先在每个 \(Z\) 层内求 \(C(x)\) 的平均,再按 \(Z\) 的总体分布加权。这一步不需要任何假设。
  2. 条件独立 (16.6):在 \(Z=z\) 层内,\(X\) 与 \(C(x)\) 独立,所以只看 \(X=x\) 的那部分个体,\(C(x)\) 的平均不变。这就是定理 16.3 的随机化论证,只是搬到了每个 \(Z\) 层内部。
  3. 一致性:在 \(X=x\) 的个体中 \(C(x)=Y\),于是不可观测的量变成了可观测的条件均值。 离散的数值例子:\(Z\) 只取两值,各占一半。层 \(Z=1\) 中处理组平均收益 5%、对照组 3%;层 \(Z=0\) 中分别为 2%、1%。则 \(\theta(1)=0.5\times5\%+0.5\times2\%=3.5\%\),\(\theta(0)=0.5\times3\%+0.5\times1\%=2\%\),因果效应 1.5%。无论处理组里 \(Z=1\) 的比例是多少,都按 0.5 和 0.5 加权。

在线性情形下,(16.8) 说明因果回归函数的斜率就是 \(\hat\beta_1\):当 \(Z\) 线性可加地进入模型时,控制 \(Z\) 后 \(X\) 的回归系数就是因果斜率。这正是"在回归中加入控制变量"的理论依据。

注 16.7。 对比关联回归函数:

\[\mathbb E(Y\mid X=x)=\int\mathbb E(Y\mid X=x,Z=z)\,dF_{Z\mid X}(z\mid x).\]
两个公式的被积函数相同,区别只在于对 \(Z\) 的边际分布 \(F_Z\) 还是条件分布 \(F_{Z\mid X}\) 积分。关联回归函数在比较 \(x\) 不同的个体时,同时比较了 \(Z\) 分布不同的人群;因果回归函数则固定 \(Z\) 的分布为总体分布。流行病学把 (16.7) 称为调整后的处理效应(adjusted treatment effect),这个过程称为对混杂变量进行调整(adjusting / controlling)。

金融直觉:比较两位基金经理,A 重仓科技、B 重仓公用事业,去年科技大涨。直接比较总收益(关联)时,各自的行业收益按各自的行业权重加权,混进了行业配置的差异。若想问"两人谁更会在行业内选股",就该把两人的行业内收益都按同一套权重(例如基准的行业权重)加权再比较。前者对应 \(F_{Z\mid X}\),后者对应 \(F_Z\)。调整公式做的就是"用统一的权重重新加总",这也是人口统计里"年龄标准化死亡率"的做法。

观察性研究的可信度

选择测量哪些混杂变量需要科学洞见,而且即使调整了,也永远无法确定没有遗漏的混杂。所以原书主张对观察性研究保持健康的怀疑。观察性研究的结论开始可信,通常需要三个条件同时满足:(i) 多项独立研究重复得到相同结果;(ii) 每项研究都控制了合理的混杂变量;(iii) 有合理的科学机制可以解释。吸烟与肺癌是一个好例子:大量研究在调整混杂后仍然得到同样的关系,实验室证明吸烟会损伤肺细胞,随机动物实验也发现了因果联系。单独一项观察性研究本身不构成强证据。

把这三条翻译到因子研究:(i) 因子在不同市场、不同时期、样本外都成立;(ii) 控制了规模、行业、流动性等明显的混杂;(iii) 有合理的经济机制(风险补偿、行为偏差或制度约束)。三条缺一,都应当打折扣。


16.5 辛普森悖论

原书认为,大多数教材对辛普森悖论的解释令人困惑甚至是错误的,因为不使用反事实(或有向图)几乎不可能讲清楚它。

设 \(X\) 为二元处理,\(Y\) 为二元结果,\(Z\) 为性别(\(Z=1\) 男,\(Z=0\) 女)。联合分布为:

\(Z=1\),\(Y=1\) \(Z=1\),\(Y=0\) \(Z=0\),\(Y=1\) \(Z=0\),\(Y=0\)
\(X=1\) 0.1500 0.2250 0.1000 0.0250
\(X=0\) 0.0375 0.0875 0.2625 0.1125

\((X,Y)\) 的边际分布:\(X=1\) 时 \(Y=1\) 为 0.25、\(Y=0\) 为 0.25;\(X=0\) 时 \(Y=1\) 为 0.30、\(Y=0\) 为 0.20。计算得:

\[\mathbb P(Y=1\mid X=1)-\mathbb P(Y=1\mid X=0)=0.5-0.6=-0.1,\]
\[\mathbb P(Y=1\mid X=1,Z=1)-\mathbb P(Y=1\mid X=0,Z=1)=0.4-0.3=0.1,\]
\[\mathbb P(Y=1\mid X=1,Z=0)-\mathbb P(Y=1\mid X=0,Z=0)=0.8-0.7=0.1.\]

表面上看,"处理对整体有害,对男性有益,对女性也有益"——这似乎是矛盾的:一个对每个人都有益的处理怎么可能对整体有害?

原书的解释:问题出在从数学到自然语言的翻译。 \(\mathbb P(Y=1\mid X=1)<\mathbb P(Y=1\mid X=0)\) 并不意味着处理有害。"处理有害"的正确数学表达是 \(\mathbb P(C_1=1)<\mathbb P(C_0=1)\);"处理对男性有害"是 \(\mathbb P(C_1=1\mid Z=1)<\mathbb P(C_0=1\mid Z=1)\)。上表中的三个条件概率陈述在数学上毫不矛盾——它们只是在描述关联,而关联可以在汇总时反转(这里是因为女性的基线恢复率高,而女性大多没有接受处理)。

真正的辛普森悖论不可能发生。 若对每个 \(z\) 都有 \(\mathbb P(C_1=1\mid Z=z)>\mathbb P(C_0=1\mid Z=z)\),则

\[\mathbb P(C_1=1)=\sum_z\mathbb P(C_1=1\mid Z=z)\mathbb P(Z=z)>\sum_z\mathbb P(C_0=1\mid Z=z)\mathbb P(Z=z)=\mathbb P(C_0=1).\]
处理对每个子群有益,就一定对总体有益。

若假设性别是唯一的混杂变量,用调整公式 (16.7) 可算出 \(\mathbb P(C_1=1)=0.4\times0.5+0.8\times0.5=0.6\),\(\mathbb P(C_0=1)=0.3\times0.5+0.7\times0.5=0.5\)(男女各占一半),因果效应为 \(+0.1\)——与分组结果方向一致。

量化中的辛普森悖论。 组合绩效归因中经常出现:一个主动策略在每个行业内都跑赢了该行业基准,但整体却跑输了总基准。原因通常是行业配置——策略超配了表现较差的行业。"整体跑输"是关联陈述,它混合了"选股能力"(行业内比较)与"配置决策"(行业权重差异)。Brinson 归因把总超额收益拆成配置效应与选股效应,本质上就是按 \(Z\)(行业)分层,避免把两种效应混为一谈。

推导拆解(一个可以手算的绩效版辛普森悖论):两个行业。基准权重各 50%,行业收益:科技 10%,公用 2%,基准总收益 6%。组合把 80% 放在公用、20% 放在科技,行业内选股都跑赢 1 个百分点:公用 3%、科技 11%。组合总收益 \(=0.8\times3\%+0.2\times11\%=4.6\%\),跑输基准 1.4 个百分点。 拆解:按基准权重计算组合的行业内收益 \(0.5\times11\%+0.5\times3\%=7\%\),比基准高 1%,这是选股效应(对应调整公式,按 \(F_Z\) 加权);剩下的 \(4.6\%-7\%=-2.4\%\) 来自权重偏离,即配置效应(超配了收益低的行业)。总超额 \(-1.4\%=+1\%-2.4\%\)。"每个行业都跑赢、总体却跑输"不矛盾:总体比较时两边用的权重不同,这和辛普森表中处理组多为男性、对照组多为女性是同一种结构。


16.6 量化实战:回购公告的效应,关联与因果的差距

场景。 研究"公司宣布回购"(\(X=1\))对其随后 3 个月超额收益 \(Y\) 的影响。设定:

  • 混杂变量 \(Z\):公司质量(如自由现金流,标准化),高质量公司本身收益更高,也更爱回购;
  • 潜在结果:\(C_0=0.02Z+\varepsilon\),\(C_1=C_0+0.010-0.010Z\),即回购的因果效应平均为 1%,但对高质量公司效应更小(异质效应);
  • 回购倾向:观察性数据中 \(\mathbb P(X=1\mid Z)=\text{logistic}(-1+1.5Z)\);对照情形为随机分配,\(\mathbb P(X=1)=0.3\)。

我们比较五个量:真实平均因果效应 \(\theta\)、关联 \(\alpha\)、可加线性调整 (16.8) 的系数、带交互项的回归加上对 \(Z\) 边际分布的平均 (16.7)、以及处理组上的平均效应(ATT)。最后看只能观测到 \(Z\) 的噪声代理时会怎样。

import numpy as np
import pandas as pd
import statsmodels.formula.api as smf

rng = np.random.default_rng(16)

# ---------- 1) 观察性研究:公司"回购公告"对后续 3 个月超额收益的因果效应 ----------
n = 200_000
Z = rng.normal(size=n)                                   # 混杂:公司质量/现金流(标准化)
C0 = 0.02 * Z + rng.normal(0, 0.08, n)                   # 不回购时的潜在收益
C1 = C0 + 0.010 - 0.010 * Z                              # 回购时的潜在收益:效应随质量递减
theta = np.mean(C1 - C0)                                 # 真实平均因果效应(总体)
def simulate(randomized):
    p = np.full(n, 0.3) if randomized else 1 / (1 + np.exp(-(-1.0 + 1.5 * Z)))   # 高质量公司更爱回购
    X = rng.binomial(1, p)
    Y = np.where(X == 1, C1, C0)                         # 一致性关系 Y = C_X
    return pd.DataFrame(dict(X=X, Y=Y, Z=Z))

for label, randomized in [("随机分配", True), ("观察性数据", False)]:
    d = simulate(randomized)
    alpha = d.Y[d.X == 1].mean() - d.Y[d.X == 0].mean()  # 关联
    add = smf.ols("Y ~ X + Z", d).fit()                  # (16.8):可加线性调整
    inter = smf.ols("Y ~ X * Z", d).fit()                # 允许效应随 Z 变化
    d1, d0 = d.assign(X=1), d.assign(X=0)
    plug = np.mean(inter.predict(d1) - inter.predict(d0))  # (16.7):对 Z 的边际分布求平均
    att = np.mean((C1 - C0)[d.X == 1])                   # 处理组上的平均效应
    print(f"[{label}] 真 θ={theta:.4f} | 关联 α={alpha:.4f} | 可加调整 {add.params['X']:.4f} "
          f"| 交互+边际平均 {plug:.4f} | (处理组效应 ATT={att:.4f})")

# 未观测混杂:只看到 Z 的噪声代理
d = simulate(False)
d["Z_proxy"] = d.Z + rng.normal(0, 1.0, n)               # 测量误差很大的代理变量
inter_p = smf.ols("Y ~ X * Z_proxy", d).fit()
plug_p = np.mean(inter_p.predict(d.assign(X=1)) - inter_p.predict(d.assign(X=0)))
print(f"[只观测到噪声代理] 调整后估计 {plug_p:.4f}(真 θ={theta:.4f})")

# ---------- 2) 辛普森悖论:原书表格 ----------
tab = pd.DataFrame({"Z": [1, 1, 1, 1, 0, 0, 0, 0], "X": [1, 1, 0, 0, 1, 1, 0, 0],
                    "Y": [1, 0, 1, 0, 1, 0, 1, 0],
                    "p": [.15, .225, .0375, .0875, .10, .025, .2625, .1125]})
pY = lambda q: q.p[q.Y == 1].sum() / q.p.sum()
for name, q in [("全体", tab), ("男 Z=1", tab[tab.Z == 1]), ("女 Z=0", tab[tab.Z == 0])]:
    print(f"{name}: P(Y=1|X=1)-P(Y=1|X=0) = {pY(q[q.X == 1]) - pY(q[q.X == 0]):+.2f}")
pz = tab.groupby("Z").p.sum()
adj = {x: sum(pY(tab[(tab.Z == z) & (tab.X == x)]) * pz[z] for z in (0, 1)) for x in (0, 1)}
print(f"若 Z 是唯一混杂:P(C1=1)={adj[1]:.2f}, P(C0=1)={adj[0]:.2f}, 因果效应 {adj[1]-adj[0]:+.2f}")

关键输出:

[随机分配] 真 θ=0.0100 | 关联 α=0.0101 | 可加调整 0.0100 | 交互+边际平均 0.0100 | (处理组效应 ATT=0.0099)
[观察性数据] 真 θ=0.0100 | 关联 α=0.0244 | 可加调整 0.0064 | 交互+边际平均 0.0102 | (处理组效应 ATT=0.0028)
[只观测到噪声代理] 调整后估计 0.0189(真 θ=0.0100)
全体: P(Y=1|X=1)-P(Y=1|X=0) = -0.10
男 Z=1: P(Y=1|X=1)-P(Y=1|X=0) = +0.10
女 Z=0: P(Y=1|X=1)-P(Y=1|X=0) = +0.10
若 Z 是唯一混杂:P(C1=1)=0.60, P(C0=1)=0.50, 因果效应 +0.10

读法。

  1. 随机分配时一切都对。 关联、可加调整、交互调整都给出 1%,印证定理 16.3。
  2. 观察性数据中关联严重高估。 关联 \(\alpha=2.44\%\),是真实因果效应的 2.4 倍。多出来的部分来自"高质量公司既爱回购、本身收益又高"。一个只看"回购公司随后跑赢了多少"的事件研究会得出这个数字。
  3. 可加线性调整在效应异质时给出错误答案。 控制了 \(Z\) 的可加回归 \(Y\sim X+Z\) 给出 0.64%,偏低。原因是定理 16.6 要求 \(\hat r(x,z)\) 是 \(\mathbb E(Y\mid X,Z)\) 的相合估计,而真实条件均值含有 \(X\times Z\) 交互项,可加模型是错设的。此时 OLS 系数是各个 \(Z\) 层内效应的加权平均,权重正比于该层的 \(\mathbb V(X\mid Z)=p(Z)(1-p(Z))\),偏重于回购概率接近一半的那些公司(\(Z\approx0.67\),效应只有约 0.33%),而不是按 \(Z\) 的总体分布加权。
  4. 正确的调整公式恢复了真值。 带交互项的回归正确刻画了 \(\mathbb E(Y\mid X,Z)\),再按 (16.7) 对 \(Z\) 的边际分布求平均,得到 1.02%,与真值一致。
  5. "效应是多少"取决于问的是谁。 处理组的平均效应(ATT)只有 0.28%,因为实际回购的大多是高质量公司,而它们的效应小。如果问题是"一家典型公司宣布回购会怎样",答案是 \(\theta=1\%\);如果问题是"已经回购的公司平均从中获益多少",答案是 ATT。设计交易策略时通常更关心后者:你交易的是实际发生的事件,而不是假想的"所有公司都回购"。
  6. 混杂测量不准,调整就不彻底。 只观测到质量的噪声代理(信噪比 1:1)时,调整后的估计为 1.89%,仍然接近关联值。在因子研究中,"已经控制了规模和价值"往往只是控制了混杂的粗糙代理,剩余混杂仍然存在。这就是原书强调"无未观测混杂"是一个不可检验的假设的原因。
  7. 辛普森悖论的数值与 16.5 节完全一致;在"性别是唯一混杂"的假设下,调整后的因果效应为 \(+0.10\)。

其他量化场景速记。

  • 执行算法的 A/B 测试:券商比较不同下单算法的市场冲击时,若让交易员自选算法,难单往往被分给"更聪明"的算法,导致它看起来冲击更大。随机分配订单是唯一干净的办法,这正是定理 16.3。
  • 指数纳入效应:纳入指数的股票往往此前涨幅大、市值增长快,"纳入后收益"的关联包含了动量与规模的混杂;利用纳入规则的机械阈值(断点回归)能更接近随机化,见第 05 册。
  • 部分识别:原书习题 3 的 Manski 界说明,在不做任何无混杂假设时,二元结果的因果效应只能被限定在一个宽度为 1 的区间内。这提醒我们:从观察性数据得到点估计,一定依赖于某个不可检验的假设。

本章小结

因果效应用潜在结果定义:\(\theta=\mathbb E(C_1)-\mathbb E(C_0)\),它比较的是同一总体在两种假想处理下的平均结果;数据直接给出的关联 \(\alpha=\mathbb E(Y\mid X=1)-\mathbb E(Y\mid X=0)\) 比较的是两个不同的人群。二者一般不等,甚至符号相反,根源在于处理分配与潜在结果相关。随机分配使 \((C_0,C_1)\amalg X\),从而 \(\theta=\alpha\)。连续处理时,区分因果回归函数 \(\theta(x)=\mathbb E\,C(x)\) 与回归函数 \(r(x)\)。观察性研究中,若所有混杂变量 \(Z\) 都被观测到,因果效应可由调整公式 \(\theta(x)=\int\mathbb E(Y\mid X=x,Z=z)dF_Z(z)\) 得到——关键是对 \(Z\) 的边际分布而不是条件分布积分;用回归实现时,条件均值模型必须设定正确。辛普森悖论源自把条件概率误读为因果陈述,真正的因果悖论不可能发生。

概念 公式 / 结论
一致性 \(Y=C_X\)(连续处理:\(Y=C(X)\))
平均因果效应 \(\theta=\mathbb E(C_1)-\mathbb E(C_0)\)
关联 \(\alpha=\mathbb E(Y\mid X=1)-\mathbb E(Y\mid X=0)\)
随机化 \((C_0,C_1)\amalg X\Rightarrow\theta=\alpha\),\(\hat\theta=\bar Y_1-\bar Y_0\)
因果回归函数 \(\theta(x)=\mathbb E\,C(x)\);一般 \(\neq r(x)=\mathbb E(Y\mid X=x)\)
无未观测混杂 \(\{C(x)\}\amalg X\mid Z\)
调整公式 \(\theta(x)=\int\mathbb E(Y\mid X=x,Z=z)\,dF_Z(z)\),\(\hat\theta(x)=\frac1n\sum\hat r(x,Z_i)\)
关联的分解 \(\mathbb E(Y\mid X=x)=\int\mathbb E(Y\mid X=x,Z=z)\,dF_{Z\mid X}(z\mid x)\)
线性可加情形 \(\hat\theta(x)=\hat\beta_0+\hat\beta_1x+\hat\beta_2\bar Z\)
辛普森悖论 对所有 \(z\) 有 \(\mathbb P(C_1=1\mid z)>\mathbb P(C_0=1\mid z)\Rightarrow\mathbb P(C_1=1)>\mathbb P(C_0=1)\)

练习

基础

  1. 构造一个类似例 16.2 的小总体,使 \(\alpha>0\) 而 \(\theta<0\)。(原书习题 1。提示:让处理对每个人都略微有害,但让本来结果就好的人更倾向于接受处理。)
  2. 用自己的话解释:为什么随机分配能使"处理组与对照组在不可观测的方面也可比"?用定理 16.3 的证明说明哪一步用到了随机化。
  3. 证明定理 16.4:随机分配时 \(\theta(x)=r(x)\)。(原书习题 2。)
  4. 在 16.5 节的辛普森表格中验证 \(\mathbb P(Z=1)=0.5\),并说明为什么整体比较中处理看起来有害。(提示:计算 \(\mathbb P(Z=0\mid X=1)\) 与 \(\mathbb P(Z=0\mid X=0)\)。)
  5. 随机分配下,若以中位数之差 \(\theta=m_1-m_0\)(\(m_j\) 为 \(C_j\) 的中位数)作为因果效应,用 \((X,Y)\) 的联合分布表示 \(\theta\)。(原书习题 5。答案:\(F^{-1}_{Y\mid X=1}(1/2)-F^{-1}_{Y\mid X=0}(1/2)\)。)

进阶

  1. Manski 界(原书习题 3):观察性研究中 \(X,Y\in\{0,1\}\),不做任何无混杂假设。证明 \(\theta\) 不可识别,但可以给出可相合估计的上下界,且界的宽度为 1。(提示:\(\mathbb E(C_1)=\mathbb E(C_1\mid X=1)\mathbb P(X=1)+\mathbb E(C_1\mid X=0)\mathbb P(X=0)\),后一项中的 \(\mathbb E(C_1\mid X=0)\) 未知但在 \([0,1]\) 中;对 \(\mathbb E(C_0)\) 同理。)
  2. 原书习题 4:令 \(C_i(x)=\beta_{1i}x\),构造 \((\beta_1,X)\) 的联合分布,使 \(\mathbb P(\beta_1>0)=1\) 但 \(\mathbb E(Y\mid X=x)\) 关于 \(x\) 递减。
  3. 在 16.6 节的模拟中,证明可加回归 \(Y\sim X+Z\) 的系数(当 \(\mathbb E(Y\mid X,Z)\) 含交互项时)收敛到 \(\mathbb E[w(Z)\tau(Z)]/\mathbb E[w(Z)]\),其中 \(\tau(z)\) 是条件效应,\(w(z)=p(z)(1-p(z))\),\(p(z)=\mathbb P(X=1\mid Z=z)\)。(提示:Frisch–Waugh–Lovell 定理;为简化可设 \(\mathbb E(X\mid Z)\) 是 \(Z\) 的线性函数的近似。)
  4. 修改 16.6 节代码,用倾向得分加权(inverse propensity weighting)估计 \(\theta\):\(\hat\theta=\frac1n\sum\big[\frac{X_iY_i}{\hat p(Z_i)}-\frac{(1-X_i)Y_i}{1-\hat p(Z_i)}\big]\),其中 \(\hat p\) 用 logistic 回归估计。与回归调整的结果比较,并验证它在倾向得分模型正确时无需对结果模型做假设。

原书推荐习题:第 16 章 1(关联与因果符号相反,必做)、3(Manski 部分识别界)、4(个体正效应但总体回归为负,与横截面回归的误读密切相关,必做)、2、5。


原书对照

本章内容 原书章节 PDF 页码
反事实模型、一致性、\(\theta\) 与 \(\alpha\)、例 16.2、定理 16.3 16.1 p.258–262
连续处理、因果回归函数、例 16.5 16.2 p.262–264
观察性研究、混杂、调整公式(定理 16.6) 16.3 p.264–266
辛普森悖论 16.4 p.266–268
文献评注 16.5 p.268
习题 16.6 p.268–269