想象你是街角咖啡店的老板老周。周末你推出了“买一送一”促销活动,月底一算账,营业额比平时涨了整整20%。这多出来的20%是怎么来的?你心里有两个猜测:一是顾客冲着赠品多买了好几杯,客单量上去了;二是促销氛围让原本只喝美式的顾客,顺手升级成了更贵的手冲单品,客单价上去了。这两个猜测,对应两条完全不同的“作用路线”——前者绕了个弯(通过购买数量),后者直来直去(不经过数量)。因果中介分析,就是给老周做“路径拆账”的财务师:它把总效应精确拆成“间接效应”(通过中介变量)和“直接效应”(不经过中介变量)。但拆账有个大难题:你永远看不见同一个顾客“既收到促销、又没收到促销”的样子。这时,反事实推理登场了——它假设存在一个平行世界里的“你”,没收到促销、也没多买那杯咖啡。我们把真实世界和这个假想世界对照,就能算出每个环节的功劳。本文会用“咖啡店账本”这个场景,带你走完从反事实框架到NDE/NIE分解的完整推理链,并给出可运行的Python代码和真实应用场景。

岗位关联

学完本节,你将掌握因果中介分析与NDE/NIE分解的完整方法论,并把它应用到营销归因、政策机制的量化拆解中——这是AI从业者从“预测相关”升级到“解释因果”的必修课。

目录
  1. 可视化演示
  2. 总效应分解
  3. 反事实框架
  4. 自然直接效应
  5. 自然间接效应
  6. 识别假设
  7. 分解计算
  8. 应用场景
  9. 实操工具
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

展示系统处理流水线、实时性能指标曲线及多方案对比分析,包含数据流转、吞吐延迟监控与方案评估。

本节配有交互动效(进入视口后自动加载,约 3KB)。

系统可视化 处理流程:输入→处理→模型→输出 性能监控:实时指标 P=L×T

总效应分解

老周盯着账本上“多出来的20%”发呆。他首先确认一个事实:这20%是真实发生的总增量。无论背后是顾客多买了杯数,还是升级了单品,销售额的净增长摆在那里。在因果语言里,这个总增量就叫“总效应”(Total Effect,TE)。它是一笔总账,但还不能指导决策——老周必须知道钱从哪条路赚来的,才能决定下个月还卖不卖“买一送一”。这正是因果中介分析的起点:把总账分成两笔小账。

统计上,老周的促销就是处理变量 T(1=促销,0=不促销),顾客的购买杯数 M 是中介变量,营业额 Y 是结果变量。三者构成一张路径图:T 可以直接指向 Y(顾客看到促销氛围后单杯升级),也可以先指向 M、再指向 Y(促销让杯数变多,杯数拉高营业额)。前者叫直接路径,后者叫间接路径。中介变量就是夹在这条链路中间、承担“传导”作用的变量。

形式化地,总效应被定义为潜在结果之差在人群上的期望。这个公式把“促销组 vs 非促销组”的简单均值差,提升为“同一个体在两种状态下的反事实差”:

老周明白了:总账写的是“促销整体多赚了多少”,但只有拆成路径,才知道是“多买”的功劳还是“买贵”的功劳。账本先有总账,才谈得上拆账。

TE=E[Y(1)−Y(0)]\displaystyle \mathrm{TE} = \mathbb{E}[Y(1) - Y(0)]
公式通俗说明:TE 等于“每个顾客在接受促销时的营业额,减去他没接受促销时的营业额”,再对所有顾客取平均。
  1. 潜在结果记号$Y(1)$ 是同一顾客收到促销时的营业额,$Y(0)$ 是同一顾客没收到促销时的营业额,二者是一对“平行世界”中的值。
    Y(1),  Y(0):一对潜在结果\displaystyle Y(1),\; Y(0)\text{:一对潜在结果}
  2. 期望算符$\mathbb{E}[\cdot]$ 表示对所有顾客求平均,把个体差异压缩成一个总体数值。
    E[⋅]:总体平均\displaystyle \mathbb{E}[\cdot]\text{:总体平均}
  3. 相减含义两个潜在结果相减,得到促销在个体层面的因果效应;取期望后就是人群层面的平均因果效应。
    E[Y(1)−Y(0)]:促销的平均因果效应\displaystyle \mathbb{E}[Y(1)-Y(0)]\text{:促销的平均因果效应}

