你第一天到剧团当见习导演。坐在观众席看排练,你发现一个有趣的现象:只要主角A情绪饱满,配角B的台词也跟着铿锵有力。“那好办,”你心想,“让A再卖力些,整台戏不就活了?”旁边的老导演却泼来冷水:“你怎么知道不是舞台总监C在幕后分别给两人递了鼓励的暗号?你看到的只是同时发生,而不是谁带动了谁。”因果推断要回答的,正是“如果我强制改变某个变量,其他变量会怎么变”这类问题。结构因果模型SCM把“一台戏”用数学写清楚:变量是演员,结构方程是反应剧本,而干预操作就是导演喊“卡”、当场改规则的那一刻——把目标变量的方程替换成常数,切断它与所有“台词来源”的依赖。本文从剧场出发,一步步看懂这场“导演改戏”的完整流程:从观察与干预之分,到do算子这把手术刀,再到干预后分布的计算与现实应用。

岗位关联

对AI从业者来说,掌握干预操作意味着你能够区分“模型嗅到的相关”与“世界真正的因果”,在推荐、医疗、风控等场景把只会预测的模型升级为可干预、可解释的决策引擎——这是从“预知”走向“改变”的关键一步。

目录
  1. 可视化演示
  2. 干预与观察之别
  3. 结构方程三件套
  4. do算子手术刀
  5. 干预后分布
  6. 混杂与调整
  7. 应用价值场景
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示do(X=x)图手术切断因果边、观测与干预分布的去混杂差异、原子/条件/随机三种干预类型。

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

do(X=x)图手术 do(X=x)将X结构方程替换为常数赋值 切断X所有入边,X不再依赖父变量 U→Y边保留,系统按新结构运行 do(X=x):X←x,删PA_X→X 结构方程修改等价于因果图手术截断。

干预与观察之别

你第一天到剧团当见习导演。坐在观众席看排练,你发现一个有趣的现象:只要主角A情绪饱满,配角B的台词也跟着铿锵有力。“那好办,”你心想,“让A再卖力些,整台戏不就活了?”旁边的老导演却泼来冷水:“你怎么知道不是舞台总监C在幕后分别给两人递了鼓励的暗号?你看到的只是同时发生,而不是谁带动了谁。”

这正是“观察”与“干预”的分野。观察是坐在观众席上记账单:记录哪些事情老是一块儿出现。干预是走到台前改规则:我强制A按固定的方式演,再看B会变成什么样。统计与机器学习的大多数任务都在记账单——从历史数据里估计P(Y|X=x);而因果推断想回答的是另一个问题:“如果我强推X,Y会不会因此改变?”——也就是P(Y|do(X=x)),其中do读作“干预”,是因果推断里“导演的指令”记号。

这两个量为什么不同?因为数据背后往往藏着“导演助理”式的混杂因素Z:它同时推高X与Y,让两者显得如影随形。课堂反复强调“相关不等于因果”,正是因为观测数据里X的变动常常不是自己主动发生的,而是被Z拖着走的。若让AI只盯着历史日志做预测,它学会的其实是Z与Y的共谋,而非X对Y的真作用。

回到剧场:观众记录的“同台共演”是相关性,导演安排的“单独试戏”才是因果。干预操作,正是让AI从坐席上的观众,变成手握话筒的导演的第一步。

P(Y∣X=x)≠P(Y∣do⁡(X=x))\displaystyle P(Y \mid X = x) \ne P(Y \mid \operatorname{do}(X = x))
这个公式是因果推断的“镇店之宝”:左边的条件概率是观众视角的记账,右边的干预概率是导演视角的实验结果,二者在存在混杂时绝不相等。
  1. 观察条件概率P(Y|X=x)表示在历史数据里“筛出X恰好等于x的那些记录,再看Y的分布”,这是观众坐席上的记账。
    P(Y∣X=x)\displaystyle P(Y \mid X = x)
  2. 干预记号do(X=x)表示“我强行让X等于x之后,系统重新运转时Y的分布”,这是导演手里的指令牌。
    do⁡(X=x)\displaystyle \operatorname{do}(X = x)
  3. 不等号除非X背后没有任何混杂路径,否则这两个量不相等;拿左边的观察账本当右边的因果答案,正是很多决策翻车的根源。
    P(Y∣X=x)≠P(Y∣do⁡(X=x))\displaystyle P(Y \mid X = x) \ne P(Y \mid \operatorname{do}(X = x))

