想象你是一座超大城市的交通信息中心主任。整座城市的路网由无数路口和单行道组成,你关心的是两个城区之间的车流是否存在“隐秘联动”。有些路口装着摄像头,你能实时知道那里的车流;有些路口则完全未知。假如你已经掌握了中间某个路口 Z 的完整数据,A 城区堵不堵,往往就再也无法推测 C 城区的状况——信息被 Z 截断了。但还有一种奇怪的路口:两条单行道同时汇入它,平时 A 和 C 互不相通;一旦你盯住这个路口看,反而会出现一种“虚假的联动”。这套判断信息通路何时被截断、何时被打通的规则,就是因果推断中的 d-分离准则。

岗位关联

掌握 d-分离准则,你就拥有了在复杂变量关系中“该控制谁、不该控制谁”的交通地图,是因果效应估计与可解释 AI 工程中不可或缺的基础能力。

目录
  1. 可视化演示
  2. 核心概念:条件独立与 d 分离
  3. 三种结构:链式、分叉、对撞
  4. 阻断与激活:路径的开关条件
  5. 判定算法:三步判定 d 分离
  6. do演算角色:从观察到干预
  7. 实践应用:变量选择与可解释AI
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示DAG中链式、叉因子、对撞三种结构的路径阻断规则,通过条件化节点的开闭演示d-分离判定核心机制。

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

链式结构 X→M→Y 信息传递:X经M间接影响Y路径活跃时X与Y相关 条件化M:阻断X到Y的信息流X与Y条件独立 阻断标记:红色叉号表示该节点被条件化 P(X,Y|M) = P(X|M)P(Y|M) 链式结构条件化中间节点M即可实现d-分离

核心概念:条件独立与 d 分离

回到交通信息中心。你盯着一张城市路网图,想知道“A 城区堵车”和“C 城区堵车”之间到底有没有关联。如果两个城区之间根本没有任何道路相连,当然互不影响;但如果有一条路穿过中转路口 Z,而从摄像头里你又恰好能看到 Z 的实时车流,那么 A 和 C 的联动就被 Z “解释”掉了——知道了 Z,A 的信息就不再对预测 C 有帮助。交通局把这个叫做“信息被阻断”,因果推断里把它称为条件独立。

在因果图中,节点是变量,箭头表示因果方向,这样的图被称为有向无环图(DAG)。路径则是一条不考虑方向的连续连线。d-分离准则回答的问题正是:给定一组已观测变量 Z 之后,X 和 Y 之间是否还存在一条能让“信息流”通过的路径。如果所有路径都被阻断,我们就说 X 和 Y 在给定 Z 下 d-分离,写成 \(X \perp\!\!\!\perp Y \mid Z\)。

所以 d-分离不是“绝对无关”,而是“给定 Z 后的无关”。这一点就像交通中心的经验:只要中间检查站的数据在手,两个远端城区就不再互相提供新情报。

---

X⊥ ⁣ ⁣ ⁣⊥Y∣Z⟺P(X,Y∣Z)=P(X∣Z) P(Y∣Z)X \perp\!\!\!\perp Y \mid Z \quad \Longleftrightarrow \quad P(X, Y \mid Z) = P(X \mid Z)\,P(Y \mid Z)
意思是:在已知 Z 的信息时,X 的分布和 Y 的分布可以拆开来看,彼此不再纠缠。
  1. 独立符号\(X \perp\!\!\!\perp Y\) 表示 X 与 Y 在概率上互不影响,好比两个城区之间没有可通行的道路。
    X⊥ ⁣ ⁣ ⁣⊥YX \perp\!\!\!\perp Y
  2. 条件竖线\(\mid Z\) 表示“已知 Z 的数据之后”,相当于你已经看到 Z 路口的监控画面。
    ∣Z\mid Z
  3. 联合分布拆分等式说明在 Z 条件下,X 和 Y 的联合概率可以拆成两个边缘概率的乘积,这正是“知道 X 也无法改变 Y 分布”的数学表达。
    P(X,Y∣Z)=P(X∣Z) P(Y∣Z)P(X, Y \mid Z) = P(X \mid Z) \, P(Y \mid Z)