反事实框架

老周发现一个麻烦:他可以记录真实世界里每个顾客的消费,却永远看不到“同一个人如果没收到促销会花多少钱”。这个看不见的数值,就是“反事实”。为了拆账,老周必须借助一个思想实验——假想每个顾客都有两个平行世界版本:一个版本收到了促销,另一个版本没有。因果推断研究的一切,都建立在这个“平行世界对照”的框架上。

在统计术语里,这两个版本对应潜在结果 Y(1) 和 Y(0)。个体层面的因果效应 δ = Y(1) − Y(0),就是同一人两个版本的营业额之差。但现实残酷:每个顾客只能被观测到其中一个版本。这就是因果推断的根本难题——你无法同时观测到同一个个体的两个潜在结果。研究者能做的,是用观测规则把“被看见的世界”和“反事实世界”连接起来:

对老周来说,反事实框架的意义是:虽然平行世界不可见,但我们可以用合理的假设和统计模型“补全”缺失的那一半账目。没有这个框架,后面所有拆账都无从谈起。

Y=T⋅Y(1)+(1−T)⋅Y(0)\displaystyle Y = T \cdot Y(1) + (1 - T) \cdot Y(0)
公式通俗说明:顾客实际被观测到的营业额,等于“他在现实世界里那个版本的潜在结果”——收到促销就看 Y(1),没收到就看 Y(0)。
  1. 观测规则$T$ 是处理指示(1 为促销,0 为未促销),公式根据 T 的取值自动“选择”展示哪个潜在结果。
    T⋅Y(1):促销者贡献 Y(1)\displaystyle T \cdot Y(1)\text{:促销者贡献 Y(1)}
  2. 互补项$(1-T) \cdot Y(0)$ 在 T=0 时被激活,选出未促销者的潜在结果。
    (1−T)⋅Y(0):未促销者贡献 Y(0)\displaystyle (1-T) \cdot Y(0)\text{:未促销者贡献 Y(0)}
  3. 现实拼接两项相加,保证每个个体只露出一个“版本”,另一版本永远隐藏在反事实世界。
    T⋅Y(1)+(1−T)⋅Y(0):可观测结果的拼接\displaystyle T\cdot Y(1)+(1-T)\cdot Y(0)\text{:可观测结果的拼接}

自然直接效应

老周想单独衡量“促销氛围让顾客升级饮品”这条路的贡献。他决定做一个思想实验:让促销照常发生,但把顾客的购买杯数死死锁定在“他没收到促销时本该买的杯数”。换句话说,M 保持在 M(0) 的水平,T 却从 0 拨到 1。此时营业额的变化,就不再可能由“多买”引起,而只能归因于促销本身对单价的推力。这就是自然直接效应(Natural Direct Effect,NDE)。

NDE 的定义是“中介固定于未处理水平时,改变处理状态所带来的结果差异”。它剔除了中介变量 M 的所有干扰,因此常被称为“纯净直接效应”。老周可以理解为:顾客还在按老习惯买两杯,但促销海报让他把其中一杯换成了手冲——这中间没有经过“杯数”这个中介,完全是直接路径上的功力:

老周记下这笔账:NDE 是“不换杯数、只换心情”带来的额外营业额。它衡量的是促销本身的说服力,不含数量变化的功劳。