结构方程三件套

要把“导演改戏”变成一门精确的技术,得先把“一台戏”写清楚。剧团里每位演员都有一份“反应剧本”:读到对手什么语气,自己就配什么表情;剧本还留了即兴发挥的空间——演员当天心情好坏,谁也控制不了。这台戏的结构,就藏在剧本、角色与临场发挥三样东西里。

结构因果模型SCM(Structural Causal Model)就是这份“剧组说明书”,由三位成员组成:外生变量U,是演员无法控制的即兴噪声(比如心情、天气、幕后琐事);内生变量V,是每个演员可被观测的表演状态;结构方程F,是每位演员的反应剧本,规定他如何根据父节点的台词与噪声“演”出自己的状态。三者合起来写成三元组SCM = (U, V, F),一张因果图则是这份说明书的可视化附录——每个箭头都写着“谁看谁的脸色”。

结构方程写成如下形式:第i个内生变量(演员)由它的“台词来源”父节点集合pa_i和随机干扰u_i共同决定。这就像B的表演不仅取决于A递来的台词,还取决于他自己今天嗓子是否舒服。因果图正是把这种依赖关系画成一张有向无环图,而干预操作,就要在这份说明书上动手术。

有了U、V、F三件套,剧组说明书就齐了。因果图是舞台关系图,结构方程是每个人的反应剧本。接下来,导演要动手改稿了。

vi=fi(pa⁡i,  ui)\displaystyle v_i = f_i(\operatorname{pa}_i,\; u_i)
这条公式是SCM的基本积木:任何一个可观测变量,都由它的直接原因(父节点)和一个不可观测的随机噪声共同决定。
  1. 内生变量v_i是要解释的变量,比如演员B在台上的表演状态,它的取值由方程给出。
    vi\displaystyle v_i
  2. 父节点集合pa_i是直接影响v_i的那些变量,是剧本里“要看谁脸色”的对象,比如B要读的A的台词。
    pa⁡i\displaystyle \operatorname{pa}_i
  3. 噪声项u_i代表不可观测的干扰,每次演出都不同,对应演员的即兴发挥。
    ui\displaystyle u_i
  4. 函数关系f_i把“父节点输入 + 噪声”映射成v_i,即剧本的具体规定,可以线性也可以非线性。
    vi=fi(pa⁡i,  ui)\displaystyle v_i = f_i(\operatorname{pa}_i,\; u_i)

do算子手术刀

老导演终于决定改规则。他把主角A叫到台前:“这场戏你不用看导演助理的暗号,也不许受任何人影响,我让你这样演,你就这样演。”这相当于把A的“反应剧本”当场烧掉,换上一张只写着“固定台词”的便签。台下所有人都屏住呼吸:改变A的规则,其他演员会怎么接戏?

在SCM里,这张便签就是do算子。do(X=x)不是“发现X恰好取了x值”,而是“命令X必须等于x”。前者是筛选历史记录,后者是修改系统机制。一个是被动的记账,一个是主动的改戏,二者天差地别。do算子把“如果人为设定X”这个反事实问题,变成了一个可计算的形式化操作。

形式上,干预把模型M变成M_x:X的结构方程被整体替换为常数X=x,其余所有变量的结构方程原封不动。从因果图上看,所有指向X的箭头(入边)被一刀剪断,X头顶只剩一个“常数源”。这就是“手术式修改”的由来:只动X那个部件,其他齿轮照常咬合。

手术刀落下的地方,正是观察与干预的分界线。X从此不再是“被解释的演员”,而是“被安排的角色”。

