想象你走进一家名为“如果当初”的时光旅行社。你告诉前台:“我想知道,如果当年我学了医学而不是计算机,现在会不会更幸福?”前台小姐微笑点头,递给你一份合同。合同上有一行小字:本社只能修改你人生中的一个决策,其余剧情、你的天赋与运气,一律保持不变。 这句话,就是反事实推理的灵魂。本文要讲的,正是这台“时光机”背后的数学引擎——结构因果模型(SCM)。它把世界拆成剧本(结构方程)、角色(变量)与运气(外生扰动),用三步法带你穿越:先用现在的剧情反推当年的运气(外推),再改写剧本中的某个决策(干预),最后用同样的运气重演人生(预测)。

岗位关联

对 AI 从业者而言,反事实推理是让模型回答“如果当初……会怎样”的关键能力,也是政策评估、医疗决策、商业归因中最具说服力的因果推断利器。

目录
  1. 可视化演示
  2. 反事实定义
  3. SCM三要素
  4. 因果图表示
  5. 三步法总览
  6. 证据后验更新
  7. 干预与do算子
  8. 因果之梯
  9. 应用场景
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

展示结构因果模型反事实三步法(溯因-干预-预测)、孪生网络表示及do算子与反事实的本质区别,揭示因果阶梯L2与L3的差异。

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

SCM反事实三步法 溯因步骤:P(U|E=e) 当前执行中 Y_x\'(u)=Pred(Action(Abduct(E=e),x\')) 保持外生变量不变修改结构方程推导假设结果

反事实定义

“如果那天我带了伞,就不会被淋成落汤鸡吧?”几乎每个人都曾在雨后的公交站台,对着湿漉漉的自己发出过这样的懊悔。时光旅行社的第一张宣传海报,印的就是这句话。这种“在假设中重构过去”的提问,正是反事实(counterfactual)的日常原型。