NDE=E[Y(1,M(0))−Y(0,M(0))]\displaystyle \mathrm{NDE} = \mathbb{E}[Y(1, M(0)) - Y(0, M(0))]
公式通俗说明:NDE 比较的是“促销发生 + 杯数锁定为未促销水平”与“促销未发生 + 杯数相同”两种情形,差出来的部分纯靠促销直接推动。
  1. 双下标潜在结果$Y(t, m)$ 表示“处理取 t、中介取 m”时的潜在结果,是对世界的更精细刻画。
    Y(t,m):双下标潜在结果\displaystyle Y(t, m)\text{:双下标潜在结果}
  2. 锁定中介$M(0)$ 是未促销时的购买杯数,把它固定住,就切断了“促销→杯数”这条间接路径。
    M(0):未处理状态下的中介水平\displaystyle M(0)\text{:未处理状态下的中介水平}
  3. 差分$Y(1,M(0)) - Y(0,M(0))$ 只改变处理状态,中介不变,差值即为直接路径的贡献。
    Y(1,M(0))−Y(0,M(0)):直接路径净变化\displaystyle Y(1,M(0))-Y(0,M(0))\text{:直接路径净变化}

自然间接效应

反过来,老周还想知道“多买杯数”这条路贡献了多少。这次他做另一个思想实验:促销照常发生(T 固定为 1),但把顾客的杯数从“未促销时会买的 M(0)”慢慢拨到“促销时会买的 M(1)”。其他条件都不变,营业额的增量就只能来自“M 的传导”——促销先改变了杯数,杯数再改变了总金额。这就是自然间接效应(Natural Indirect Effect,NIE)。

NIE 的定义是“处理固定在接受水平时,中介从 M(0) 变到 M(1) 所带来的结果变化”。它衡量的是通过中介链路传导的那部分效应。老周可以想象:同一批促销观众,有人本来只买 1 杯,促销后买了 3 杯,多出来的 2 杯再按每杯均价折算成营业额——这就是“暗度陈仓”的杯数路线:

老周的账本上,NIE 就是“多买”这条路。NIE 与 NDE 相加正好等于总效应 TE,这就是因果中介分析最优雅的“效应守恒定律”。

NIE=E[Y(1,M(1))−Y(1,M(0))]\displaystyle \mathrm{NIE} = \mathbb{E}[Y(1, M(1)) - Y(1, M(0))]
公式通俗说明:NIE 比较的是“促销已发生、杯数处于促销水平”和“促销已发生、杯数仍为未促销水平”两种情形,差出来的部分靠杯数变化传导。
  1. 固定处理两个潜在结果都把 T 固定为 1,保证我们在“促销已发生”的同一前提下比较。
    Y(1,⋅):处理固定于接受状态\displaystyle Y(1,\cdot)\text{:处理固定于接受状态}
  2. 拨动中介$M(1)$ 是促销时的杯数,$M(0)$ 是未促销时的杯数,二者之差代表促销对中介的推动。
    M(1)−M(0):中介的处理效应\displaystyle M(1)-M(0)\text{:中介的处理效应}
  3. 结果差分两个潜在结果相减,量化“中介变化→结果变化”的完整传导链。
    Y(1,M(1))−Y(1,M(0)):间接路径净变化\displaystyle Y(1,M(1))-Y(1,M(0))\text{:间接路径净变化}

识别假设

拆账公式看着漂亮,但老周知道:现实数据里他只能看到每个顾客的一个版本。凭什么相信公式算出的 NDE、NIE 不是幻觉?答案藏在“识别假设”里。这些假设相当于“平行世界能放心脑补”的前提条件——只有它们成立,反事实缺失值才能被可信地补全,拆出的账才不是假账。

其中最核心的是顺序可忽略性假设:在给定协变量 X(顾客年龄、常喝品类、天气等)后,处理 T 的分配就像“随机掷硬币”一样与潜在结果独立。第二条是“给定 T 和 X 后,中介 M 的取值也近似随机”。第一条保证直接路径不被混淆,第二条保证中介路径不被混淆。用数学语言表达第一层核心假设:

除了顺序可忽略性,还有一致性假设(观测到的结果就是潜在结果在现实中的体现)、无未观测混杂条件(不能有第三个幽灵变量同时影响 T、M、Y)、正性条件(每个子群体都有机会进入处理组)。这些假设共同构成“拆账可信”的基石。老周明白:账本要配平,前提是平行世界够公平。