M:X=fX(pa⁡X,UX),  Y=fY(X,UY)  ⟶  Mx:X=x,  Y=fY(x,UY)\displaystyle M: X = f_X(\operatorname{pa}_X, U_X),\; Y = f_Y(X, U_Y) \;\longrightarrow\; M_x: X = x,\; Y = f_Y(x, U_Y)
干预就是给模型做“体外手术”:把X的方程换成常数,剪断入边,同时保证别人的剧本一字不改。
  1. 原方程干预前,X由它的父节点和噪声决定,Y依赖X的取值。
    X=fX(pa⁡X,UX)\displaystyle X = f_X(\operatorname{pa}_X, U_X)
  2. do指令do(X=x)在模型M_x中明确指定X的取值为x。
    do⁡(X=x)\displaystyle \operatorname{do}(X = x)
  3. 替换方程X的原方程被常数赋值替代,X不再看任何人的脸色。
    X=x\displaystyle X = x
  4. 其余不变Y的方程保留,但其中的X代入了固定值x——这是因果效应得以传导的关键通道。
    Y=fY(x,UY)\displaystyle Y = f_Y(x, U_Y)

干预后分布

改完剧本,剧组重新走一遍台。其他演员照旧按自己的反应剧本演出,唯一不同的是A现在固定地说那句台词。台下统计员记下B每一场的表现,汇总成一张表——这就是“干预之后的戏”,在数学上叫干预后分布。它回答的正是开头那个问题:“如果A固定这样演,B会如何?”

干预后分布写作P(Y|do(X=x)),它等于修改后模型M_x所生成的分布。要得到它,未必真的做实验:只要已知每个变量的条件分布和因果图,就有公式可循。这个公式叫做“截断因子分解”,它的思路很朴素:联合分布本来可以拆成每个变量在父节点条件下的概率之积;干预之后,X的因子被“截断”删除,X在其余因子里一律代入常数x。

之所以能这样算,是因为干预只改变X的生成机制,不改变其他变量的机制。于是全体变量的干预后联合分布,就等于“除X以外所有变量”的条件概率乘积,再把其中的X替换成x。祖先的因子被剪掉,后代的条件照旧——因果的传导链条就这样被公式接上了。

走台结束,统计本上的分布,就是“如果A固定这样演,B会如何”的因果答案。公式与实验在这里握手言和。

P(y1,…,yn∣do⁡(X=x))=∏i:Vi≠XP(vi∣pa⁡i)∣X=x\displaystyle P(y_1, \dots, y_n \mid \operatorname{do}(X = x)) = \prod_{i: V_i \neq X} P(v_i \mid \operatorname{pa}_i) \Big|_{X = x}
截断因子分解是干预计算的“收银小票”:删掉X的因子,把剩下的因子相乘,再把X的位置全部贴上x。
  1. 联合分解干预前,所有变量的联合分布可分解为每个变量在父节点条件下的概率之积。
    P(y1,…,yn)=∏iP(vi∣pa⁡i)\displaystyle P(y_1, \dots, y_n) = \prod_i P(v_i \mid \operatorname{pa}_i)
  2. 删除因子干预后,X的因子P(x|pa_X)被删除,因为X变成了没有父节点的常数。
    删除因子 P(x∣pa⁡X)\displaystyle \text{删除因子 } P(x \mid \operatorname{pa}_X)
  3. 代入固定值X在其后代变量的条件中出现的位置,全部替换成常数x。
    ∣X=x\displaystyle \Big|_{X = x}
  4. 连乘剩余其余因子照常相乘,得到完整的干预后联合分布。
    ∏i:Vi≠XP(vi∣pa⁡i)\displaystyle \prod_{i: V_i \neq X} P(v_i \mid \operatorname{pa}_i)

混杂与调整

难题来了。舞台上那位“导演助理”并没有被请出场,他还在幕后同时给A和B递暗号。虽然A已经固定台词不听他的了,但他仍然直接影响B——这就像一场戏里有个看不见的提词员,一边给主角使眼色,一边把情绪传给配角。如果不处理这位提词员,我们估计出来的“X对Y的效应”就会悄悄混进他的功劳。

在因果语言里,这位提词员(记作Z)就是混杂因素:它既影响X又影响Y,在X→Y这条“前门”之外,开了一条X受到Z影响、Z又影响Y的“后门路径”。后门一开,观察数据里的X与Y就会“同频共振”,而这份共振与X自身对Y的因果作用无关。若直接比较“X取不同值时Y的表现”,就会把Z的效应错记在X的账上。