在SCM的语境里,反事实是一个有严格结构的问题:给定观测证据 \(E=e\)(事实),假设我们将某个变量 \(X\) 干预为 \(x'\)(改写历史),问结果变量 \(Y\) 会如何取值。它和“预测”不同——预测面向未来,反事实面向被改写的过去;它和“一般干预”也不同——干预关心“所有人把X设为x会怎样”,反事实关心“眼前这个具体的人,当年若X不同会怎样”。

正是这种“贴着具体个体”的提问,让反事实成了政策评估、医疗决策中最锋利但也最依赖假设的工具。它逼我们分清三个世界:观测到的现实、干预后的世界、以及针对个体的假设世界。

旅行社前台反复提醒客户:“我们不回答'人类如果都学医会怎样',我们只回答'你,如果当年学了医会怎样'。”这份“只针对你”的承诺,就是反事实和其他因果问题的分水岭。

SCM三要素

一份合格的“人生剧本”,编剧必须准备三件事:第一,角色清单——故事里有哪些人物和事件;第二,规则手册——每一幕情节如何由前情和角色特质推导出来;第三,隐藏设定——每个角色身上那股说不清的“运势”。三者缺一,剧本就无法开拍。

结构因果模型(SCM)就是这份剧本的数学形态。它由三样东西组成:外生变量 \(U\),对应“隐藏设定/运势”,是模型外部不可观测、不由剧本解释的随机来源;内生变量 \(V\),对应“角色与事件”,是剧中被其他变量决定的观测变量;结构方程 \(F\),对应“规则手册”,为每个内生变量规定一个生成公式。三者合在一起,定义了世界如何运转。

外生变量 \(U\) 的分布 \(P(U)\) 是故事的源头随机性;内生变量的方程则全部是“机械而确定”的——一旦给定父节点和外生项,内生变量的值就被锁定。这种“确定机制+外生随机”的设计,是SCM能够支持反事实证明的关键:它让我们能精确地说出“哪一步被改写、哪一步必须原样保留”。

剧本开拍之前,导演最重要的工作是核对三要素。反事实推理也一样:不先认清楚哪些变量是“角色”(内生)、哪些是“运势”(外生)、规则写在哪里(结构方程),后面的穿越只会变成一场糊涂的梦。

Vi=fi(Pai,Ui),i=1,2,…,n\displaystyle V_i = f_i(\mathrm{Pa}_i, U_i), \qquad i = 1, 2, \dots, n
每个内生变量都由“它的直接原因 + 一股外生扰动”按规则生成。外生变量是自带随机性的源头,内生变量是被规则锁定的结果。
  1. \(V_i\)(内生变量)剧本中的第 \(i\) 个人生节点,例如“学历 X”或“薪资 Y”;它的值不是天生注定的,而是由剧本规则和其他角色共同决定的。
    ViV_i
  2. \(f_i\)(结构方程)编剧为 \(V_i\) 写下的专属规则,描述“谁决定了谁、如何决定”。它是确定性的函数,随机性全部来自外生项。
    fi(⋅)f_i(\cdot)
  3. \(\mathrm{Pa}_i\)(父节点集合)\(V_i\) 的直接原因集合,即规则右侧出现的所有内生变量。例如“天赋”出现在“学历”的方程里,天赋就是学历的父节点。
    Pai\mathrm{Pa}_i
  4. \(U_i\)(外生扰动)剧本之外的一股随机力量,代表不可观测的个性、运气或噪声;它服从某个先验分布,是反事实中必须保持不变的部分。
    UiU_i

因果图表示

剧本文案再详尽,导演也先看分镜图——一张把每个角色画成圆圈、把“谁影响谁”画成箭头的图纸。时光旅行社的档案室里,每位客户都有一张这样的分镜图。

因果图(Causal DAG)是SCM的可视化投影。图中每个节点对应一个变量(外生或内生),每条有向边 \(X \to Y\) 表示“X 是 Y 的直接原因”,图中一个变量所有的直接原因,称为它的“父亲节点”集合。图是“谁影响谁”的定性描述,结构方程是“影响多大、噪声多大”的定量描述。

因果图必须是无环的(DAG):沿着箭头不可能绕回自身,否则会出现“我导致我”的悖论。这张图最大的用处,是在反事实推理时帮我们看清干预的边界——剪断哪条箭头(指向X的边)、保留哪条箭头(其余所有边)。图中信息一目了然,不容易出错。

分镜图上,U2 指向 Y 的箭头始终保留,X 指向 Y 的箭头也保留,唯有“U1 指向 X”的那条边在穿越时被画上红叉。哪条线能动、哪条线不能动,导演和时光旅行社都在同一张图上签字确认。

三步法总览

时光旅行社的合同正文只有三行:验明正身、改写剧本、重演人生。所有“如果当初”的服务,本质上都是这三步的组合拳。

在SCM中,这三步有正式的名字:外推(Abduction)、干预(Action)、预测(Prediction)。外推用观测证据把外生变量的先验变成后验;干预把目标变量的结构方程替换为常数;预测在修改后的模型里,用后验外生变量重新计算目标变量的分布。

这个公式把三步行云流水地串在一起:左边是“在事实 e 下,若 X=x 则 Y=y”的概率;右边先用 \(P(u \mid e)\) 完成外推,再让 \(Y_x(u)\) 完成干预加预测——对每个可能的运气,检查新剧本是否给出 y,最后按后验概率加权。说白了一句话:在“和历史吻合的运气”里,平行世界的 Y 有多大概率等于 y。

“验明正身”锁定了你的运势档案,“改写剧本”撕掉你选错的那一页,“重演人生”用同样的运气跑完新剧本。三步做完,旅行社才能郑重地告诉你:如果当年学医,你有百分之多少的概率比现在幸福。

P(Yx=y∣E=e)=∑u1[ Yx(u)=y ] P(u∣e)\displaystyle P(Y_x = y \mid E=e) = \sum_{u} \mathbb{1}\big[\, Y_x(u) = y \,\big] \, P(u \mid e)
反事实概率 = 把所有“与历史吻合的运气”挑出来,逐个检查在改写后的剧本里结果是否为 y,再按后验权重加总。
  1. \(Y_x\)(反事实变量)在“把 X 改成 x”的假设世界中,\(Y\) 将会取到的值;它是平行世界里的薪资。
    YxY_x
  2. \(E=e\)(观测证据)现实世界中已经发生的事实,如“我看到他确实学了计算机,月薪三万”。
    E=eE=e
  3. \(P(u \mid e)\)(后验分布)经过外推后,个体“运气”的更新分布——它把想象限制在“和历史吻合的运气”里。
    P(u∣e)P(u \mid e)
  4. \(\sum_u \mathbb{1}[\cdot]\)(加权汇总)对所有可能的运气 \(u\) 逐一检查“若运气是 \(u\),\(Y_x\) 是否等于 \(y\)”,再用后验概率加权平均,得到反事实概率。
    ∑u1[ Yx(u)=y ] P(u∣e)\sum_{u} \mathbb{1}[\, Y_x(u)=y \,] \, P(u \mid e)

证据后验更新

前台小姐不会轻易相信“我一直运气很好”这种话。她会拿出你的简历和工资条,在档案系统里检索:什么运气区间,才能解释一个学了计算机、月薪三万的人?这一检索动作,就是外推。

外推环节数学上就是贝叶斯更新。初始时外生变量 \(U\) 服从先验 \(P(U)\)——对所有人一视同仁;观测到证据 \(E=e\) 后,我们淘汰那些“解释不了证据”的运气,保留能合理解释当下剧情的那些,得到后验 \(P(U \mid e)\)。

后验分布的形状透露了证据的力量:如果后验又尖又窄,说明当前事实强有力地锁定了“运气”的范围;如果后验依然宽泛,说明同样的事实可能来自多种运气组合,反事实的结论也将带着更大的不确定性。这正是反事实推理诚实的体现——它从不假装知道它不知道的事。

验明正身的最终产物是一张“运势区间卡”,上面写着:根据现有剧情,您的运气大概率在 -0.3 到 0.4 之间。这张卡会一直用到穿越结束——无论新剧本怎么改,卡上的运气都不许换。

P(U=u∣E=e)=P(E=e∣U=u) P(U=u)P(E=e)\displaystyle P(U=u \mid E=e) = \frac{P(E=e \mid U=u)\, P(U=u)}{P(E=e)}
贝叶斯公式把“宽泛的先验运气”过滤成“贴合证据的后验运气”:越能解释眼前事实的运气,权重越大。
  1. \(P(U=u)\)(先验)在没看到任何证据前,对“这个人运气如何”的初始分布,通常是一个宽泛的钟形曲线。
    P(U=u)P(U=u)
  2. \(P(E=e \mid U=u)\)(似然)如果运气真是 \(u\),那么出现当前证据(学历和薪资)的可能性有多大;这是剧本对每个运气的“解释力”。
    P(E=e∣U=u)P(E=e \mid U=u)
  3. \(P(U=u \mid E=e)\)(后验)用证据过滤后的运气分布,外推步骤的最终产物。
    P(U=u∣E=e)P(U=u \mid E=e)
  4. \(P(E=e)\)(归一化)所有运气下出现证据的总概率,保证后验加起来等于 1。
    P(E=e)P(E=e)

干预与do算子

剧本第 3 页写着:“学历 = 天赋 × 0.8 + 噪声”。你要改写这一页——不是在上面的等式里改数字,而是把整行撕掉,贴上一张新字条:“学历:= 硕士”。改写之后,无论天赋和噪声怎么折腾,学历都死死等于硕士。这就是 do 算子。

在SCM中,干预 \(do(X=x)\) 就是执行一次这样的“撕页手术”:删除 X 原有的结构方程,将其替换为常数 \(x\)。其余变量的方程全部保留,得到子模型 \(M_x\)。

这个操作和“条件化 \(X=x\)”有本质区别:条件化只是从数据中筛出 \(X=x\) 的样本,X 的生成机制还在;干预则彻底切断了指向 X 的因果箭头,让 X 不再受父节点与外生扰动影响。因此 \(P(Y \mid do(X=x))\) 通常不等于 \(P(Y \mid X=x)\)——前者是“全员改学历后的薪资分布”,后者只是“工程师人群的薪资分布”。

时光旅行社纪律严明:你可以在穿越中把“学历”这一页换成新内容,但绝不允许顺手把“天赋”那一页也撕了。如果连外生条件一起改,故事就不再是“如果当初”,而是“如果我是另一个人”。

Mx:X=x,Vi=fi(Pai,Ui)  (Vi≠X)\displaystyle M_x: \quad X = x, \qquad V_i = f_i(\mathrm{Pa}_i, U_i) \ \ (V_i \neq X)
干预 = 删掉 X 的旧方程,贴上常数。世界其余部分原样运转。
  1. \(M_x\)(子模型)干预后得到的新剧本,世界的一切规则照旧,只有 X 那一页被改写。
    MxM_x
  2. \(X = x\)(替换方程)原来关于 X 的结构方程被整段删除,换成固定常数;X 从此不再受其父节点和外生扰动摆布。
    X=xX = x
  3. \(V_i = f_i(\mathrm{Pa}_i, U_i)\)(保留方程)除了 X 之外,所有内生变量的方程原封不动,因果路径继续照常运转。
    Vi=fi(Pai,Ui)V_i = f_i(\mathrm{Pa}_i, U_i)

因果之梯

旅行社的培训手册用三句话概括人类理解因果的三级境界:看见——“下雨和地湿总是同时出现”;动手——“我朝地上泼一盆水,地果然湿了”;想象——“如果今天没下雨,这片地现在应该是干的”。

这三级境界就是 Pearl 的因果之梯。第一层“关联”只回答问题“若 \(X=x\),Y 如何(在数据中)”,记作 \(P(Y \mid X=x)\);第二层“干预”可以回答“若我把 X 设为 x,Y 如何”,记作 \(P(Y \mid do(X=x))\);第三层“反事实”回答“在证据 e 下,若当年 \(X=x\),Y 会如何”,记作 \(P(Y_x \mid e)\)。

越往梯子上爬,需要的资源越多:关联层只需观测数据,干预层需要可控实验或有效的因果假设,反事实层需要“完整结构方程+证据外推+精确干预”三件套。但回报也越大——只有第三层能回答那些让人类最着迷的问题:“如果当初……”。

看见是路人的直觉,动手是科学家的实验,而想象,是时光旅行社的独门生意。从第一层爬向第三层,是一个模型从“懂相关”到“懂因果”再到“懂平行人生”的成长阶梯。

应用场景

翻开时光旅行社的客服留言本,你会发现三个出现频率最高的请求,恰好对应三类客户:政府官员、医生和产品经理。

政策评估中,官员会问:“如果当年没有发放这轮创业补贴,县域里的小微企业存活率会下降多少?”反事实的算法是:以每家企业的真实经营记录为证据做外推,固定企业特征(外生变量),把“补贴”干预为 0,重演无补贴世界的存活情况。医学研究中,医生会问:“如果这位患者当初用 B 药而非 A 药,5 年生存概率有多大?”以患者完整的病程史为证据,把用药变量锁定为 B,保持其身体基底(外生)不变,推演出个体化的反事实结果。商业决策中,产品经理会问:“如果上个月不做大促,这款产品的销量会差多少?”以历史购买行为为证据,把促销策略干预为“不促销”,保持季节与人群偏好不变,算出假设世界的销量。

三个问题的共同点:事实现实已经发生,且不可重来;但我们依然想量化“另一条路”的结果。反事实推理不需要真的复制一个平行宇宙,只需要结构方程足够忠实地描述世界,外加一次运算就能回答。

每一次“如果当初”,都是一张时光旅行社的正式工单。它不能改变已经发生的过去,却能让未来的决策者看清:那条没走的路,究竟通向哪里。

AI 应用场景

政策评估:没有补贴的世界

阶段:因果推断/政策评估

解决的问题:现实无法重来,无法把同一批企业分成“补贴组”和“无补贴组”重跑一遍。传统方法只用简单对比,会混入企业本身特征的差异。反事实推理以每家企业真实经营数据为证据,外推其后验特征,再把“补贴=1”干预为 0,重演存活结果,得到干净的政策效应。

具体案例:某地财政曾对小微企业发放创业补贴。评估者用SCM建模“补贴→现金流→存活”,以企业实际经营轨迹为证据做外推,计算“若没有补贴”的反事实存活率,发现补贴主要挽救了现金流紧张但产品有市场的一类企业。

医学研究:换一种药的平行病程

阶段:个体化治疗决策

解决的问题:医生想知道“如果这位患者当初用 B 药,是否比 A 药效果更好”,但患者不可能同时吃两种药。反事实推理以患者完整病历为证据更新其病理特征(外生),把用药变量干预为 B,推演个体化的 5 年生存率分布。

具体案例:肿瘤科伦理审查无法对真实患者随机用药。研究团队用历史电子病历训练SCM,对某位已用 A 药的患者计算反事实“若用 B 药”,发现新方案可把预测生存期中位数提高 1.8 个月,成为医患共同决策的依据。

商业决策:没有促销的上个月

阶段:营销归因与销售复盘

解决的问题:促销已经做了,销售额是好是坏没有对照组。传统归因把销量全归给促销,忽略了季节与用户偏好。反事实推理保持外生因素(季节、人群偏好)不变,把“促销”干预为“无促销”,算出反事实销量,二者之差才是促销的真实增量。

具体案例:某电商复盘“618 大促”,用历史交易数据构建销量SCM,对实际发生的大促月份计算反事实“若不促销”,发现大促贡献的增量销量仅为总销量的 18%,其余是自然增长和需求平移。

Python 演示

python46 行
import numpy as np  class SalarySCM:    """简化结构因果模型: 学历X与薪资Y, 天赋U为外生变量"""     def __init__(self):        self.u_std = 1.0   # 天赋U的先验标准差        self.a = 0.8       # U对X的因果系数        self.b = 1.2       # U对Y的因果系数        self.c = 0.5       # X对Y的因果系数     def predict(self, u):        """给定外生变量u, 按结构方程计算内生变量"""        x = self.a * u        y = self.c * x + self.b * u        return x, y     def abduction(self, x_obs, y_obs, n=3000):        """第1步 外推: 用观测证据筛出U的后验样本"""        rng = np.random.default_rng(0)        candidates = rng.normal(0, self.u_std, n * 20)        x_pred, y_pred = self.predict(candidates)        loss = (x_pred - x_obs) ** 2 + (y_pred - y_obs) ** 2        keep = np.argsort(loss)[:n]        return candidates[keep]     def counterfactual(self, x_obs, y_obs, x_new, n=3000):        """三步法: 外推 + 干预(do) + 预测"""        u_post = self.abduction(x_obs, y_obs, n)        _, y_factual = self.predict(u_post.mean())        # do(X=x_new): 删除X的方程, 保持U后验不变, 重新预测Y        y_cf = self.c * x_new + self.b * u_post        return y_factual, y_cf.mean()  if __name__ == "__main__":    rng = np.random.default_rng(7)    scm = SalarySCM()    u_true = rng.normal(0, scm.u_std)    x_obs = scm.a * u_true + rng.normal(0, 0.05)    y_obs = scm.c * x_obs + scm.b * u_true + rng.normal(0, 0.1)    y_fact, y_cf = scm.counterfactual(x_obs, y_obs, x_new=0.0)    print(f"观测: 学历X={x_obs:.2f}, 薪资Y={y_obs:.2f}")    print(f"事实(原路径): Y={y_fact:.2f}")    print(f"反事实(若X=0): Y={y_cf:.2f}")
目的:用一个小型线性SCM演示反事实三步法——先由观测证据外推天赋后验,再把学历 X 干预为 0,预测平行世界的薪资。
  1. y = self.c * x + self.b * u薪资的结构方程:学历贡献 c*x,天赋贡献 b*u
  2. loss = (x_pred - x_obs) ** 2 + (y_pred - y_obs) ** 2外推的评分函数:候选天赋越贴近观测,损失越小
  3. keep = np.argsort(loss)[:n]只保留最贴合证据的“运势”样本,形成后验
  4. u_post = self.abduction(x_obs, y_obs, n)三步法第 1 步:验明正身
  5. y_cf = self.c * x_new + self.b * u_post干预+预测:X 锁为新值,U 原样保留,重演人生
  6. print(f"反事实(若X=0): Y={y_cf:.2f}")输出平行世界的平均薪资

常见误区

误区看到 P(Y|X=x) 就以为回答了“如果 X 变成 x,Y 会怎样”。觉得反事实不就是在数据里找 X=x 的那些人,看看他们的 Y 吗?

正解条件化只是从现有数据中筛出“学历=硕士”的人群,观察他们的薪资——X 的生成机制还在,样本混杂着“本来就能读硕士的人”的特征。反事实则要求时光旅行社真正撕掉“学历”的方程,让所有人的学历都被外部设为硕士,再重演人生。前者看的是“恰好是硕士的人”,后者模拟的是“把所有人都变成硕士”。

为何常见:平时做数据分析习惯了分组统计,容易忽略“变量是被生成出来的”这一层。条件概率只需要数据,反事实却需要完整的SCM,省掉模型自然就混为一谈。

误区做反事实的时候,把 X 设为新值 x',然后保留 X 原来的方程,觉得这样就是“修改了一个变量”。

正解do(X=x') 要求把 X 的结构方程整段删除,替换成常数。若保留原方程,在重演时 X 仍会受父节点和 U 的波动影响,悄悄偏离 x',推出的结果既不是事实也不是反事实。时光旅行社的规则是“撕页重贴”,不是“在旧字上描新字”。

为何常见:写程序时“变量赋值”的思维根深蒂固,但SCM里的内生变量不是可随意赋值的存储单元,而是由机制生产的结果。

误区既然“如果 X=x',Y 就会如何如何”,那 Y 应该是一个唯一的数,就像重启一次游戏会有固定结局。

正解外推得到的后验 P(U|e) 往往不是单点——多个运气值都能解释同一份证据。因此反事实结果通常是一个分布,回答“Y=y 的概率是多大”,而非单一数值。时光旅行社只能告诉你“有 68% 的平行世界你月薪超过 2 万”,没法告诉你“平行世界的你恰好月薪 25000”。

为何常见:把反事实想象成确定性仿真,忽略了模型中的外生随机性和后验的不确定性。真正严谨的反事实输出是分布。

误区要回答“如果没吃药会怎样”,只能再找一批没吃药的患者做随机对照试验,不然没法知道。

正解反事实推理的价值恰恰在于不用真的重来——利用已观测证据+正确的SCM结构,通过后验外推和模型修改即可计算假设世界。当然,前提是结构方程足够可靠;若模型错误,反事实也会偏差。

为何常见:混淆了“验证因果效应”(需要实验)与“个体化反事实推演”(可在模型中完成)。AI 时代真正的优势是:过去只能在现实中碰运气,现在能在模型里合法穿越。

面试题

Q1. 反事实推理要回答的核心问题是?

单选题 · easy

  • A.数据中哪个变量与结果相关最密切
  • B.如果过去某个环节不同结果会怎样← 正确答案
  • C.未来某个时点的结果会是多少
  • D.如何设计实验验证因果关系

答案:B。反事实的核心是“假设过去某个环节不同,推演结果”,B 正确。A 属于关联层,C 属于预测,D 属于干预实验。

Q2. SCM中的外生变量指的是?

单选题 · easy

  • A.由模型内部方程决定的变量
  • B.模型之外不可解释的随机来源← 正确答案
  • C.可以被直接干预的因果变量
  • D.数据集中可以观测到的变量

答案:B。外生变量由模型外部给定,不由结构方程解释,相当于“剧本外的运气”。A、D 描述的是内生变量,C 混淆了干预对象。

Q3. 因果之梯的正确层级顺序是?

单选题 · easy

  • A.干预层、关联层、反事实层
  • B.关联层、干预层、反事实层← 正确答案
  • C.关联层、反事实层、干预层
  • D.反事实层、干预层、关联层

答案:B。Pearl 的因果之梯由低到高为:关联(看见)→ 干预(动手)→ 反事实(想象),B 正确。

Q4. 反事实三步法中“外推”的主要作用是?

单选题 · mid

  • A.删除X的结构方程并赋常数
  • B.根据观测证据更新U的后验分布← 正确答案
  • C.预测未来结果变量的分布
  • D.对因果图做结构学习调整

答案:B。外推(Abduction)就是用证据把先验 P(U) 更新为后验 P(U|e),B 正确。A 是干预,C 是预测,D 是结构学习。

Q5. do(X=x) 对结构方程执行的操作是?

单选题 · mid

  • A.保留原方程并将X赋值为x
  • B.删除X的方程替换为常数x← 正确答案
  • C.删除X所有子节点的方程
  • D.仅修改外生变量的先验分布

答案:B。do(X=x) 把 X 的方程整段删除并替换为常数 x,B 正确。保留原方程会让 X 在重演时再次被父节点影响,违背干预语义。

Q6. 反事实与条件概率 P(Y|X=x) 的本质区别是?

单选题 · mid

  • A.反事实需改动数据生成机制← 正确答案
  • B.条件化需改动数据生成机制
  • C.二者在本质上完全相同
  • D.二者均需干预实验来验证

答案:A。条件化只筛数据子集,机制不变;反事实要删除 X 的方程、修改生成机制。A 正确,B 说反了,C、D 均不成立。

Q7. 线性SCM:X=aU+ε,Y=cX+bU+η,计算反事实“若X=x'时Y的值”,正确做法是?

单选题 · hard

  • A.用历史均值替代X计算Y值
  • B.删X方程后以x'替代,U用后验计算Y← 正确答案
  • C.重新抽样新的U替代原U计算Y
  • D.忽略X项直接用bU计算Y

答案:B。B 正确:删除 X 的方程、令 X=x',再用后验 U 代入 Y=cX+bU。A 用均值替代是条件化,C 改变了外生变量,D 丢掉了 X 的因果贡献。

Q8. 反事实推理的正确应用场景包括?

多选题 · mid

  • A.评估若无补贴企业存活率← 正确答案
  • B.计算两变量间的相关系数
  • C.推断患者若换药的生存率← 正确答案
  • D.用K-means对客户进行聚类

答案:AC。A 是政策反事实,C 是医学反事实,都属于在已有证据下改写干预变量。B 是关联分析,D 是无监督聚类,均不涉及因果改写。

Q9. 关于反事实结果的说法正确的有?

多选题 · hard

  • A.结果通常是一个概率分布← 正确答案
  • B.结果一定是唯一的确定值
  • C.结果依赖外生变量的后验← 正确答案
  • D.结果不需要任何模型假设

答案:AC。外推得到的 P(U|e) 常为分布,所以反事实结果也是分布,A 对、B 错;结果依赖后验 C 对;反事实需要正确的结构方程假设,D 错。

Q10. 已知某人观测为 (X=x, Y=y),要计算“若当年 X=x',Y 会如何”的反事实概率,正确步骤包括?

多选题 · extreme

  • A.先用观测证据估计U的后验分布← 正确答案
  • B.删除X方程并令X等于x'← 正确答案
  • C.在修改后的模型中用后验U推Y← 正确答案
  • D.保留X原方程只重排数据

答案:ABC。三步法依次为:外推(A)、干预(B)、预测(C)。D 保留原方程是典型的错误做法,会导致 X 重演时偏离 x',结果既非事实也非反事实。