(Y(t,m)⊥T)∣X\displaystyle (Y(t, m) \perp T) \mid X
公式通俗说明:控制了顾客特征 X 后,谁收到促销、谁没收到促销,与他的潜在营业额没有系统性关联——相当于“平行世界里的随机分组”。
  1. 双下标潜在结果$Y(t,m)$ 是任意处理与中介组合下的潜在结果,它必须先被明确定义。
    Y(t,m):任意状态组合的潜在结果\displaystyle Y(t,m)\text{:任意状态组合的潜在结果}
  2. 条件独立符号$\perp$ 表示两边相互独立,即在统计意义上互不提供预测信息。
    ⊥:条件独立记号\displaystyle \perp \text{:条件独立记号}
  3. 给定协变量$X$ 是所有可观测的顾客特征;“| X“表示我们把这些人特征先”控制住”再谈独立性。
    ∣X:在控制协变量之后\displaystyle \mid X \text{:在控制协变量之后}

分解计算

假设齐备之后,老周真正上手算账。他拿起收银台的记录:每个顾客的促销状态、购买杯数、营业额。经典做法来自 Baron 和 Kenny 的回归框架——连跑两个回归方程,就能把 NDE 和 NIE 从数据里“榨”出来。第一个方程估计促销对杯数的推力(系数 a₁);第二个方程同时放入促销和杯数,分别得到直接效应 c′ 和杯数对金额的推力(系数 b₁)。

这套方法的精髓是“乘积法”:间接效应 NIE 等于“促销→杯数”的强度乘以“杯数→金额”的强度。老周可以把 a₁ 想成“促销让人多买几杯”,b₁ 想成“每多一杯能多卖多少钱”,两者相乘就是“多买”这条路的总贡献。回归方程组如下:

老周按这个方法把收银数据跑了一遍,两笔账清清楚楚。差值法(用总效应减去直接效应)可作为交叉验证:两种算法得到一致的 NIE,账本才算真正配平。

M=a0+a1T+ε1Y=b0+c′T+b1M+ε2\displaystyle \begin{aligned} M &= a_0 + a_1 T + \varepsilon_1 \\ Y &= b_0 + c' T + b_1 M + \varepsilon_2 \end{aligned}
公式通俗说明:第一个方程刻画促销如何影响杯数;第二个方程同时刻画促销的直接作用(c′)和杯数的中介作用(b₁)。于是 NDE = c′,NIE = a₁ × b₁。
  1. 方程一结构$M = a_0 + a_1 T + \varepsilon_1$ 用促销状态解释杯数,$a_1$ 是促销对杯数的平均因果效应。
    a1:促销对中介的效应\displaystyle a_1 \text{:促销对中介的效应}
  2. 方程二结构$Y = b_0 + c' T + b_1 M + \varepsilon_2$ 同时控制促销与杯数,$c'$ 是控制中介后的直接效应。
    c′:控制中介后的直接效应\displaystyle c' \text{:控制中介后的直接效应}
  3. 乘积法配平$a_1 \times b_1$ 是“经杯数传导”的间接效应,线上性模型中它与 c′ 相加恰为总效应。
    NIE=a1×b1,TE=c′+a1b1\displaystyle \mathrm{NIE} = a_1 \times b_1,\quad \mathrm{TE} = c' + a_1 b_1

应用场景

账拆明白后,老周不再满足于“复盘”,他想做“预测”:如果只给老顾客发促销券,营业额的增量会是多少?这就进入 uplift 建模的领域。uplift 建模的目标是估计条件平均处理效应(CATE)——针对每个顾客的特征,算出促销给他的个体化增量。它回答的是“给谁发券”的问题,而中介分析回答的是“为什么有效”的问题,两者恰好互补:uplift 圈定人,中介分析指导策略,最终实现干预策略优化。

在实际工作中,电商平台的补贴策略、保险公司的交叉销售、政策制定者的福利发放,都在用这套组合拳。政策评估中,政府想知道“发放消费券”对消费总额的拉动,究竟是直接刺激居民消费意愿,还是通过“商家参与数量增多→供给更丰富”这条间接路径实现的。这时 CATE 公式是决策的核心:

老周终于把账本用活了:从“月底才知道多赚了 20%”,变成“月初就知道该给谁发券、发券能赚多少”。因果中介分析帮他把黑箱拆成透明管道,而 uplift 建模让拆出来的机制直指导航。