怎么把Z的污染清理掉?答案是“后门调整公式”:先按Z的取值分层,在每一层内部看X与Y的关系,再按Z的分布做加权平均。这就好比把剧组按“提词员是否上班”分成两个小组分别彩排,再把两组的统计结果按上班天数合并——每一组内部的对比,都不再受提词员干扰。

清理完提词员的干扰,A与B之间的戏路才真正清晰。后门调整公式,就是那场“分小组彩排”的数学缩影。

P(Y∣do⁡(X=x))=∑zP(Y∣X=x,  Z=z) P(Z=z)\displaystyle P(Y \mid \operatorname{do}(X = x)) = \sum_z P(Y \mid X = x,\; Z = z)\, P(Z = z)
后门调整公式是“去偏神器”:把混杂因素Z分层后各自算账,再按Z的出现比例加权求和,得到干净的干预效应。
  1. 分层切分按混杂因素Z的每个取值z把数据切成小组,提词员状态相同的戏放在一起比。
    Z=z\displaystyle Z = z
  2. 层内条件概率在Z=z的小组里,看X=x时Y的条件分布,此时X与Y的关联已不被Z污染。
    P(Y∣X=x,  Z=z)\displaystyle P(Y \mid X = x,\; Z = z)
  3. 加权求和把各小组结果以P(Z=z)为权重合并,还原出“干预后整体”的答案。
    ∑z(⋅) P(Z=z)\displaystyle \sum_z (\cdot)\, P(Z = z)

应用价值场景

排练厅里的因果关系,终究要搬上真实的“商演舞台”。无论是政府调整政策、医生决定用药,还是公司改动产品定价,决策者问的都是同一个干预问题:“如果我强制改变某个变量,结果会怎样?”而不是“历史上结果是什么样的”。这正是干预操作为AI和决策科学带来的核心价值。

在政策评估中,上调最低工资(X)对就业率(Y)的影响,会被经济周期(Z)这个混杂因素干扰——经济好的时候政策与就业齐涨,看起来像政策的功劳。用后门调整把周期剥离,才能真正评估政策效果。医学研究同理:新药的疗效会被病情严重程度混杂,观察数据里“吃药的人恢复快”可能只是因为他们本来病得轻;用干预语言做分析,才能给出无偏的疗效估计。

在商业决策中,最常见的干预指标是平均因果效应ATE:让X从0变到1,看Y的期望变化多少。推荐系统、定价引擎、用户增长团队都可以先把“观察回归”换成“干预评估”,再拍板上线——先问“如果强制所有用户看到这个推荐位(do),转化率会怎样”,而不是“看到推荐位的用户转化率是多少”。

从排练厅到商演,导演始终握着同一把手术刀:观察看相关,干预见因果。政策、医学、商业,都等着这位“因果导演”入场。

ATE⁡=E[Y∣do⁡(X=1)]−E[Y∣do⁡(X=0)]\displaystyle \operatorname{ATE} = \mathbb{E}\big[Y \mid \operatorname{do}(X = 1)\big] - \mathbb{E}\big[Y \mid \operatorname{do}(X = 0)\big]
平均因果效应ATE是干预思维的“商业落地版”:把施策组与对照组的期望结果相减,得到X带来的净变化。
  1. 施策期望do(X=1)条件下Y的期望,代表“实施干预后”的结果均值,比如涨价后的销量。
    E[Y∣do⁡(X=1)]\displaystyle \mathbb{E}\big[Y \mid \operatorname{do}(X = 1)\big]
  2. 对照期望do(X=0)条件下Y的期望,代表“不干预”的基线水平。
    E[Y∣do⁡(X=0)]\displaystyle \mathbb{E}\big[Y \mid \operatorname{do}(X = 0)\big]
  3. 差值运算两者相减得到净效应ATE;若为正说明干预有效,为负则说明适得其反。
    E[Y∣do⁡(X=1)]−E[Y∣do⁡(X=0)]\displaystyle \mathbb{E}\big[Y \mid \operatorname{do}(X = 1)\big] - \mathbb{E}\big[Y \mid \operatorname{do}(X = 0)\big]

