想象你是街角咖啡店的老板老周。周末你推出了“买一送一”促销活动,月底一算账,营业额比平时涨了整整20%。这多出来的20%是怎么来的?你心里有两个猜测:一是顾客冲着赠品多买了好几杯,客单量上去了;二是促销氛围让原本只喝美式的顾客,顺手升级成了更贵的手冲单品,客单价上去了。这两个猜测,对应两条完全不同的“作用路线”——前者绕了个弯(通过购买数量),后者直来直去(不经过数量)。因果中介分析,就是给老周做“路径拆账”的财务师:它把总效应精确拆成“间接效应”(通过中介变量)和“直接效应”(不经过中介变量)。但拆账有个大难题:你永远看不见同一个顾客“既收到促销、又没收到促销”的样子。这时,反事实推理登场了——它假设存在一个平行世界里的“你”,没收到促销、也没多买那杯咖啡。我们把真实世界和这个假想世界对照,就能算出每个环节的功劳。本文会用“咖啡店账本”这个场景,带你走完从反事实框架到NDE/NIE分解的完整推理链,并给出可运行的Python代码和真实应用场景。
学完本节,你将掌握因果中介分析与NDE/NIE分解的完整方法论,并把它应用到营销归因、政策机制的量化拆解中——这是AI从业者从“预测相关”升级到“解释因果”的必修课。
可视化演示
展示系统处理流水线、实时性能指标曲线及多方案对比分析,包含数据流转、吞吐延迟监控与方案评估。
本节配有交互动效(进入视口后自动加载,约 3KB)。
系统可视化 处理流程:输入→处理→模型→输出 性能监控:实时指标 P=L×T
总效应分解
老周盯着账本上“多出来的20%”发呆。他首先确认一个事实:这20%是真实发生的总增量。无论背后是顾客多买了杯数,还是升级了单品,销售额的净增长摆在那里。在因果语言里,这个总增量就叫“总效应”(Total Effect,TE)。它是一笔总账,但还不能指导决策——老周必须知道钱从哪条路赚来的,才能决定下个月还卖不卖“买一送一”。这正是因果中介分析的起点:把总账分成两笔小账。
统计上,老周的促销就是处理变量 T(1=促销,0=不促销),顾客的购买杯数 M 是中介变量,营业额 Y 是结果变量。三者构成一张路径图:T 可以直接指向 Y(顾客看到促销氛围后单杯升级),也可以先指向 M、再指向 Y(促销让杯数变多,杯数拉高营业额)。前者叫直接路径,后者叫间接路径。中介变量就是夹在这条链路中间、承担“传导”作用的变量。
形式化地,总效应被定义为潜在结果之差在人群上的期望。这个公式把“促销组 vs 非促销组”的简单均值差,提升为“同一个体在两种状态下的反事实差”:
老周明白了:总账写的是“促销整体多赚了多少”,但只有拆成路径,才知道是“多买”的功劳还是“买贵”的功劳。账本先有总账,才谈得上拆账。
- 潜在结果记号$Y(1)$ 是同一顾客收到促销时的营业额,$Y(0)$ 是同一顾客没收到促销时的营业额,二者是一对“平行世界”中的值。
- 期望算符$\mathbb{E}[\cdot]$ 表示对所有顾客求平均,把个体差异压缩成一个总体数值。
- 相减含义两个潜在结果相减,得到促销在个体层面的因果效应;取期望后就是人群层面的平均因果效应。
反事实框架
老周发现一个麻烦:他可以记录真实世界里每个顾客的消费,却永远看不到“同一个人如果没收到促销会花多少钱”。这个看不见的数值,就是“反事实”。为了拆账,老周必须借助一个思想实验——假想每个顾客都有两个平行世界版本:一个版本收到了促销,另一个版本没有。因果推断研究的一切,都建立在这个“平行世界对照”的框架上。
在统计术语里,这两个版本对应潜在结果 Y(1) 和 Y(0)。个体层面的因果效应 δ = Y(1) − Y(0),就是同一人两个版本的营业额之差。但现实残酷:每个顾客只能被观测到其中一个版本。这就是因果推断的根本难题——你无法同时观测到同一个个体的两个潜在结果。研究者能做的,是用观测规则把“被看见的世界”和“反事实世界”连接起来:
对老周来说,反事实框架的意义是:虽然平行世界不可见,但我们可以用合理的假设和统计模型“补全”缺失的那一半账目。没有这个框架,后面所有拆账都无从谈起。
- 观测规则$T$ 是处理指示(1 为促销,0 为未促销),公式根据 T 的取值自动“选择”展示哪个潜在结果。
- 互补项$(1-T) \cdot Y(0)$ 在 T=0 时被激活,选出未促销者的潜在结果。
- 现实拼接两项相加,保证每个个体只露出一个“版本”,另一版本永远隐藏在反事实世界。
自然直接效应
老周想单独衡量“促销氛围让顾客升级饮品”这条路的贡献。他决定做一个思想实验:让促销照常发生,但把顾客的购买杯数死死锁定在“他没收到促销时本该买的杯数”。换句话说,M 保持在 M(0) 的水平,T 却从 0 拨到 1。此时营业额的变化,就不再可能由“多买”引起,而只能归因于促销本身对单价的推力。这就是自然直接效应(Natural Direct Effect,NDE)。
NDE 的定义是“中介固定于未处理水平时,改变处理状态所带来的结果差异”。它剔除了中介变量 M 的所有干扰,因此常被称为“纯净直接效应”。老周可以理解为:顾客还在按老习惯买两杯,但促销海报让他把其中一杯换成了手冲——这中间没有经过“杯数”这个中介,完全是直接路径上的功力:
老周记下这笔账:NDE 是“不换杯数、只换心情”带来的额外营业额。它衡量的是促销本身的说服力,不含数量变化的功劳。
- 双下标潜在结果$Y(t, m)$ 表示“处理取 t、中介取 m”时的潜在结果,是对世界的更精细刻画。
- 锁定中介$M(0)$ 是未促销时的购买杯数,把它固定住,就切断了“促销→杯数”这条间接路径。
- 差分$Y(1,M(0)) - Y(0,M(0))$ 只改变处理状态,中介不变,差值即为直接路径的贡献。
自然间接效应
反过来,老周还想知道“多买杯数”这条路贡献了多少。这次他做另一个思想实验:促销照常发生(T 固定为 1),但把顾客的杯数从“未促销时会买的 M(0)”慢慢拨到“促销时会买的 M(1)”。其他条件都不变,营业额的增量就只能来自“M 的传导”——促销先改变了杯数,杯数再改变了总金额。这就是自然间接效应(Natural Indirect Effect,NIE)。
NIE 的定义是“处理固定在接受水平时,中介从 M(0) 变到 M(1) 所带来的结果变化”。它衡量的是通过中介链路传导的那部分效应。老周可以想象:同一批促销观众,有人本来只买 1 杯,促销后买了 3 杯,多出来的 2 杯再按每杯均价折算成营业额——这就是“暗度陈仓”的杯数路线:
老周的账本上,NIE 就是“多买”这条路。NIE 与 NDE 相加正好等于总效应 TE,这就是因果中介分析最优雅的“效应守恒定律”。
- 固定处理两个潜在结果都把 T 固定为 1,保证我们在“促销已发生”的同一前提下比较。
- 拨动中介$M(1)$ 是促销时的杯数,$M(0)$ 是未促销时的杯数,二者之差代表促销对中介的推动。
- 结果差分两个潜在结果相减,量化“中介变化→结果变化”的完整传导链。
识别假设
拆账公式看着漂亮,但老周知道:现实数据里他只能看到每个顾客的一个版本。凭什么相信公式算出的 NDE、NIE 不是幻觉?答案藏在“识别假设”里。这些假设相当于“平行世界能放心脑补”的前提条件——只有它们成立,反事实缺失值才能被可信地补全,拆出的账才不是假账。
其中最核心的是顺序可忽略性假设:在给定协变量 X(顾客年龄、常喝品类、天气等)后,处理 T 的分配就像“随机掷硬币”一样与潜在结果独立。第二条是“给定 T 和 X 后,中介 M 的取值也近似随机”。第一条保证直接路径不被混淆,第二条保证中介路径不被混淆。用数学语言表达第一层核心假设:
除了顺序可忽略性,还有一致性假设(观测到的结果就是潜在结果在现实中的体现)、无未观测混杂条件(不能有第三个幽灵变量同时影响 T、M、Y)、正性条件(每个子群体都有机会进入处理组)。这些假设共同构成“拆账可信”的基石。老周明白:账本要配平,前提是平行世界够公平。
- 双下标潜在结果$Y(t,m)$ 是任意处理与中介组合下的潜在结果,它必须先被明确定义。
- 条件独立符号$\perp$ 表示两边相互独立,即在统计意义上互不提供预测信息。
- 给定协变量$X$ 是所有可观测的顾客特征;“| X“表示我们把这些人特征先”控制住”再谈独立性。
分解计算
假设齐备之后,老周真正上手算账。他拿起收银台的记录:每个顾客的促销状态、购买杯数、营业额。经典做法来自 Baron 和 Kenny 的回归框架——连跑两个回归方程,就能把 NDE 和 NIE 从数据里“榨”出来。第一个方程估计促销对杯数的推力(系数 a₁);第二个方程同时放入促销和杯数,分别得到直接效应 c′ 和杯数对金额的推力(系数 b₁)。
这套方法的精髓是“乘积法”:间接效应 NIE 等于“促销→杯数”的强度乘以“杯数→金额”的强度。老周可以把 a₁ 想成“促销让人多买几杯”,b₁ 想成“每多一杯能多卖多少钱”,两者相乘就是“多买”这条路的总贡献。回归方程组如下:
老周按这个方法把收银数据跑了一遍,两笔账清清楚楚。差值法(用总效应减去直接效应)可作为交叉验证:两种算法得到一致的 NIE,账本才算真正配平。
- 方程一结构$M = a_0 + a_1 T + \varepsilon_1$ 用促销状态解释杯数,$a_1$ 是促销对杯数的平均因果效应。
- 方程二结构$Y = b_0 + c' T + b_1 M + \varepsilon_2$ 同时控制促销与杯数,$c'$ 是控制中介后的直接效应。
- 乘积法配平$a_1 \times b_1$ 是“经杯数传导”的间接效应,线上性模型中它与 c′ 相加恰为总效应。
应用场景
账拆明白后,老周不再满足于“复盘”,他想做“预测”:如果只给老顾客发促销券,营业额的增量会是多少?这就进入 uplift 建模的领域。uplift 建模的目标是估计条件平均处理效应(CATE)——针对每个顾客的特征,算出促销给他的个体化增量。它回答的是“给谁发券”的问题,而中介分析回答的是“为什么有效”的问题,两者恰好互补:uplift 圈定人,中介分析指导策略,最终实现干预策略优化。
在实际工作中,电商平台的补贴策略、保险公司的交叉销售、政策制定者的福利发放,都在用这套组合拳。政策评估中,政府想知道“发放消费券”对消费总额的拉动,究竟是直接刺激居民消费意愿,还是通过“商家参与数量增多→供给更丰富”这条间接路径实现的。这时 CATE 公式是决策的核心:
老周终于把账本用活了:从“月底才知道多赚了 20%”,变成“月初就知道该给谁发券、发券能赚多少”。因果中介分析帮他把黑箱拆成透明管道,而 uplift 建模让拆出来的机制直指导航。
- 个体特征向量$\mathbf{x}$ 是顾客的全套特征(到店时间、偏好品类、历史消费等),它决定这个人属于哪个细分群体。
- 条件期望$\mathbb{E}[\cdot \mid X=\mathbf{x}]$ 表示只在特征恰好等于 x 的人群里求平均。
- 个体化增量$\tau(\mathbf{x})$ 就是这个“人群 x”的个体化处理效应,用来决定该不该给他发券。
实操工具
老周把账算完,会计小王却提出一个疑问:“如果促销和杯数之间存在交互作用呢?比如促销时的赠品杯数'格外有杀伤力'——同样的杯数增幅,在促销氛围下带来的金额增量更大。这时候 TE = NDE + NIE 还成立吗?”答案是:不成立。当 T 与 M 存在交互时,总效应会多出一块“交互增益”(INT),必须补上才能配平。这就是交互扩展分解:
实操层面,R 的 mediation 包提供完整的 NDE/NIE 估计与 Bootstrap 置信区间;Python 里可以用 statsmodels 手动回归,或借助 DoWhy 这类因果推断库。老周最后给小王立了条规矩:每次拆账,必须报告效应守恒检验和置信区间——账不仅要算,还要证明算得稳。
- 交互来源模型中加入 $T \times M$ 交互项后,促销对金额的边际影响力会随杯数变化。
- 增益块$\mathrm{INT}$ 捕捉“处理与中介相互放大”带来的额外效应,是守恒公式的修正项。
- 守恒检验把 NDE、NIE、INT 三块相加,重新配平总效应——这是每个中介分析报告都该做的“验账”步骤。
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 演示
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)")
t = rng.binomial(1, 0.5, n)用随机数模拟“一半顾客收到促销”,构建随机对照实验的底层数据。m = 2.0 + 0.8 * t + rng.normal(0, 0.7, n)这条是方程一的“真实生成器”:促销让杯数平均多 0.8 杯,产生间接路径。y = 15.0 + 5.0 * t + 9.0 * m + rng.normal(0, 2.0, n)消费金额由促销直接效应 5 元和杯数效应 9 元/杯共同决定。fit_m = sm.OLS(m, X1).fit()用最小二乘拟合“促销→杯数”,得到系数 a₁。X2 = sm.add_constant(np.column_stack([t, m]))把促销和杯数拼成设计矩阵,并添加截距列,准备同时回归。fit_y = sm.OLS(y, X2).fit()同时控制促销和杯数,分离出直接效应 c′ 与杯数效应 b₁。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. 因果中介分析最核心的分解目标是什么?
- A.把总效应拆成直接效应与间接效应← 正确答案
- B.把相关关系转换为回归系数
- C.把观测数据分为训练与测试集
- D.把混淆变量压缩成一个代理指标
答案:A。因果中介分析的核心是把总效应 TE 分解为自然直接效应 NDE 与自然间接效应 NIE,回答“经中介路径”与“不经过中介路径”各贡献多少。B、C、D 分别是回归、机器学习流程和降维思路,都不属于中介分解。
Q2. 反事实框架中的“潜在结果”指的是什么?
- A.同一体在不同处理状态下的假设结果← 正确答案
- B.模型对未观测样本的预测输出
- C.回归方程的残差平方和
- D.数据集中缺失值的填充结果
答案:A。潜在结果是同一接受与不接受处理时的平行世界结果 Y(1) 与 Y(0),是反事实推理的核心概念。B 是机器学习预测,C 是统计量,D 是缺失值插补,均与“同一体的反事实状态”无关。
Q3. 观测规则公式 Y = T·Y(1) + (1−T)·Y(0) 说明了什么?
- A.每个个体只被观测到一个版本的潜在结果← 正确答案
- B.每个个体的两个结果都可以同时被记录
- C.处理效应与协变量完全独立
- D.中介变量可以直接从回归中省略
答案:A。观测规则表明:实际观测结果只是根据 T 的取值,从两个潜在结果中“挑出”现实的那一个。正因为另一个版本永远观测不到,才需要反事实推理和识别假设,故 A 正确,B 与因果推断的根本难题相悖。
Q4. 自然直接效应 NDE 的定义要点是什么?
- 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 如何估计?
- A.用 a₁ 乘以 b₁ 的乘积法← 正确答案
- B.直接用总效应除以样本量
- C.用 c′ 减去截距项 b₀
- D.对残差平方和取平方根
答案:A。在线性无交互模型下,NIE = a₁ × b₁,即“促销→杯数”的系数乘以“杯数→金额”的系数,二者相乘量化了经由中介传导的间接效应。B、C、D 都不对应中介路径的乘积识别。
Q6. 下列哪些属于因果中介分析的识别假设?
- A.顺序可忽略性假设← 正确答案
- B.一致性假设← 正确答案
- C.无未观测混杂条件← 正确答案
- D.训练集与测试集独立同分布
答案:ABC。顺序可忽略性、一致性、无未观测混杂都是中介分析赖以识别因果的假设;D 是机器学习中数据集划分的经验假设,与因果识别无关。
Q7. 关于 NDE 与 NIE 的理解,下列说法正确的有哪些?
- 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 交互项显著时,总效应应如何分解?
- A.写成 TE = NDE + NIE + INT← 正确答案
- B.直接舍弃中介分析改用普通回归
- C.把交互项与截距项合并估计
- D.将总效应全部归因于直接效应
答案:A。交互显著时,处理与中介互相放大,需要额外捕捉交互增益 INT,形成 TE = NDE + NIE + INT 的扩展守恒公式。B 丢弃了机制信息,C、D 在概念上都不成立。
Q9. uplift 建模与因果中介分析的关系,正确的说法有哪些?
- A.uplift 估计 CATE,回答“给谁干预”← 正确答案
- B.中介分析回答“机制为何有效”← 正确答案
- C.二者可以组合用于策略优化← 正确答案
- D.uplift 可以直接替代中介分解
答案:ABC。CATE 量化个体化处理效应,中介分析解析作用路径,二者互补并共同支撑干预策略优化。D 错误,uplift 关注“给谁”,不涉及“为什么”的机制分解,无法替代中介分析。
Q10. 已知 a₁=0.5、b₁=3.0、c′=2.0,且无交互,总效应 TE 是多少?
- 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 颠倒了乘除关系。