τ(x)=E[Y(1)−Y(0)∣X=x]\displaystyle \tau(\mathbf{x}) = \mathbb{E}[Y(1) - Y(0) \mid X = \mathbf{x}]
公式通俗说明:对于特征为 x 的顾客(比如“周末到店、偏好美式、月消费300元”),促销给他带来的预期营业额增量就是 τ(x)。
  1. 个体特征向量$\mathbf{x}$ 是顾客的全套特征(到店时间、偏好品类、历史消费等),它决定这个人属于哪个细分群体。
    x:协变量向量\displaystyle \mathbf{x}\text{:协变量向量}
  2. 条件期望$\mathbb{E}[\cdot \mid X=\mathbf{x}]$ 表示只在特征恰好等于 x 的人群里求平均。
    E[⋅∣X=x]:按特征条件化\displaystyle \mathbb{E}[\cdot \mid X=\mathbf{x}]\text{:按特征条件化}
  3. 个体化增量$\tau(\mathbf{x})$ 就是这个“人群 x”的个体化处理效应,用来决定该不该给他发券。
    τ(x):条件平均处理效应\displaystyle \tau(\mathbf{x})\text{:条件平均处理效应}

实操工具

老周把账算完,会计小王却提出一个疑问:“如果促销和杯数之间存在交互作用呢?比如促销时的赠品杯数'格外有杀伤力'——同样的杯数增幅,在促销氛围下带来的金额增量更大。这时候 TE = NDE + NIE 还成立吗?”答案是:不成立。当 T 与 M 存在交互时,总效应会多出一块“交互增益”(INT),必须补上才能配平。这就是交互扩展分解:

实操层面,R 的 mediation 包提供完整的 NDE/NIE 估计与 Bootstrap 置信区间;Python 里可以用 statsmodels 手动回归,或借助 DoWhy 这类因果推断库。老周最后给小王立了条规矩:每次拆账,必须报告效应守恒检验和置信区间——账不仅要算,还要证明算得稳。

TE=NDE+NIE+INT\displaystyle \mathrm{TE} = \mathrm{NDE} + \mathrm{NIE} + \mathrm{INT}
公式通俗说明:当“促销”和“杯数”会互相放大彼此的影响力时,账本上要单独记一笔“协同效应”INT,否则总账对不上。
  1. 交互来源模型中加入 $T \times M$ 交互项后,促销对金额的边际影响力会随杯数变化。
    T×M:交互项\displaystyle T \times M \text{:交互项}
  2. 增益块$\mathrm{INT}$ 捕捉“处理与中介相互放大”带来的额外效应,是守恒公式的修正项。
    INT:交互增益分量\displaystyle \mathrm{INT}\text{:交互增益分量}
  3. 守恒检验把 NDE、NIE、INT 三块相加,重新配平总效应——这是每个中介分析报告都该做的“验账”步骤。
    TE=NDE+NIE+INT:带交互的总效应守恒\displaystyle \mathrm{TE} = \mathrm{NDE} + \mathrm{NIE} + \mathrm{INT}\text{:带交互的总效应守恒}

AI 应用场景

电商补贴机制的营销归因

阶段:效果评估/归因建模

解决的问题:某外卖平台发放满减补贴后 GMV 上涨,但增长是来自“用户下单频次增加”还是“客单价提升”?传统看板只看总 GMV,无法指导预算分配。用因果中介分析将总效应分解为 NDE(补贴直接抬高客单价)与 NIE(补贴通过提升下单频次传导),让每一分补贴的贡献路径清晰可见。

具体案例:平台数据分析师发现 NIE 占总效应的 68%,说明补贴的主要杠杆是“多下一单”而非“下更贵的一单”。于是把预算从大额满减券转向“第二单半价”券,相同预算下 GMV 涨幅提升 22%。

推荐系统改版的因果归因

阶段:因果推断/A-B测试分析