AI 应用场景

电商推荐系统的因果评估

阶段:模型评估与决策

解决的问题:历史日志里“点击推荐位→购买”的关联被用户偏好这个混杂因素污染——本来就想买的用户更容易点击也更容易下单。传统相关性分析会高估推荐位效果,导致错误扩大弹窗范围。用干预操作模拟“强制展示推荐位”do(展示=1),才能得到真实的增量转化。

具体案例:某电商平台想评估“首页弹窗推荐”对转化率的影响。直接用日志回归得系数1.8,看似效果极佳;改用SCM干预模拟与在线A/B实验后,真实因果效应只有0.7。团队据此收窄了弹窗范围,反而提升了用户体验与整体GMV。

临床观察性研究的去偏

阶段:因果推断与证据生成

解决的问题:电子病历中“使用新药→恢复更快”的关联,受到病情严重程度这个混杂因素影响——重症患者更可能用新药,但恢复也更慢。医生真正需要的是P(Y|do(用药)),即“如果我强制所有患者用药,恢复率会怎样”,而不是观察到的相关性。

具体案例:某医学AI团队分析降压药疗效时,按年龄、并发症、基础血压分层做后门调整,发现观察效应被高估了20%。调整后的结论被采纳进临床指南修订,避免了过度用药风险。

出行平台的动态定价仿真

阶段:策略仿真与决策支持

解决的问题:价格与订单量的历史关联受季节、天气、竞品活动等多重混杂影响。直接看“涨价时订单降了多少”,会把天气的影响算到价格头上。用SCM干预模拟“强制上调峰时价格20%”的do操作,能独立评估价格弹性的真实大小。

具体案例:某出行平台上线新定价策略前,先用干预模拟估算ATE:强制涨价20%后订单量下降约8%,但客单价提升带来整体营收增长3.5%。数据支撑了策略分城市灰度上线的决策。

Python 演示

python37 行
import numpy as np np.random.seed(42) def gen_observed(n=8000):    # 观察模式: X 受混杂 Z 影响, 再影响 Y    z = np.random.normal(0, 1, n)    x = 0.8 * z + np.random.normal(0, 0.6, n)    y = 0.9 * x + 0.6 * z + np.random.normal(0, 0.5, n)    return x, y, z def gen_intervention(x_fixed, n=8000):    # 干预模式: do(X=x_fixed), 切断 Z 到 X 的依赖    z = np.random.normal(0, 1, n)    x = np.full(n, x_fixed)    y = 0.9 * x + 0.6 * z + np.random.normal(0, 0.5, n)    return x, y, z def ols(x, y):    # 一元线性回归斜率: 估计 X 每变化一个单位 Y 的变化量    xc = x - x.mean()    return np.dot(xc, y - y.mean()) / np.dot(xc, xc) n = 8000x_obs, y_obs, _ = gen_observed(n)slope_obs = ols(x_obs, y_obs)print("观察数据的回归斜率: %.3f" % slope_obs)print("真实因果效应(结构系数): 0.900") means = []for x0 in [0.0, 1.0, 2.0, 3.0]:    x_int, y_int, _ = gen_intervention(x0, n)    means.append((x0, y_int.mean()))    print("do(X=%.1f) 时 Y 的均值: %.3f" % (x0, y_int.mean())) ate = means[1][1] - means[0][1]print("由 do 实验估计的 ATE: %.3f" % ate)
目的:模拟一个带混杂Z的SCM(Z→X、Z→Y、X→Y),对比“观察回归斜率”与“干预实验估计的因果效应”,直观展示混杂导致的偏差。
  1. x = 0.8 * z + np.random.normal(0, 0.6, n)这就是X的结构方程:由父节点Z和噪声生成,观测模式下X不是“自主行动”的。
  2. y = 0.9 * x + 0.6 * z + np.random.normal(0, 0.5, n)Y的剧本同时写入了X和Z的台词,0.9是X对Y的真实因果系数。
  3. def gen_intervention(x_fixed, n=8000):这个函数对应干预后的模型M_x:X被外部固定,不再由Z生成。
  4. x = np.full(n, x_fixed)手术刀落地的一行:X的方程被常数赋值替换,等价于do(X=x_fixed)。
  5. slope_obs = ols(x_obs, y_obs)观察回归斜率混入了Z的功劳,通常会高于真实因果系数0.9。
  6. ate = means[1][1] - means[0][1]用两次do实验的Y均值之差估计ATE,消除了混杂Z的干扰。