三种结构:链式、分叉、对撞

路网虽然复杂,但任意一条局部通路都可以归结为三种基本“路口形态”。第一种是链式:车流从 X 出发,经过 Z,再到达 Y,像是单行道一路到底。第二种是分叉:Z 是一个中心枢纽,向两侧分别通向 X 和 Y,像是城市主干道分流到两个卫星城。第三种是对撞:X 和 Y 两条单行道同时汇入 Z,Z 像一个事故多发路口,平时两方向的车流到达 Z 后各自停下,互不相通。

这三种结构决定了“何时阻断”的直觉。链式和分叉中,Z 是中间节点;一旦 Z 被观测,X 与 Y 之间的通路就被切断。对撞结构则恰好相反:当 Z 未被观测时,通路天然阻断;一旦我们盯住 Z 看,反而会激活一条虚假通路。

判断对撞节点的口诀是:在一条路径上,如果某个节点同时有两条箭头指向它,它就是对撞节点。它不是“检查站”,而是“交汇事故点”——越盯着它看,越容易把本不相干的两件事联系到一起。

---

链式:X→Z→Y  ⇒  X⊥ ⁣ ⁣ ⁣⊥Y∣Z分叉:X←Z→Y  ⇒  X⊥ ⁣ ⁣ ⁣⊥Y∣Z对撞:X→Z←Y  ⇒  X⊥ ⁣ ⁣ ⁣⊥Y  (无条件),X⊥̸ ⁣ ⁣ ⁣⊥Y∣Z\begin{aligned}\text{链式} &: X \rightarrow Z \rightarrow Y \;\Rightarrow\; X \perp\!\!\!\perp Y \mid Z \\\text{分叉} &: X \leftarrow Z \rightarrow Y \;\Rightarrow\; X \perp\!\!\!\perp Y \mid Z \\\text{对撞} &: X \rightarrow Z \leftarrow Y \;\Rightarrow\; X \perp\!\!\!\perp Y \;(\text{无条件}), \quad X \not\perp\!\!\!\perp Y \mid Z\end{aligned}
前两种结构“观察中间点就阻断”,第三种结构“观察汇合点反而打开”。
  1. 链式结构信息沿单一方向流动,Z 是必经中转站,观测 Z 后 X 和 Y 之间没有剩余通路。
    X→Z→YX \rightarrow Z \rightarrow Y
  2. 分叉结构Z 是共同原因,向两侧辐射;已知 Z 的值后,两侧结果只由 Z 决定,彼此独立。
    X←Z→YX \leftarrow Z \rightarrow Y
  3. 对撞结构两个箭头同时指向 Z,Z 是共同结果;无条件时这里是一个“死胡同”,条件化后反而出现虚假相关。
    X→Z←YX \rightarrow Z \leftarrow Y

阻断与激活:路径的开关条件

现在交通中心要出台一份“检查站设置手册”:给定一个条件变量集合 Z,哪些操作会阻断一条路径?规则可以浓缩成一句生活经验——中间节点设卡必断,对撞节点不设卡必断,反过来就会激活。

更严谨地说,对于路径上任意连续三个节点 A、B、C,我们需要判断 B 是否是“信息关卡”。如果 B 不是对撞节点,那么只要 B 被条件化(进入 Z),这段路就封死。如果 B 是对撞节点,那么只要 B 没有被条件化,并且 B 的所有后代也都没有被条件化,这段路同样封死。反过来,若对撞节点 B 或其某个后代被观测到,路径就会被打通,产生虚假关联。

这套规则最反直觉的地方在于“后代节点”的作用。比如对撞节点 Z 是“考试成绩”,它的后代 W 是“是否获奖”。只要我们在模型中控制了 W,哪怕没有直接控制 Z,也等于间接掌握了 Z 的信息,对撞路径会被激活。交通中心把这个现象称为“隔代摄像头效应”。