解决的问题:推荐算法升级后用户观看时长提升,但工程师不确定提升来自算法本身更懂用户(直接效应),还是因为新算法占了更大的首页曝光位、用户看得更多(中介效应)。传统 A/B 测试只报告总提升,容易把版面功劳记在算法头上。中介分析把“曝光量”作为中介 M,拆出算法真实的 NDE。

具体案例:某短视频 App 用 NDE/NIE 分解发现,改版时长的 70% 来自曝光位增加(NIE),算法本身的直接贡献只有 30%。团队随后单独做了“等曝光位”的 A/B 验证,确认算法真实增益后,才把改版全量上线。

公共政策的机制验证

阶段:决策优化/因果发现

解决的问题:政府发放“夜间消费券”刺激城市消费,但效果如何传导?传统评估只看消费总额变化,无法回答“消费券是通过'激活商家参与'这条供应链路径起作用,还是直接刺激了市民消费意愿”。用中介分析打开政策黑箱,为下一轮政策设计提供机制证据。

具体案例:某市数据局以“商家参与数量”为中介,分解发现消费券的 NIE 占比 54%,说明供给侧响应是重要杠杆。于是第二轮政策兼顾“市民端发券”与“商家端入驻激励”,财政资金效率提升 31%。

Python 演示

python37 行
import numpy as npfrom numpy.random import default_rngimport statsmodels.api as sm rng = default_rng(42)n = 2000 # 生成促销变量 T (0=未促销, 1=促销)t = rng.binomial(1, 0.5, n) # 中介变量 M: 购买杯数, 促销使杯数平均多 0.8 杯m = 2.0 + 0.8 * t + rng.normal(0, 0.7, n) # 结果变量 Y: 消费金额, 由直接效应 5 元和杯数效应 9 元/杯构成y = 15.0 + 5.0 * t + 9.0 * m + rng.normal(0, 2.0, n) # 方程一: M ~ T, 估计 a1X1 = sm.add_constant(t)fit_m = sm.OLS(m, X1).fit()a1 = fit_m.params[1] # 方程二: Y ~ T + M, 估计 c' 和 b1X2 = sm.add_constant(np.column_stack([t, m]))fit_y = sm.OLS(y, X2).fit()c_prime = fit_y.params[1]b1 = fit_y.params[2] # 计算 NDE 与 NIEnde = c_primenie = a1 * b1te = nde + nie print(f"a1 = {a1:.3f} (促销 -> 杯数)")print(f"c' = {c_prime:.3f} (直接效应 NDE)")print(f"b1 = {b1:.3f} (杯数 -> 金额)")print(f"NIE = {nie:.3f} (间接效应)")print(f"TE  = {te:.3f} (总效应 = NDE + NIE)")
目的:用模拟的咖啡店促销数据,跑两个回归方程,实操估计自然直接效应 NDE、自然间接效应 NIE 与总效应 TE。
  1. t = rng.binomial(1, 0.5, n)用随机数模拟“一半顾客收到促销”,构建随机对照实验的底层数据。
  2. m = 2.0 + 0.8 * t + rng.normal(0, 0.7, n)这条是方程一的“真实生成器”:促销让杯数平均多 0.8 杯,产生间接路径。
  3. y = 15.0 + 5.0 * t + 9.0 * m + rng.normal(0, 2.0, n)消费金额由促销直接效应 5 元和杯数效应 9 元/杯共同决定。
  4. fit_m = sm.OLS(m, X1).fit()用最小二乘拟合“促销→杯数”,得到系数 a₁。
  5. X2 = sm.add_constant(np.column_stack([t, m]))把促销和杯数拼成设计矩阵,并添加截距列,准备同时回归。
  6. fit_y = sm.OLS(y, X2).fit()同时控制促销和杯数,分离出直接效应 c′ 与杯数效应 b₁。
  7. nie = a1 * b1乘积法核心:“多买几杯”和“每杯多值多少钱”相乘,得间接效应。

常见误区

误区跑完中介分析,看到间接效应 NIE 很小,就直接下结论“这个中介变量没什么用,可以忽略”。我猜 NIE 小就等于中介没贡献。

