你有没有做过这样的假设——“如果我当时选了另一份工作,现在会不会更快乐?”或者“如果那天没下雨,比赛结果会不会不同?”这种对过去进行修改、然后推演结果的思考,就是反事实推理。它像一个“思维的模拟器”,让我们在脑海中把历史的某个螺丝拧动一下,然后观察整个系统的连锁反应。 在人工智能领域,结构因果模型给这种“如果当初”的想象装上了数学引擎。它不再让我们停留在懊悔或幻想,而是把“假如”变成一串可以计算的操作:先从已知结果倒推隐藏缘由,再动手改写世界运行的规则,最后在新世界里重新预测未来。这个过程就像一台时间机器加平行宇宙模拟器——你无法真的回到过去,却能计算出一个“平行世界”里会发生什么。本文就用“平行宇宙模拟器”这个比喻,带你完整走一遍 SCM 反事实推理的奇妙旅程。
学习价值:反事实推理是因果推断的王牌技能。掌握它,你就能在政策评估、医学疗效分析、商业决策中回答“如果做了另一选择会怎样”,成为真正的因果科学家,而不仅仅是预测机器。
可视化演示
展示结构因果模型反事实推理的溯因干预预测三阶段串行管道、Pearl因果阶梯从观测关联到干预推断到反事实推理的三层层级区分、以及Action阶段结构方程从X等于f(pa,U)替换为X等于x星的干预修改操作。
本节配有交互动效(进入视口后自动加载,约 3KB)。
反事实推理三阶段管道 Abduction溯因根据观测更新外生变量后验 Action干预修改结构方程模拟假设干预 U|E 溯因-干预-预测三步反事实推理
反事实的定义
想象你是一个平行宇宙观测站的站长。你面前有一台仪器,能记录每个宇宙里发生的事。在宇宙 A 里,你看到小明因为下雨取消了野餐,整个下午都在家看电影。这时你按下仪器上的一个红色按钮,屏幕上弹出一行字:“如果那天没下雨,小明会做什么?”——注意,这个问题指向的不是宇宙 A,而是一个从未真实存在过的宇宙 B。在这个宇宙 B 里,雨停了,小明背着背包出了门。反事实推理,就是科学地构造这个平行宇宙 B,并回答里面的问题。
从技术角度说,反事实条件句的标准形式是:“如果干预 \(do(X=x)\) 已经发生,且其他条件与事实相同,那么 \(Y\) 会取值多少?”它与普通的条件预测 \(P(Y|X=x)\) 有本质区别。条件预测只是“看到” \(X=x\) 时 \(Y\) 的统计规律,而反事实是在保持个体全部背景信息不变的前提下,只改变一个干预动作,观察结果。这个区别好比:前者是“下雨天,小明大概率在室内”(统计规律),后者是“这一次,就是小明这个具体的人,没下雨他到底干什么”(个体化反事实)。
所以,反事实的定义可以浓缩成一句话:在保存个体所有隐藏特质的前提下,强行改写一个条件,预测新的结果。这就是平行宇宙模拟器的基本工作原理。
- \(Y_{X=x}(u)\)这是反事实的数学记号。下标 \(X=x\) 表示“我们干预了变量 \(X\),把它强制设为 \(x\)”;括号里的 \(u\) 表示我们关注的是某个特定的个体(外生变量取特定值)。
- 干预 \(do(X=x)\)"do" 操作是因果推断的灵魂,它表示外部力量强行使 \(X\) 等于 \(x\),切断了所有指向 \(X\) 的因果箭头,就像平行宇宙观测站强行改写历史事件。
- 个体 \(u\)\(u\) 代表外生变量的一个具体取值组合,它编码了这个个体所有的“隐藏个性”——基因、偏好、环境背景等。正是 \(u\) 的固定,让反事实区别于统计平均。
结构因果模型
要让平行宇宙模拟器运行,不能只靠空想,它需要一张精确的“世界设计图”。这张设计图就是结构因果模型。它由三个零件组成:变量(世界的可观测属性)、结构方程(变量之间的因果机制)、有向无环图(因果关系的可视化骨架)。这三样东西合在一起,就像乐高积木的说明书加零件包,搭出整个世界运行的规则。
正式说来,SCM 是一个三元组:\((U, V, F)\)。其中 \(U\) 是外生变量集合(世界的“隐藏按钮”),\(V\) 是内生变量集合(我们关心的可观测变量),\(F\) 是结构方程集合。每个结构方程 \(f_i\) 精确描述了一个内生变量如何由它的直接原因(父节点)和外生变量决定。图中的箭头 \(X \to Y\) 表示“\(X\) 是 \(Y\) 的直接原因”,箭头方向就是因果方向,绝不可随意反转——这就像真实世界里,是雨滴从云层落向地面,而不是地面升起雨滴到云层。
结构因果模型就像平行宇宙模拟器里的“物理引擎”。它既告诉我们世界当前的状态,也规定了当我们改动一个变量时,其他变量将如何连锁反应。有了它,反事实推理就不再是天马行空,而是按物理规律推演。
- \(f_Y\)这是变量 \(Y\) 的结构方程,它描述的是“\(Y\) 是怎么被生成出来的机制”,而不是“\(Y\) 和相关变量的数学关系”。它与回归方程最大的不同在于:方程右边是 \(Y\) 的原因,而不是它的相关项。
- \(Y = f_Y(X, U_Y)\)读作“\(Y\) 是由 \(X\) 和 \(U_Y\) 共同决定的”。这里 \(X\) 是 \(Y\) 的直接原因,\(U_Y\) 是影响 \(Y\) 的隐藏因素。这个形式告诉我们:只要知道了 \(X\) 和 \(U_Y\) 的值,\(Y\) 的值就被完全确定了,没有任何随机性。
- \(3X\)系数 3 表示 \(X\) 对 \(Y\) 的因果效应强度。\(X\) 每增加一个单位,\(Y\) 就增加 3 个单位。这个系数在干预前后保持不变——这正是因果机制“稳定”的体现。
外部变量
每个平行宇宙观测站都有一个“噪音过滤器”。当你观察世界的时候,总会漏掉一些信息——比如一个人藏在心里的偏好、一场病背后的基因、一家公司没写进报表的潜规则。这些漏掉的信息就是外部变量(外生变量)。它们像暗物质一样不可见,却实实在在地影响着世界的走向。
在 SCM 中,外生变量 \(U\) 代表所有不可观测的“背景因素”。我们的三步骤推理中,第一步“倒推”的核心任务就是:根据已经观测到的结果,反推出这些 \(U\) 的后验分布。这个过程叫 abduction,它的数学本质是贝叶斯更新。我们可以把它想象成一个侦探破案:你看到房间里有一杯打翻的咖啡(观测 \(Y\)),根据对这个世界运转规律的理解(结构方程),你可以反推出犯人可能的脚印大小(\(U\) 的后验)。
外部变量的后验是整个反事实推理的“个人档案”。它记录了每个个体区别于他人的隐藏特质。有了它,反事实就不再是关于“所有人”的平均陈述,而是关于“这个具体的人”的精确预言。
- \(P(U)\)这是外生变量的先验分布,表示在我们看到任何观测数据之前,对隐藏背景因素的概率认知。比如,我们知道某病的基因突变在人群中的概率是 1%。
- \(P(Y=y | U)\)这是似然函数,表示如果隐藏因素取值 \(U\),那么观测到结果 \(Y=y\) 的可能性有多大。它由结构方程直接给出。
- \(P(U | Y=y)\)这是后验分布,是我们在看到 \(Y=y\) 这个事实之后,对 \(U\) 的修正认知。它凝聚了“这个具体的人,他的隐藏特质到底是什么”的信息——这是反事实推理之所以能“个体化”的关键。
三步推理流程
现在,平行宇宙观测站的引擎已经预热完毕。我们要执行一次完整的反事实推理任务。任务描述:小明感冒了,他吃了药(\(X=1\)),结果康复了(\(Y=1\))。我们想知道:如果小明当时没吃药,他会康复吗? 这三次按钮操作就是 SCM 反事实推理的标准三步。
第一步:倒推(Abduction)。我们根据观测到的“小明吃药且康复了”这一事实,用贝叶斯公式反推小明的隐藏因素 \(U\) 的后验分布。这好比在平行宇宙操作台上,我们先锁定“这就是小明,带着他独特体质的那个人”。
第二步:改写(Action)。对模型执行 \(do(X=0)\) 操作,把结构方程中决定 \(X\) 的那个方程整个拆掉,强制 \(X\) 等于“没吃药”。就像操作台上的“历史改写杆”:把小明吃药这个事件从历史中抹去,强行插入“没吃药”的新设定。
第三步:预测(Prediction)。把第一步得到的 \(U\) 后验和第二步修改后的模型结合起来,推算 \(Y\) 在新世界里的取值分布。这一步用的是修改后的结构方程,\(X\) 的父节点已经无法再影响 \(X\)。
这套三步流程完美对应了平行宇宙模拟器的三个操作:锁定个体 → 改写历史 → 推演未来。它让“如果当初”从哲学思辨变成了可编程的三步算法。任何反事实问题——无论是政策评估、医疗决策还是商业复盘——都可以安装在这个流程上运行。
- *Abduction 倒推 \(P(U | X=1, Y=1)\)* 这是第一步。我们看到的事实是“吃药且康复”,用贝叶斯公式反推这个人的隐藏特质 \(U\) 是什么样。这一步计算出了“小明的个人档案”。
- *Action 改写 \(do(X=0)\)* 这是第二步。我们把 \(X\) 的结构方程整个删除,强制 \(X=0\)。这个操作模拟了“如果历史被改变”,它切断了所有指向 \(X\) 的因果箭头——因为在新世界里,吃药这个事不再是别的原因造成的,而是外部力量直接设定的。
- *Prediction 预测 \(P(Y_{X=0} | X=1, Y=1)\)* 这是第三步,也是画龙点睛之笔。它的含义是:“在保持小明个人特质(后验 \(U\))不变、把吃药改成没吃药的前提下,预测他康复的概率。”这个量才是反事实问题的最终答案。
应用场景
平行宇宙模拟器造出来后,谁最爱用它?答案是:所有需要回答“如果当初做了不同选择会怎样”的人。让我们看看三个最典型的场景。
政策评估。假设政府想评估“最低工资上调 10%”对就业的影响。我们无法让同一个国家既上调又不调,但我们可以用反事实推理:先构建经济系统的 SCM,然后对“是否上调”执行 do 操作,分别推演两个平行世界里的就业率。传统方法只会对比上调前后,而反事实方法能精确回答“如果没上调,同一时期就业率是多少”。
医学研究。判断一种新药对病人是否有效,最理想的情况是让每个病人同时经历“吃药”和“不吃药”。反事实推理让这个不可能变成可能:根据病人的观测数据反推其个体特质,然后模拟两个平行世界——一个吃药,一个吃安慰剂,对比结果。这种方法对个性化医疗尤其有价值,因为它回答的是“这个病人”而非“平均病人”的效果。
商业决策。电商平台想知道“如果给所有老用户发 8 折优惠券,复购率会提升多少”。同样的逻辑:构建用户购买行为的 SCM,用反事实推理推演出“发了券”和“没发券”两个平行世界里的复购率差值。这种计算比传统的 A/B 测试更快、更精细,因为它能对每个用户给出个性化的反事实预估。
这三个场景的共性是:它们都在回答“反事实问题”——一个无法通过直接观测回答的问题。平行宇宙模拟器让这些问题从“不可知”变成了“可计算”。
- \(Y_{X=1}\)干预世界的结果,即同一个体在吃药情况下的健康状况。这是平行宇宙 A。
- \(Y_{X=0}\)对照世界的结果,即同一个体在不吃药情况下的健康状况。这是平行宇宙 B。
- \(E[\cdot]\)期望运算,把每个个体的两个平行世界结果之差做平均,得到总体平均处理效应。
工具与局限
平行宇宙模拟器听起来很酷,但实际操作中也有它的“驾驶守则”。幸运的是,现在有成熟的软件工具让我们不必从零造轮子。
主流工具包括 Python 的 DoWhy、EconML、CausalNex 等库。DoWhy 提供端到端的因果推断流程,支持建模、识别、估计和反驳验证;EconML 专注于异质性处理效应估计,由微软开源;CausalNex 用图模型做因果发现。但需要注意:这些工具是引擎,不是自动驾驶——你必须自己提供正确的因果图。
使用反事实推理必须满足三大约束:第一,正确的因果图——图错了,一切皆错,好比模拟器里的物理引擎参数写错,推演出的平行宇宙必然失真;第二,正确的结构方程形式——函数形式假设错误会导致预测偏差;第三,外生变量的分布假设——我们通常假设 \(U\) 服从某种参数分布,如果真实分布差异大,后验更新就会失真。
常见陷阱包括:混淆“相关性”与“因果性”,将观测到的 \(P(Y|X)\) 直接当作反事实 \(P(Y_X)\);忽略隐藏混淆因素——如果图中遗漏了同时影响 \(X\) 和 \(Y\) 的变量,后验更新就会系统性偏差;以及过度自信——模型错误时,模拟器的输出再精确也只是精确的谬误。记住:平行宇宙模拟器的输出质量,永远受限于你输入的世界设计图质量。
- SCM 正确因果图必须真实反映变量间的因果关系,否则就像地图画错方向,走得越快错得越远。
- 干预可施加\(do\) 操作必须在现实中具有可解释性。比如“强制所有人吸烟”在伦理上不可行,那么相关的反事实问题就没有实际意义。
- 外生变量可识别必须有足够的观测数据来锁定 \(U\) 的后验分布。数据太少,后验更新就会像凭一张模糊照片画通缉令,误差巨大。
前沿展望
平行宇宙模拟器正在快速进化。如果说经典的 SCM 是手摇式计算器,那么新一代的因果 AI 正在把它变成量子计算机。
深度因果模型将深度学习的表征能力与 SCM 的结构化因果知识结合。深度学习负责从高维数据(图像、文本)中提取变量和表征,SCM 负责在这些表征之上进行因果推理。这好比给模拟器装上了高精度传感器,让它能处理图像、语音这些“模糊的现实”。
反事实生成是另一个激动人心的方向。GAN 和扩散模型已经能生成逼真的图像,而反事实生成模型能生成“如果做了不同选择”的完整世界画面。比如,给 AI 一张“病人肺部 CT 影像”,它能生成“如果他戒烟 10 年后的影像”。这在医学教育、政策沟通中都有巨大价值。
因果强化学习则将反事实推理嵌入智能体的决策循环:智能体不仅能从真实经验中学习,还能通过反事实“想象”未经历过的状态-动作对的结果,从而大幅提升样本效率。这就像让 AlphaGo 不仅从实战棋谱学习,还能在想象中推演“如果当年那步棋走了另一个位置会怎样”。反事实推理正在从一个理论工具,变成 AI 系统的核心驱动力。
- \(g_{\theta}\)一个参数为 \(\theta\) 的深度生成模型,它的任务是“渲染”出反事实世界的样本,类似于模拟器里的渲染引擎。
- \(\hat{U}\)从后验分布中采样得到的隐藏特质估计值。它让生成器知道“这是哪个具体的人”,从而生成个性化的反事实样本。
- \(\hat{Y}_{X=x}\)最终生成的反事实结果——在干预 \(X=x\) 下,这个人的结果变量 \(Y\) 会是什么样。
AI 应用场景
政策评估中的“平行政府”
阶段:因果推断与决策支持
解决的问题:政府无法同时实施和不实施一项政策。传统评估只能对比“政策前后”的时间序列,混杂着经济周期、舆论变化等干扰因素,难以干净地分离出政策本身的因果效应。反事实推理通过构建政策-经济系统的 SCM,推演出“如果没实施该政策”的平行世界,从而干净地计算政策净效应。
具体案例:某城市推出“限购令”调控房价。政策制定者用 DoWhy 构建包含房价、人口流动、土地供给等因素的 SCM,执行反事实三步:先根据观测数据反推外生变量后验(锁定这座城市的“独特基因”),再 \(do(\text{限购}=1)\) 改写模型,最后预测限购与不限购两种平行世界下的一年期房价中位数,差值即为政策效果。
个性化医疗的“数字孪生”
阶段:医学决策与疗效预测
解决的问题:医生面对一个具体病人时,想知道“用 A 药 vs B 药,这个病人 5 年生存率分别多少”?临床试验只给了群体平均效果,无法回答个体问题。反事实推理利用病人的电子病历数据(症状、基因、生活方式)反推其隐藏特质,然后在模型层面分别施加两种药物干预,预测两个平行世界中的健康结局,真正实现“千人千药”。
具体案例:一个肿瘤科团队为 300 名肺癌患者构建了总生存期 SCM,输入患者的基因突变位点和病程特征,通过反事实推理为每位患者计算“化疗 vs 靶向治疗”的预期生存差异,最终改变了 40% 患者的治疗方案选择。
商业决策中的“反事实复盘”
阶段:用户增长与营销优化
解决的问题:营销团队想知道“上个月给老用户发的满减券,到底带来了多少增量复购”?直接对比发券用户和未发券用户有自选择偏差。反事实推理构建用户购买行为 SCM,对每个用户同时模拟“发券”和“不发券”两个世界,两者之差就是券的因果增量价值。
具体案例:某电商平台用 EconML 对 10 万活跃用户执行反事实推断,发现整体 ROI 为正,但细分后发现“高价值用户”即使不发券也会复购(增量≈0),而“中等价值用户”的发券增量显著,于是优化了券的投放人群策略,节省了 32% 营销预算。
Python 演示
import numpy as np class CounterfactualModel: """一个极简的结构因果模型,用于演示反事实推理三步流程""" def __init__(self, beta=3.0, gamma=0.5, noise_scale=1.0): # 结构方程系数 self.beta = beta # X -> Y 的因果效应强度 self.gamma = gamma # U 对 X 的影响强度 self.noise_scale = noise_scale # 存储观测数据 self.X_obs = None self.Y_obs = None # 存储后验样本 self.U_posterior = None def sample_uv(self, n): """生成外生变量 U 和噪声 W 的样本""" U = np.random.normal(0, 1, n) # 隐藏特质 return U def forward(self, U, X): """结构方程 f_Y: Y = beta * X + U""" return self.beta * X + U def abduction(self, X_obs, Y_obs, n_samples=2000): """第一步:根据观测反推 U 的后验分布""" # 根据结构方程反解: Y = beta*X + U => U = Y - beta*X # 由于没有其他噪声,U 被精确锁定 U_post = Y_obs - self.beta * X_obs U_post = np.full(n_samples, U_post) self.X_obs, self.Y_obs = X_obs, Y_obs self.U_posterior = U_post return U_post def action(self, X_new): """第二步:do(X = X_new),改写结构方程""" # 删除 f_X,强制 X = X_new # 在预测阶段,X 不再由 U 决定 self.do_value = X_new return self.do_value def prediction(self): """第三步:在新的世界中预测 Y""" if self.U_posterior is None or self.do_value is None: raise ValueError("请先执行 abduction 和 action") Y_pred = self.beta * self.do_value + self.U_posterior return Y_pred def counterfactual(self, X_obs, Y_obs, X_new): """完整的三步反事实推理流程""" self.abduction(X_obs, Y_obs) self.action(X_new) return np.mean(self.prediction()) def main(): # 讲故事:小明吃了药(X=1),康复了(Y=4) # 问题:如果没吃药(X=0),他会怎样? model = CounterfactualModel(beta=3.0) X_obs, Y_obs = 1.0, 4.0 result = model.counterfactual(X_obs, Y_obs, X_new=0.0) print(f"观测: 吃药(X={X_obs}) -> 康复(Y={Y_obs})") print(f"反事实: 如果没吃药(X=0),预测康复分数 Y = {result:.2f}") # 解释结果: U = 4 - 3*1 = 1 # 反事实: Y = 3*0 + 1 = 1 print(f"解释: 隐藏特质U={Y_obs - model.beta * X_obs:.2f}, " f"反事实Y = {model.beta * 0 + (Y_obs - model.beta * X_obs):.2f}") if __name__ == "__main__": main()
class CounterfactualModel:定义一个极简结构因果模型类,封装三个步骤为一个整体流程U_post = Y_obs - self.beta * X_obs第一步 abduction:从结构方程 \(Y = \beta X + U\) 中反解出隐藏特质 \(U\)self.action = X_new第二步 action:强制干预变量,切断原有的因果流入,相当于 \(do(X)\) 操作Y_pred = self.beta * self.do_value + self.U_posterior第三步 prediction:用相同的结构方程和已定位的 \(U\) 预测新世界结果np.mean(self.prediction())对后验样本取平均,得到反事实效应的期望估计if __name__ == "__main__":程序入口,演示“小明吃药康复”的反事实推演
常见误区
误区我觉得反事实推理很简单,不就是看“吃药的人康复的概率” 和 “没吃药的人康复的概率” 有什么区别吗?用 \(P(Y|X=1)\) 和 \(P(Y|X=0)\) 一减不就完事了?
正解这忽略了混杂偏差。吃药的人和没吃药的人,他们的隐藏特质本来就不同(比如病情轻重)。用平行宇宙模拟器来类比:条件概率是“直接观察两个不同人群”,而反事实是“让同一个人走两条世界线”。SCM 的三步流程之所以要先做 abduction 锁定 \(U\),就是为了确保对比的是同一个人,而不是两个不同的群体。
为何常见:我们习惯了用统计数据做决策,天然觉得“分组对比”就是因果。加上很多教材在引入因果关系时先用相关性做铺垫,容易留下“相关≈因果”的错误直觉。
误区\(do(X=1)\) 从直觉上不就等于看 \(X=1\) 的那些人嘛?反正结果都是把 \(X\) 设为 1,有什么区别?
正解\(do(X=1)\) 是外部干预,它切断了所有指向 \(X\) 的因果箭头(删除 \(f_X\) 方程);而“观测到 \(X=1\)”只是被动地看到,\(X\) 仍然受它的原因影响。用平行宇宙模拟器来类比:\(do\) 操作是站长亲手按下“历史改写杆”;而条件观测只是观测站记录到“历史上确实下雨了”。两者对系统的影响完全不同,所以 \(P(Y|do(X=1))\) 一般不等于 \(P(Y|X=1)\)。
为何常见:\(do\) 操作的数学形式与条件分布很像,初学者很容易从符号上混淆;再加上“查看 \(X=1\) 的样本”这种操作看起来和“把 \(X\) 设为 1”非常接近。
误区我觉得反事实推理就是把 \(X\) 改成别的值,然后用原来的模型重新算一遍 \(Y\) 就行了吧?为什么要先费劲去搞什么 abduction?
正解如果不做 abduction,你用的是人群平均的 \(U\) 分布,算出来的结果是“平均人的反事实”,而不是“这个人的反事实”。打个比方:你想知道“如果小明没吃药会怎样”,但如果你用的是全人群的平均体质,那答案就是“平均人会怎样”,而不是小明的答案。只有通过 abduction 根据小明确实康复了的事实反推他的体质,才能真正回答关于他的问题。
为何常见:很多因果推断教程先从总体层面的 \(do\)-演算讲起,让人误以为因果推断只关注总体效应。反事实的“个体化”特性需要从概率图模型的机制去理解,这比单纯的统计操作更难直观把握。
误区因果图不就是画个箭头吗?我想怎么画就怎么画吧,反正 AI 能自己学到结构。
正解因果图是反事实推理的“物理定律”,它必须基于真实世界机制的正确理解。画错一条箭头,整个反事实结果就会系统性偏差——好比模拟器里把万有引力写成“上抛物体自然悬浮”,后面推演的一切就全错了。从数据中自动学因果图(因果发现)是开放难题,需要非常强的假设。在实践中,正确的做法是结合专家知识和数据检验共同确定图结构。
为何常见:深度学习时代让大家习惯了“数据自动提取特征”,误以为因果结构也能纯粹从数据中无中生有。但因果结构本质上是世界的运行规律,仅靠相关性数据往往无法区分“\(X\) 导致 \(Y\)”和“\(Y\) 导致 \(X\)”。
面试题
Q1. 反事实推理的核心问题是什么?
- A.预测未来发生的事情
- B.描述过去发生的现象
- C.假设过去不同选择的结果← 正确答案
- D.计算数据的相关关系
答案:C。反事实回答的是“如果当时做了不同选择会怎样”——这正是平行宇宙模拟器的核心功能。A 是预测问题,B 是描述问题,D 是相关性分析,它们都不涉及“改写历史再推演”。
Q2. SCM 的三个组成部分是什么?
- A.数据、模型、损失函数
- B.外生变量、内生变量、结构方程← 正确答案
- C.输入、隐藏层、输出
- D.均值、方差、协方差
答案:B。SCM 由 \((U, V, F)\) 组成,即外生变量集合、内生变量集合、结构方程集合。这就像平行宇宙模拟器的三个零件:隐藏按钮、可观测屏幕、运行规则。B 正好完整对应这三个部分。
Q3. "do(X=x)" 操作的含义是什么?
- A.观测到 X 等于 x
- B.强制干预使 X 等于 x← 正确答案
- C.预测 X 等于 x 的概率
- D.计算 X 和 Y 的相关系数
答案:B。\(do(X=x)\) 是外部力量强行使 \(X=x\),同时切断所有指向 \(X\) 的因果箭头。类比平行宇宙模拟器的“历史改写杆”:不是观测到“历史上下了雨”,而是强行改写天气。A 是被动观测,C 是概率推理,D 是相关性分析。
Q4. 反事实推理三步流程的正确顺序是?
- A.Action → Abduction → Prediction
- B.Prediction → Action → Abduction
- C.Abduction → Action → Prediction← 正确答案
- D.Action → Prediction → Abduction
答案:C。必须先根据观测反推隐藏特质(Abduction),锁定“这个具体的人”;然后改写历史(Action);最后在新世界里推演结果(Prediction)。好比模拟器操作:先锁定个体档案,再按改写杆,最后读结果屏。
Q5. 反事实 \(Y_{X=0}\) 与条件概率 \(P(Y|X=0)\) 的本质区别是?
- A.前者考虑干预,后者是被动观测← 正确答案
- B.前者是概率,后者是确定性
- C.两者没有任何区别
- D.前者用于连续变量,后者用于离散变量
答案:A。\(Y_{X=0}\) 表示强制干预后的结果(平行世界),\(P(Y|X=0)\) 表示被动观测到 \(X=0\) 的情况(现实世界)。两者在混杂存在时数值不同。A 的“干预 vs 观测”正是 \(do\)-演算的核心区别。
Q6. 反事实推理的应用场景包括哪些?
- A.政策评估← 正确答案
- B.个性化医疗方案选择← 正确答案
- C.营销活动增量效果分析← 正确答案
- D.图像分类精度调优
答案:ABC。政策评估需要回答“如果没实施该政策会怎样”,医疗需要比较“这个病人用 A 药 vs B 药”,营销需要算“发券的增量价值”,这些都需要平行宇宙模拟器。D 是标准监督学习问题,只需相关性,不需要反事实。
Q7. 在反事实推理的 Abduction 步骤中,我们计算的是什么?
- A.外生变量的后验分布← 正确答案
- B.内生变量的先验分布
- C.结构方程的系数
- D.数据集的均值方差
答案:A。Abduction 是根据观测到的结果反推隐藏特质 \(U\) 的后验 \(P(U|\text{观测})\)。用侦探类比:根据现场线索(观测)反推犯人的特征(外生变量)。这是整个流程的基础,它让反事实具有个体化属性。
Q8. 下列哪些情况会导致反事实推理结果不可靠?
- A.因果图遗漏了重要混杂变量← 正确答案
- B.结构方程的函数形式设置错误← 正确答案
- C.外生变量的分布假设不合理← 正确答案
- D.样本量非常大但因果图正确
答案:ABC。因果图错误就像模拟器物理定律写错,结构方程形式错误就像万有引力公式用反了,外生分布假设错误就像对隐藏按钮的初始状态估计偏差。这三个条件正是“反事实有效性三条件”的反面。D 是理想情况的补充,不构成威胁。
Q9. 为什么反事实推理必须先做 Abduction 而不能直接用总体均值?
- A.因为结构方程需要重新拟合
- B.因为要锁定具体个体的隐藏特质← 正确答案
- C.因为观测值存在测量误差
- D.因为干预会影响外生变量
答案:B。反事实要回答“这个人(小明)如果没吃药会怎样”,而不是“平均人”会怎样。Abduction 根据小明确实康复的事实反推他的 \(U\),建立个人档案。不用总体均值是因为小明的隐藏特质可能偏离人群平均。
Q10. 关于结构方程 \(Y = 3X + U_Y\),以下说法正确的有?
- A.\(X\) 是 \(Y\) 的直接原因← 正确答案
- B.干预 \(do(X=2)\) 后,\(Y = 6 + U_Y\)← 正确答案
- C.\(U_Y\) 是影响 \(Y\) 的隐藏因素← 正确答案
- D.该方程表示 \(Y\) 是 \(X\) 的果,不是因← 正确答案
答案:ABCD。结构方程表达的是因果生成机制:\(X\) 是原因,系数 3 表示效应强度;干预 \(do(X=2)\) 后 \(X\) 被强制设为 2,但因为 \(X\) 的父节点已被切断,所以 \(Y = 3\times 2 + U_Y\);\(U_Y\) 是隐藏噪声;方程本身定义了因果方向(右手边是因)。四个选项都对,这道题综合了结构方程的核心语义。