常见误区

误区我跑了个线性回归,X的斜率就是X对Y的影响吧?系数大就意味着因果作用强,直接拿去写汇报。

正解回归只是在观测数据里“挑出X相同的样本比Y”,混杂因素会把别人的功劳记在X头上。就像观众看到A和B同台就以为A带热了B,却没看见C在幕后递暗号。要得到因果系数,必须用do干预或后门调整,而不是直接解释回归斜率。

为何常见:因为课堂上常讲“控制变量回归”,让人误以为控制得变量越多就越接近因果,忽略了未观测混杂的存在。

误区do(X=x)不就是看X=x的那部分样本吗?从历史数据里筛一筛不就行了,何必搞什么干预实验。

正解P(Y|X=x)是“挑样本”,do(X=x)是“改系统”。前者保留了X原本的父节点影响,后者把X的父节点一刀剪断、方程换成常数。区分二者的关键是:X的取值是“被看见的”还是“被强制的”。导演喊“卡”改戏,和观众记录某一场戏,完全是两回事。

为何常见:两者的记号太像了,且在没有混杂时数值恰好相等,初学者很容易把“筛选历史”和“修改机制”混为一谈。

误区干预X之后,X跟别的变量的关系都变了,干脆把整个模型全部重写一遍,所有方程都换成新的。

正解手术刀只落在X身上:只切断X的入边、替换X的方程。其他变量的结构方程原封不动,否则就破坏了“看其他变量如何响应”的意义。就像改剧本只改A的戏,B的戏照旧,才能看出A的变化对B产生的影响。全部推翻,因果链条就断了。

为何常见:把“观测到的数据变了”误当成“生成机制变了”,没有区分变量取值的变化与系统结构的变化。

误区干预之后Z→X的边切断了,那实验数据里X和Z应该完全独立,相关系数一定是0。

正解机制上的依赖被切断,不代表有限样本里的相关系数为0。干预后X来自常数赋值,它和Z不再有因果依赖,但随机波动下仍可能算出非零的样本相关。相关性是统计表象,因果图描述的是机制。导演把A的台词固定后,A和C偶尔同时出现也只是巧合,不代表C还能影响A。

为何常见:混淆了“机制上的独立”与“统计上的独立”,SCM关心的是机制而不是单纯的相关系数。

面试题

Q1. 在SCM中,干预操作do(X=x)的核心动作是什么?

单选题 · easy

  • A.保留X自身的全部入边依赖
  • B.改为常数赋值且切断全部入边← 正确答案
  • C.仅删除X的全部出边而不动入边
  • D.对X执行多次随机采样处理

答案:B。do(X=x)的本质是“手术式修改”:把X的结构方程替换成常数x,同时切断所有指向X的入边。这就像导演把主角的反应剧本烧掉、换上一张固定台词的便签。A保留了入边,C删错了方向,D只是采样而非干预。

Q2. 观察概率P(Y|X)与干预概率P(Y|do(X))的关系是?

单选题 · easy

  • A.两者在数学上永远恒相等
  • B.存在混杂时通常不相等← 正确答案
  • C.观察的概率等于干预概率
  • D.干预等于所有条件概率之和

答案:B。观察是观众记账,干预是导演改戏。存在混杂因素Z同时影响X和Y时,P(Y|X)会把Z的功劳算在X头上,所以与P(Y|do(X))不等。A和C忽略了混杂,D混淆了求和与干预。

Q3. 结构因果模型SCM三元组(U, V, F)中,F表示什么?

单选题 · easy

  • A.描述机制的结构方程集合← 正确答案
  • B.观测数据的分布函数
  • C.因果图中的全部节点集合
  • D.模型训练时的损失函数