正解NIE 小只说明“平均来看”经由此中介传导的净效应很小,但可能存在方向抵消——直接效应为正、间接效应为负(比如促销让人少喝了几杯但买了贵的),两者一加总,净 NIE 就被抹平了。甚至可能存在“抑制效应”:某一路径是负贡献,恰好抵消了另一路径的正贡献。真正的做法是分别看 NDE 与 NIE 的符号和置信区间,再结合业务判断。

为何常见:人们习惯把“效应大小”等同于“重要性”,但因果中介分析里,效应是“净值”而非“总量”,抵消现象让数值变小不代表路径不存在。

误区只要做随机对照实验把促销 T 随机分配,中介分析的结果自然就是可信的,不需要再操心其他假设。

正解随机化只能保证“处理 T”不被混杂,但中介变量 M 本身并不会因为随机化而变得干净。M 是 T 之后发生的中间变量,极可能被第三个因素(比如顾客心情、天气、同伴影响)同时影响。中介路径的识别还需要额外的假设——顺序可忽略性中关于“M 的条件可忽略性”那一条,是随机化无法自动保证的。

为何常见:很多人把“随机对照实验”等同于“所有因果问题都解决了”,忽略了中介变量是处理后的变量,随机化这层“保护罩”覆盖不到它。

误区想求直接效应,就把中介 M 丢进回归方程 Y ~ T + M 里,看到 T 的系数就以为拿到了 NDE。

正解把 M 当作普通协变量控制,确实能得到条件关联意义下的 c′,但它在因果意义上并不自动等于 NDE。常规回归要求所有协变量都先于处理存在;M 是位于处理之后的中介,直接控制它会吸收掉一部分间接效应,还可能引入“中介夹带偏差”。正确做法是明确中介模型、写出两个方程,并检验识别假设,而不是“加个变量了事”。

为何常见:统计课常说“控制混杂变量”,初学者容易把“放进回归”和“因果识别”划等号,忘了控制变量的时机和角色同样重要。

误区一发现 T × M 交互项显著,就认为标准分解公式失效,觉得整个分析白做了。

正解交互存在并不推翻中介分析,只是需要把分解升级为“含交互的扩展形式”:TE = NDE + NIE + INT。INT 单独代表“处理与中介互相放大”的协同增益。比如促销氛围会让“每多一杯”的边际金额更高,这部分既不属于纯直接、也不属于纯间接,记到 INT 笔账下即可。所以交互不是灾难,只是让账本多一列。

为何常见:教材通常先讲无交互的简洁版本,学习者记住了"TE=NDE+NIE"这个特例,遇到交互就误以为理论崩塌,而不知道有更一般的扩展公式。

面试题

Q1. 因果中介分析最核心的分解目标是什么?

单选题 · easy

  • A.把总效应拆成直接效应与间接效应← 正确答案
  • B.把相关关系转换为回归系数
  • C.把观测数据分为训练与测试集
  • D.把混淆变量压缩成一个代理指标

答案:A。因果中介分析的核心是把总效应 TE 分解为自然直接效应 NDE 与自然间接效应 NIE,回答“经中介路径”与“不经过中介路径”各贡献多少。B、C、D 分别是回归、机器学习流程和降维思路,都不属于中介分解。

Q2. 反事实框架中的“潜在结果”指的是什么?

单选题 · easy

  • A.同一体在不同处理状态下的假设结果← 正确答案
  • B.模型对未观测样本的预测输出
  • C.回归方程的残差平方和
  • D.数据集中缺失值的填充结果

答案:A。潜在结果是同一接受与不接受处理时的平行世界结果 Y(1) 与 Y(0),是反事实推理的核心概念。B 是机器学习预测,C 是统计量,D 是缺失值插补,均与“同一体的反事实状态”无关。

Q3. 观测规则公式 Y = T·Y(1) + (1−T)·Y(0) 说明了什么?

单选题 · easy

  • A.每个个体只被观测到一个版本的潜在结果← 正确答案
  • B.每个个体的两个结果都可以同时被记录
  • C.处理效应与协变量完全独立
  • D.中介变量可以直接从回归中省略

答案:A。观测规则表明:实际观测结果只是根据 T 的取值,从两个潜在结果中“挑出”现实的那一个。正因为另一个版本永远观测不到,才需要反事实推理和识别假设,故 A 正确,B 与因果推断的根本难题相悖。