---

blocked((A,B,C)∣Z)={True,B 非对撞且 B∈ZTrue,B 是对撞且 B∉Z 且 desc⁡(B)∩Z=∅False,其他情况\mathrm{blocked}((A,B,C) \mid Z) =\begin{cases}\mathrm{True}, & B \text{ 非对撞且 } B \in Z \\\mathrm{True}, & B \text{ 是对撞且 } B \notin Z \text{ 且 } \operatorname{desc}(B) \cap Z = \varnothing \\\mathrm{False}, & \text{其他情况}\end{cases}
一条路径只要被任意一个三节点组合判断为阻断,整条路径就断了。
  1. 中间节点入条件集非对撞节点一旦成为已知信息,等同在道路中途设检查站,车辆无法通过。
    B∈ZB \in Z
  2. 对撞节点不在条件集对撞节点没有被观测,且它的子孙也没有被观测,这段“事故路口”就保持封闭。
    B∉Z  ∧  desc⁡(B)∩Z=∅B \notin Z \;\land\; \operatorname{desc}(B) \cap Z = \varnothing
  3. 路径打开既不是中间节点被观察,也不是封闭的对撞路口,信息就可以顺利通过。
    blocked=False\mathrm{blocked} = \mathrm{False}

判定算法:三步判定 d 分离

有了规则就要有流程。交通中心判定“X 和 Y 之间是否还存在信息通路”时,会派出三组分析员:第一组负责把所有可能路线都列出来;第二组在地图上标记所有对撞路口;第三组拿着条件变量清单 Z,逐条路线检查是否被阻断。

算法的核心是:只要存在一条未被阻断的路径,X 和 Y 就不 d 分离;只有当所有路径都被阻断时,d 分离才成立。这也体现了 d 分离名字中的“分离”——把所有路都封死,两者才算真正隔离。

这个算法看起来繁琐,却很机械,适合写成程序。实际工程中,你只需要在因果图上运行一次这样的路径检查,就能决定哪些变量应该进入调整集,哪些变量碰都不能碰。

---

X⊥ ⁣ ⁣ ⁣⊥GY∣Z  ⟺  ∀p∈Paths(X,Y):  blocked(p∣Z)X \perp\!\!\!\perp_G Y \mid Z \;\Longleftrightarrow\; \forall p \in \mathrm{Paths}(X, Y): \; \mathrm{blocked}(p \mid Z)
全称量词 \(\forall\) 强调“每一条路都要堵死”,只要漏掉一条,信息就可能穿越。
  1. 路径集合\(\mathrm{Paths}(X, Y)\) 是 X 到 Y 之间的所有无向通路,类似地图上所有可选的行车路线。
    Paths(X,Y)\mathrm{Paths}(X, Y)
  2. 单条路径\(p\) 表示其中一条路线,比如 \(X \to A \to B \to Y\)。
    pp
  3. 阻断判断\(\mathrm{blocked}(p \mid Z)\) 表示在条件集 Z 下该路径是否被检查站切断。
    blocked(p∣Z)\mathrm{blocked}(p \mid Z)
  4. 全称量化\(\forall\) 要求每条路径都必须被阻断,这样 X 和 Y 才在给定 Z 下 d 分离。
    ∀p\forall p

do演算角色:从观察到干预

交通信息中心不能只“看数据”,偶尔还得“做实验”:比如强制把 A 城区的部分道路改成单行,观察 C 城区的拥堵变化。这种强制操作在因果推断里写作 \(do(X=x)\),意思是“干预 X,让它取值为 x”,而不是被动地观察 X。观察和干预的区别,就像“看到下雨”和“人工降雨”的区别——前者是自然的,后者是你主动改变的。

d-分离准则在 do-演算中的核心作用是识别后门路径。所谓后门路径,是指从 X 出发,先经过一条指向 X 的边,再通到 Y 的路径。这条路径不是 X 到 Y 的因果主路,而是混杂因素打开的后门。为了估计 \(P(Y \mid do(X=x))\),我们需要找到一个调整集 Z,用 d-分离判断它是否阻断了所有后门路径,然后用后门公式计算:

除了后门准则,还有前门准则:当 X 与 Y 之间存在中间变量 Z,且后门路径无法完全阻断时,可以通过 Z 做两步估计。前门路径形如 \(X \rightarrow Z \rightarrow Y\),Z 是因果链条上的中间站:

d-分离准则在这里扮演“质检员”:后门准则要靠它确认路径阻断是否彻底,前门准则要靠它确认中间变量是否真正隔离了其他混杂通道。没有 d-分离,do-演算就像没有路况信息的交通管制,只能凭直觉封路。

---

P(Y∣do(X=x))=∑zP(Y∣X=x,Z=z) P(Z=z)P(Y \mid do(X=x)) = \sum_{z} P(Y \mid X=x, Z=z) \, P(Z=z)
前门策略好比:虽然不能直接控制 X,但可以观测 X 影响的中间站 Z,再通过 Z 推算 Y 的变化。
  1. 中间变量 ZZ 是 X 影响 Y 的唯一桥梁,没有其他路径绕过它。
    X→Z→YX \rightarrow Z \rightarrow Y
  2. 第一层求和先估计在干预 X=x 时 Z 的分布变化。
    P(Z=z∣X=x)P(Z=z \mid X=x)
  3. 第二层求和再用无干预的历史数据 \(P(Y \mid X=x', Z=z)\) 和 \(P(X=x')\) 加权,得到 Y 在 Z=z 下的平均响应。
    ∑x′P(Y∣X=x′,Z=z) P(X=x′)\sum_{x'} P(Y \mid X=x', Z=z) \, P(X=x')

实践应用:变量选择与可解释AI

交通中心把 d-分离准则写进了日常工作手册,因为它能直接回答一个最现实的问题:建模时该控制哪些变量? 统计学习常用“多控制几个变量更稳妥”的思路,但在因果推断中,控制错误的变量反而会打开对撞路径,制造虚假相关。d-分离给出了精确的筛选条件:

在实际 AI 工程中,这套准则至少有三个落地点:第一,特征工程阶段用它挑选调整变量,避免把对撞节点或中介变量一股脑塞进模型;第二,模型验证阶段用它检查结构方程是否符合领域知识;第三,可解释 AI 阶段用它为归因结果把关,保证“特征 A 导致预测 B”的解读不是来自虚假相关。这就像交通中心最终把检查站布置图变成了一套标准作业流程——d-分离,就是这条路网的“红绿灯逻辑”。

---

调整集 Z 合法  ⟺  Z∩Desc⁡(X)=∅且Z 阻断所有后门路径\text{调整集 } Z \text{ 合法} \iff Z \cap \operatorname{Desc}(X) = \varnothing \quad \text{且} \quad Z \text{ 阻断所有后门路径}
好的调整集既不能包含 X 的后代,又必须封死所有后门通路。
  1. 不含后代\(Z \cap \operatorname{Desc}(X) = \varnothing\) 表示调整集里不能出现被 X 影响的变量,否则相当于在因果链上开了后门。
    Z∩Desc⁡(X)=∅Z \cap \operatorname{Desc}(X) = \varnothing
  2. 阻断后门路径所有从 X 反向出发再通向 Y 的路径都要被 Z 切断,这是 d-分离准则的直接应用。
    后门路径:X←⋯→Y\text{后门路径}: X \leftarrow \cdots \rightarrow Y
  3. 合法调整满足上述条件后,才能用后门公式无偏估计因果效应。
    P(Y∣do(X=x))=∑zP(Y∣X=x,Z=z)P(Z=z)P(Y \mid do(X=x)) = \sum_z P(Y \mid X=x, Z=z) P(Z=z)

AI 应用场景

场景一:电商促销的混杂因子控制

阶段:特征工程 / 因果效应估计

解决的问题:平台想估计“发放优惠券 X”对“复购率 Y”的真实因果效应。传统做法会把用户年龄、历史购买金额等变量全部加入回归模型,但“历史购买金额”可能是优惠券和复购的共同结果(对撞节点),控制它反而会打开虚假关联。

具体案例:某电商平台的增长团队用 d-分离准则画出用户行为因果图,发现“历史购买金额”是对撞节点,剔除该变量后,仅保留“用户年龄段”和“活跃天数”作为调整集,优惠券的因果效应估计值比全变量模型下降了 18%,经 AB 实验验证更接近真实值。

场景二:信贷模型的因果结构验证

阶段:模型验证 / 可解释性分析

解决的问题:风控模型中“学历 X”与“违约 Y”表现出强相关,但两者之间可能存在后门路径,例如“家庭收入 Z”同时影响学历和违约。若不阻断后门路径,模型学到的可能只是混杂假象。

具体案例:某消费金融公司用 d-分离检查候选特征集,发现“是否通过初审”是对撞节点(取决于模型打分和人工审核),将其从解释变量中移除后,学历的边际贡献显著下降,最终确认学历主要通过收入间接影响违约,而不是独立风险因子。

场景三:推荐系统AB实验的后门调整

阶段:实验分析 / 因果推断

解决的问题:推荐算法上线后,直接对比实验组和对照组会发现“用户年龄”同时影响“是否看到新推荐”和“点击率”,造成混淆。后门准则要求用 d-分离选择年龄等变量做加权调整。

具体案例:某短视频平台在推荐策略实验中,使用后门调整公式对年龄和活跃时段做分层加权,得到的点击率提升幅度比朴素对比高出约 0.6 个百分点,帮助团队确认新策略真实有效。

Python 演示

python60 行
def is_d_separated(edges, X, Y, cond):    """判断 X 和 Y 在满足条件集 cond 时是否 d 分离.    edges 是 (parent, child) 列表, 构成有向无环图.    """    edge_set = set(edges)    undirected = {}    for a, b in edges:        undirected.setdefault(a, []).append(b)        undirected.setdefault(b, []).append(a)     def descendants(node):        seen = set()        stack = [node]        while stack:            m = stack.pop()            for child in undirected.get(m, []):                if (m, child) in edge_set and child not in seen:                    seen.add(child)                    stack.append(child)        return seen     def find_paths(cur, target, visited, path):        if cur == target:            yield path            return        for nxt in undirected.get(cur, []):            if nxt not in visited:                yield from find_paths(nxt, target, visited | {nxt}, path + [nxt])     def blocked(path):        cond_set = set(cond)        for i in range(len(path) - 2):            a, b, c = path[i], path[i + 1], path[i + 2]            is_collider = (a, b) in edge_set and (c, b) in edge_set            if is_collider:                if b not in cond_set and not (descendants(b) & cond_set):                    return True            else:                if b in cond_set:                    return True        return False     if X == Y:        return False    paths = list(find_paths(X, Y, {X}, [X]))    return all(blocked(p) for p in paths) if paths else True  if __name__ == "__main__":    chain = [("X", "Z"), ("Z", "Y")]    fork = [("Z", "X"), ("Z", "Y")]    collider = [("X", "Z"), ("Y", "Z")]    collider_desc = [("X", "Z"), ("Y", "Z"), ("Z", "W")]     print(is_d_separated(chain, "X", "Y", {"Z"}))     # True    print(is_d_separated(chain, "X", "Y", set()))      # False    print(is_d_separated(fork, "X", "Y", {"Z"}))       # True    print(is_d_separated(collider, "X", "Y", set()))   # True    print(is_d_separated(collider, "X", "Y", {"Z"}))   # False    print(is_d_separated(collider_desc, "X", "Y", {"W"}))  # False
目的:用枚举路径的方式实现 d-分离判定,覆盖链式、分叉、对撞及其后代节点四种典型场景。
  1. undirected.setdefault(a, []).append(b)把有向边变成无向邻接表,因为路径查找需要双向遍历。
  2. yield from find_paths(...)递归生成 X 到 Y 的所有简单路径,等价于列出所有可行路线。
  3. is_collider = (a, b) in edge_set and (c, b) in edge_set判断三连节点中 B 是否同时被两条箭头指向,这是对撞识别的核心。
  4. if b not in cond_set and not (descendants(b) & cond_set): return True对撞节点未被观测且后代也未被观测时,路径阻断成立。
  5. return all(blocked(p) for p in paths)所有路径都被阻断才返回 True,正是“全阻断才 d 分离”的算法体现。

常见误区

误区做因果分析时我习惯把所有能测的变量都放进回归模型,觉得这样能排除所有干扰,控制得越多越干净。

正解在 d-分离的世界里,盲目控制会让原本阻断的路径“复活”。比如 X→Z←Y 中,把 Z 加进模型,反而让 X 和 Y 产生虚假关联。正确的做法是先画因果图,分辨中间节点与对撞节点,再决定进入调整集。

为何常见:来自统计回归的传统直觉——“加协变量能减少偏差”,但因果推断中协变量的选择必须服从结构规则。

误区我知道 X→Z←Y 是对撞结构,不直接控制 Z 就行。但我还会顺手控制“Z 的某个后代 W”,感觉这样没有碰到 Z,应该没问题。

正解规则明确指出,对撞节点的任意后代被条件化同样会激活路径。因为后代携带了 Z 的信息。例如 Z 是考试总分、W 是是否获奖,控制 W 就间接看到了 Z,能力与运气之间仍会出现虚假相关。

为何常见:初学者只记住了三节点的对撞图,忽略了“后代入条件集”这一等价形态。

误区如果 X 和 Y 是 d 分离的,那它们之间的皮尔逊相关系数一定是 0,画散点图应该完全看不出关系。

正解d 分离对应的是概率分布层面的条件独立,而有限样本的相关系数会有抽样波动;在真实非忠实分布中,即使 d 分离也可能出现微小相关。正确表述是:在忠实于 DAG 的分布中,d 分离蕴含条件独立。

为何常见:混淆了理论分布与样本统计量,把“结构独立”与“数据不相关”划等号。

误区后门调整就是拿 P(Y|X,Z) 和 P(Z) 乘一乘再求和,公式摆在那里,把数据代进去就算完了。

正解公式成立的前提是调整集 Z 满足两个条件:不包含 X 的后代,且阻断所有后门路径。如果调整集挑错了,加权求和的结果依然有偏。d-分离是“验渣”环节,跳过它直接套公式等于不检查路障就放行。

为何常见:把注意力放在公式上,忽略了公式前“满足后门准则”这一前提条件。

面试题

Q1. 以下哪种结构在无条件时本身就阻断 X 和 Y 的通路?

单选题 · easy

  • A.链式:X→Z→Y
  • B.分叉:X←Z→Y
  • C.对撞:X→Z←Y← 正确答案
  • D.混合:X→Z→W→Y

答案:C。链式和分叉在无条件时路径是连通的,只有对撞结构在 Z 处“两箭相向”,无条件时天然阻断。就像两条路汇入同一路口,只要不盯着路口看,两边的车流其实互不相干。

Q2. 给定条件集 {Z} 时,链式结构 X→Z→Y 中 X 和 Y 的关系是?

单选题 · easy

  • A.必然有强相关
  • B.d 分离成立← 正确答案
  • C.X 是 Y 的唯一原因
  • D.完全无法判断

答案:B。Z 是链式结构的中间节点,被观测后信息通路被切断,X 与 Y 在给定 Z 下条件独立,即 d 分离成立。这相当于中间检查站掌握了车流数据,两端就不再互相提供新信息。

Q3. 分叉结构 X←Z→Y 中,要阻断 X 与 Y 的信息通路,正确的做法是?

单选题 · easy

  • A.不控制任何变量
  • B.控制变量 Z← 正确答案
  • C.只控制变量 X
  • D.只控制变量 Y

答案:B。分叉结构中 Z 是共同原因,像主干道向两个卫星城分流。一旦知道 Z 的取值,两侧支路的信息就彼此独立,所以控制 Z 就能阻断通路。

Q4. 对撞结构 X→Z←Y 中,要让 X 与 Y 出现虚假关联,正确的做法是?

单选题 · mid

  • A.控制变量 X
  • B.控制变量 Y
  • C.什么都不控制
  • D.控制 Z 或其后代变量← 正确答案

答案:D。对撞结构无条件时阻断,一旦条件化 Z(或其后代),就会打开虚假通路。“事故路口”越盯着看,越容易把左右两边的车流错误地联系起来。

Q5. 下列哪些情况会使因果图中的一条通路被阻断?

多选题 · mid

  • A.中间节点被条件化← 正确答案
  • B.对撞节点未被条件化← 正确答案
  • C.对撞节点被条件化
  • D.对撞节点的后代被条件化

答案:AB。中间节点入条件集等于设卡;对撞节点未被条件化且后代未被条件化时保持天然阻断。C 和 D 会激活对撞路径,属于“打开”而不是“阻断”。

Q6. 若 X ⟂ Y | Z 成立,最准确的描述是?

单选题 · mid

  • A.给定 Z 后 X 与 Y 条件独立← 正确答案
  • B.给定 Z 后 X 与 Y 完全无关系
  • C.X 与 Y 之间不存在任何路径
  • D.X 是 Y 的唯一决定因素

答案:A。d 分离对应条件独立,只说明在给定 Z 后 X 不提供关于 Y 的额外信息,并不代表两者“完全无关系”或图中没有路径。就像两个城区仍有路相连,只是中间检查站 Z 把信息截断了。

Q7. 后门准则要求调整集 Z 必须满足哪些条件?

多选题 · hard

  • A.不包含 X 的后代← 正确答案
  • B.阻断所有后门路径← 正确答案
  • C.包含 Y 的所有祖先
  • D.包含 X 的全部祖先

答案:AB。后门准则的核心是“不碰 X 后代”和“切断后门路径”。包含 X 或 Y 的祖先都不是必要条件,甚至可能引入多余变量从而打开新的对撞路径。

Q8. 后门调整对应的公式是哪一项?

单选题 · mid

  • A.P(Y|do(X)) = Σ_z P(Y|X,Z)P(Z)← 正确答案
  • B.P(Y|do(X)) = P(Y|X)
  • C.P(Y|do(X)) = Σ_x P(Y|x)P(x)
  • D.P(Y|do(X)) = P(X|Y)

答案:A。后门公式通过对混杂变量 Z 的加权平均来模拟干预效果。B 忽略了混杂,C 是对 X 加权没有意义,D 只是条件概率的逆写,都不满足因果识别的需求。

Q9. 因果图 X→Z←Y,且 Z→W。若条件集只含 W,X 与 Y 是否 d 分离?

单选题 · extreme

  • A.阻断所有通路
  • B.打开对撞激活虚假相关← 正确答案
  • C.与是否控制无关
  • D.等价于无条件独立

答案:B。W 是对撞节点 Z 的后代,条件于 W 等于间接观测到 Z。此时对撞路径被激活,X 与 Y 不再 d 分离。这说明“隔代控制”也会打开本应封闭的通路。

Q10. d-分离准则在可解释 AI 中的典型应用是?

单选题 · hard

  • A.判断特征的预测重要性
  • B.验证依赖是否符合因果关系← 正确答案
  • C.增加模型参数数量
  • D.对训练数据做数据增强

答案:B。可解释 AI 关心“特征 A 为什么导致预测 B”。用 d-分离可以检查特征之间的关系是否符合先验因果图,例如控制收入后学历与违约是否仍关联,从而区分真实因果与虚假相关。