答案:A。SCM = (U, V, F)中,U是外生变量,V是内生变量,F是结构方程集合——每位演员的“反应剧本”。V描述变量集合但不含函数关系,损失函数是机器学习概念,与SCM的结构方程不是一回事。

Q4. 截断因子分解的核心操作是什么?

单选题 · mid

  • A.删除X的因子而其余不变← 正确答案
  • B.保留X的因子且替换常数
  • C.删除所有变量的概率因子
  • D.只保留外生变量的因子项

答案:A。干预后X变成无父节点的常数,所以联合分解中X的条件概率因子被删除,其余变量的因子原样相乘并把X代入x。B保留X因子是错误的,C把所有因子删光就失去了分布信息,D只保留外生变量也不对。

Q5. 后门调整公式的适用条件是什么?

单选题 · mid

  • A.找到阻断全部后门路径的集合← 正确答案
  • B.变量集中必须包含X的后代
  • C.变量集需要包含全部内生变量
  • D.不需要任何额外的前提条件

答案:A。后门准则要求找到一个变量集Z,它能阻断X到Y的所有后门路径,且不含X的后代。这样按Z分层再加权平均,才能得到无偏的因果效应。B会引入新的偏差,C过度控制可能错误阻断因果路径,D无视了混杂的存在。

Q6. 混杂因素的典型特征是什么?

单选题 · mid

  • A.同时影响X和Y且不被二者影响← 正确答案
  • B.只影响X但完全不影响Y
  • C.是X的直接后继后代节点
  • D.与Y在分布上完全独立

答案:A。混杂因素必须满足:同时影响处理X和结果Y,且不在X→Y的因果路径上。它就像幕后递暗号的导演助理,既影响主角又影响配角。B只影响X不会造成混杂,C是X的后代反而应被控制,D与Y独立就无法干扰因果效应。

Q7. “手术式修改”在SCM干预中指的是什么?

单选题 · mid

  • A.修改X的全部出边连接
  • B.删除X入边且方程替换为常数← 正确答案
  • C.为因果图增加观测边
  • D.对X重新执行采样数据

答案:B。手术式修改对应do算子的两个动作:删掉指向X的入边(剪断依赖)、把X的方程替换为常数(固定取值)。只改出边方向反了,增加观测边是观察而非干预,重新采样没有改变生成机制。

Q8. 关于条件概率与干预概率的区别,下列说法正确的有?

多选题 · hard

  • A.P(Y|X)本质是对历史数据筛选← 正确答案
  • B.P(Y|do(X))是对系统结构的修改← 正确答案
  • C.无混杂时两者数值可能相等← 正确答案
  • D.两者在数学上永远完全等价

答案:ABC。P(Y|X)是“筛出X=x的样本看Y”,P(Y|do(X))是“强制X=x后观察Y”。两者在有混杂时不等,无混杂时恰好相等,所以A、B、C正确。D说“永远等价”忽略了混杂存在的普遍性。

Q9. 干预操作do(X=x)会改变以下哪些内容?

多选题 · hard

  • A.X自身的结构方程定义← 正确答案
  • B.因果图中指向X的入边← 正确答案
  • C.所有其他变量的结构方程
  • D.外生变量U的分布函数

答案:AB。手术刀只落在X身上:X的方程被常数替换(A对),指向X的入边被剪断(B对)。其他变量的方程原样保留(C错),外生变量的分布也不变(D错)——否则就破坏了“观察X变化如何传导”的因果链条。

Q10. 关于截断因子分解的分析,下列说法正确的有?

多选题 · extreme

  • A.将X的因子替换为常数单位项← 正确答案
  • B.X的后代因子的结构方程被修改
  • C.干预后X的取值固定为给定x← 正确答案
  • D.可简化为所有非X变量的因子积← 正确答案

答案:ACD。截断因子分解中,X的因子P(x|pa_X)被删除,等价于替换为单位常数(A对);X固定为x(C对);剩下的因子恰好是所有非X变量的条件概率乘积(D对)。但X的后代(如Y)的结构方程并未修改,只是方程里的X被代入了x(B错)。