Q4. 自然直接效应 NDE 的定义要点是什么?

单选题 · mid

  • A.固定中介为 M(0) 后只改变处理状态← 正确答案
  • B.固定处理为 1 后只改变中介状态
  • C.同时变化处理与中介两条路径
  • D.不控制任何协变量的原始均值差

答案:A。NDE = E[Y(1,M(0)) − Y(0,M(0))],本质是把中介锁死在未处理水平,只变动 T,C 描述的不是 NDE,B 描述的其实是 NIE,D 只是普通的相关比较。

Q5. Baron-Kenny 回归框架中,间接效应 NIE 如何估计?

单选题 · mid

  • A.用 a₁ 乘以 b₁ 的乘积法← 正确答案
  • B.直接用总效应除以样本量
  • C.用 c′ 减去截距项 b₀
  • D.对残差平方和取平方根

答案:A。在线性无交互模型下,NIE = a₁ × b₁,即“促销→杯数”的系数乘以“杯数→金额”的系数,二者相乘量化了经由中介传导的间接效应。B、C、D 都不对应中介路径的乘积识别。

Q6. 下列哪些属于因果中介分析的识别假设?

多选题 · mid

  • A.顺序可忽略性假设← 正确答案
  • B.一致性假设← 正确答案
  • C.无未观测混杂条件← 正确答案
  • D.训练集与测试集独立同分布

答案:ABC。顺序可忽略性、一致性、无未观测混杂都是中介分析赖以识别因果的假设;D 是机器学习中数据集划分的经验假设,与因果识别无关。

Q7. 关于 NDE 与 NIE 的理解,下列说法正确的有哪些?

多选题 · mid

  • A.NDE 锁定中介于 M(0) 并变动处理← 正确答案
  • B.NIE 固定处理于 1 并拨动中介← 正确答案
  • C.无交互时 TE = NDE + NIE← 正确答案
  • D.有交互时 TE 依然严格等于 NDE + NIE

答案:ABC。A、B 是 NDE 与 NIE 的标准操作定义;C 是无交互线性模型的效应守恒;D 错误,因为存在交互时需要补充 INT 项,TE = NDE + NIE + INT。

Q8. 当模型中 T×M 交互项显著时,总效应应如何分解?

单选题 · hard

  • A.写成 TE = NDE + NIE + INT← 正确答案
  • B.直接舍弃中介分析改用普通回归
  • C.把交互项与截距项合并估计
  • D.将总效应全部归因于直接效应

答案:A。交互显著时,处理与中介互相放大,需要额外捕捉交互增益 INT,形成 TE = NDE + NIE + INT 的扩展守恒公式。B 丢弃了机制信息,C、D 在概念上都不成立。

Q9. uplift 建模与因果中介分析的关系,正确的说法有哪些?

多选题 · hard

  • A.uplift 估计 CATE,回答“给谁干预”← 正确答案
  • B.中介分析回答“机制为何有效”← 正确答案
  • C.二者可以组合用于策略优化← 正确答案
  • D.uplift 可以直接替代中介分解

答案:ABC。CATE 量化个体化处理效应,中介分析解析作用路径,二者互补并共同支撑干预策略优化。D 错误,uplift 关注“给谁”,不涉及“为什么”的机制分解,无法替代中介分析。

Q10. 已知 a₁=0.5、b₁=3.0、c′=2.0,且无交互,总效应 TE 是多少?

单选题 · extreme

  • A.TE = 2.0 + 0.5×3.0 = 3.5← 正确答案
  • B.TE = 0.5×2.0 + 3.0 = 4.0
  • C.TE = 0.5 + 3.0 + 2.0 = 5.5
  • D.TE = 2.0 + 3.0 ÷ 0.5 = 8.0

答案:A。线性无交互模型下 TE = c′ + a₁×b₁,直接效应 2.0 加上间接效应 0.5×3.0=1.5,得到 3.5。B 混淆了系数组合次序,C 把系数简单相加,D 颠倒了乘除关系。