张家的老宅里挂着一幅族谱。每个人是一个圆点,箭线从父母指向子女。族谱从不画“自己生自己”,也不会画出“儿子生成父亲”这种回头路。真正神奇的是,只要知道一对父母的眼睛颜色,孩子的瞳色就基本被决定了;再往上追问祖父母,反而不会再增加多少信息。这个“父母一旦给定,祖辈信息就失去额外价值”的规律,就是马尔可夫条件。当一张有向无环图(DAG)上的线条和阻断,恰好能如实反映一份概率分布中所有的条件独立性时,我们就说它们兼容。Markov兼容性正是因果图推理的灵魂:有了它,图上的箭头不再只是装饰,而是能够推导因果效应的可靠地图。

岗位关联

对 AI 从业者而言,掌握 Markov 兼容性是理解贝叶斯网络构建、因果效应识别以及可解释模型推理的必备基石,直接关系到你能否从观测数据中做出可靠、可验证的因果判断。

目录
  1. 可视化演示
  2. 节点与边:族谱上的成员关系
  3. 马尔可夫条件:族谱上的遗传法则
  4. d-分离:血缘传播中的隔断
  5. 局部马氏性质:只看父母就够了
  6. I-map与忠实:图与分布互相承诺
  7. 兼容性核心:桥的两端
  8. 应用与拓展:从族谱到因果推断
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示K-means聚类的迭代过程:交替执行分配步骤(将数据点分配到最近质心)和更新步骤(重新计算质心位置),直到聚类收敛。

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

K-means聚类 蓝色簇:数据点分配到最近的质心 绿色簇:质心移动到簇均值位置 J = Σ||x_i - μ_c||²

节点与边:族谱上的成员关系

把张家想象成一个变量家族:每个成员是一个节点,每个有向箭头是“直接影响”。父亲瞳色影响孩子瞳色,孩子瞳色又影响孙辈瞳色。族谱不会循环——你不可能成为自己的祖先。这就是有向无环图的第一眼特征:箭头有方向,且不存在有向环。

在概率建模中,节点代表随机变量,有向边代表两个变量之间可能存在直接作用。一个变量 X 到 Y 的箭头表示“X 的变化可能直接导致 Y 的变化”,但这只是地图上的潜在通道,并不保证两者一定相关——真实关系要靠数据和兼容性来检验。

形式化地,如果存在一条有向边 u→v,称 u 是 v 的直接父节点,v 是 u 的子节点。v 的所有父节点记作 Pa(v)。一个 DAG 可以写成 G=(V,E),V 是变量集合,E 是有向边集合。无环性保证我们可以给节点排一个拓扑序,使每个节点的父节点都排在它前面,这也是后续因子分解的基础。

就像族谱先确定谁是谁的爸妈,DAG 也先把“谁直接依赖谁”钉死在图纸上。有了这张图,我们才有资格问:图谱上的亲缘阻断,真的能对应现实中的特征独立吗?

Pa(v)={u∣u→v}\mathrm{Pa}(v) = \{u \mid u \rightarrow v\}
这条式子只是在翻译族谱:v 的父亲,就是所有画了箭头指向 v 的人。
  1. 父节点集合Pa(v) 表示节点 v 的所有直接父节点组成的集合。
    Pa(v)\mathrm{Pa}(v)
  2. 集合构造花括号内的 u 满足后面竖线后的条件,即 u 必须有一条指向 v 的有向边。
    {u∣u→v}\{u \mid u \rightarrow v\}

马尔可夫条件:族谱上的遗传法则

张家的遗传学发现:孩子的瞳色主要由父亲和母亲决定,至于爷爷是双眼皮还是单眼皮,在已知父母之后,几乎不再提供额外信息。换句话说,给定父辈的特征,孩子与更远的祖辈条件独立。

把这条规律抽象成概率语言,就是马尔可夫条件:给定一个节点的父节点,它与所有非后代节点条件独立。更强大的是,如果每个节点都满足这个局部规则,整个变量集合的联合分布就可以拆成“小块”的乘积——每个节点只和它的父节点一起出现。

这个拆法被称为有向因子分解,也是 Markov 兼容性的核心定义:

有了这条“遗传法则”,族谱上的箭头不再只是名字的连线,而是概率计算的装配说明。接下来要回答的是:图上哪些隔断能真正被数据验证?这就引出了 d-分离。

P(X1,…,Xn)=∏v∈VP(Xv∣Pa(Xv))\displaystyle P(X_1,\dots,X_n)=\prod_{v\in V} P(X_v \mid \mathrm{Pa}(X_v))
“整个家族的联合分布,等于每个成员在父母条件下的概率相乘;每个小家庭负责自己的那块,全局由小块拼出。”
  1. 联合分布P(X₁,…,Xₙ) 表示所有变量同时发生的概率,好比全家特征的一个快照。
    P(X1,…,Xn)P(X_1,\dots,X_n)
  2. 累乘符号Π 表示对图中所有节点逐一相乘,一个都不能漏。
    ∏v∈V\prod_{v\in V}
  3. 条件概率块P(X_v | Pa(X_v)) 表示给定父节点之后,该节点的条件概率。
    P(Xv∣Pa(Xv))P(X_v \mid \mathrm{Pa}(X_v))

d-分离:血缘传播中的隔断

族谱中,两个远房亲戚可能通过中间人传递消息。比如三叔认识四叔,四叔认识五叔。如果消息只能经四叔转达,那么只要四叔“闭嘴”,三叔和五叔之间就彻底断了联系。这个中间人就是信息的开关。

DAG 中的变量之间也靠路径传递相关性。给定一个条件变量集合 Z 后,如果所有连接 X 和 Y 的路径都被阻断,我们就说 X 和 Y 在给定 Z 时 d-分离。被阻断的规则有两条:遇到链式 X→Y→Z 或分叉 X←Y→Z,中间节点 Y 一旦被观察到,路径就断了;遇到对撞结构 X→Y←Z,情况恰好相反——Y 不被观察时路径本来就是断的,一旦观察 Y,反而会打通一条新的关联通道。

d-分离之所以重要,是因为它与概率分布之间有一条精确桥梁:如果分布与 DAG 兼容,那么图上 d-分离的两个变量,在现实中必然条件独立。

于是族谱成了侦探手册:只要查一查是否所有传播路径都被中间人阻断,就能预测现实中哪些亲戚该“互不相干”。这正是从图走向因果推断的第一块跳板。

dsepG(X;Y∣Z)  ⟹  X⊥ ⁣ ⁣ ⁣⊥Y∣Z\mathrm{dsep}_G(X;Y \mid Z) \implies X \perp\!\!\!\perp Y \mid Z
这句话的意思是:只要图裁判判定“d-分离”,分布就必须遵守“条件独立”;图上的隔断,在数据中不会失效。
  1. d-分离记号下标 G 表示这个判断完全由图得出,dsep 是 d-separation 的缩写。
    dsepG(X;Y∣Z)\mathrm{dsep}_G(X;Y \mid Z)
  2. 蕴含关系箭头表示充分条件:左边成立,右边一定成立。
      ⟹  \implies
  3. 条件独立X ⊥ Y | Z 读作“给定 Z 时,X 与 Y 独立”。
    X⊥ ⁣ ⁣ ⁣⊥Y∣ZX \perp\!\!\!\perp Y \mid Z

局部马氏性质:只看父母就够了

回到张家,父母一旦出现,爷爷、姥姥、堂兄、表妹——这些非后代的信息都变得多余。但有一个例外:你不能无视自己的儿子。儿子虽然是你的直接关联者,却不属于“非后代”。局部马氏性质圈定的正是这个边界。

形式化:在 DAG 中,任意节点 X_v 与其所有非后代节点,在给定父节点 Pa(X_v) 后条件独立。

这个性质把全局因子分解压缩成一条条局部声明:每个节点只要处理自己的“小家庭”。反过来,把所有这些局部独立拼起来,又能恢复出之前的乘积公式。因此局部马尔可夫性质与全局因子分解是可以互相印证的。

族谱的智慧是“抓大放小”:先管住父母,其他旁系自动退场。这份克制让高维概率计算不再爆炸,也为后续的因果图查询打下了简洁的规则。

Xv⊥ ⁣ ⁣ ⁣⊥NonDesc(Xv)∣Pa(Xv)\displaystyle X_v \perp\!\!\!\perp \mathrm{NonDesc}(X_v) \mid \mathrm{Pa}(X_v)
这是把马尔可夫条件切成最细的局部单元:每个节点只需向父亲“报到”,其他旁支都被隔开。
  1. 当前节点X_v 是图中任意一个节点。
    XvX_v
  2. 非后代集合NonDesc(X_v) 表示所有不在 X_v 后代路径上的节点。
    NonDesc(Xv)\mathrm{NonDesc}(X_v)
  3. 条件集合Pa(X_v) 是父节点集合;竖线右边是条件,表示已经知道了这些变量的取值。
    ∣Pa(Xv)\mid \mathrm{Pa}(X_v)

I-map与忠实:图与分布互相承诺

族谱可能画得粗糙,也可能画得精细。如果族谱上所有“两支不相往来”的判断,在真实的家族特征调查中全都成立,那么这张图就是数据的独立性映射(I-map)。换句话说,图承诺的每一条条件独立,分布都兑现了。

用记号 I(G) 表示图能推出的所有条件独立性,I(P) 表示分布中真实成立的条件独立性。如果 I(G) ⊆ I(P),称 G 是 P 的 I-map;这就是 Markov 兼容性在独立性层次上的表现。

反过来,如果分布中每一条真实独立都能从图上 d-分离出来,就称图是忠实的。忠实性不是马尔可夫兼容性的必要条件,而是更强的假设。两个不同的 DAG 如果蕴含相同的独立性集合,称为 I 等价;这时它们无法仅靠观测数据区分,这也解释了为什么“箭头方向”不是总能从数据中识别。

族谱与家族数据的关系就像协议:兼容性只要求族谱不乱承诺,忠实性则要求数据里每条秘密都写进族谱。从因果推断的实用角度看,I 等价提醒我们:哪怕图与分布兼容,也不代表每条箭头都拥有唯一因果解释。

I(G)⊆I(P)\displaystyle I(G) \subseteq I(P)
图所承诺的独立性,不能超出分布所能兑现的承诺;兼容的图必须言而有信。
  1. 图独立性集合I(G) 是从 d-分离规则中推导出的全部条件独立关系。
    I(G)I(G)
  2. 分布独立性集合I(P) 是真实概率分布中实际成立的条件独立关系。
    I(P)I(P)
  3. 子集关系⊆ 表示左边的每一条结论都包含在右边。
    ⊆\subseteq

兼容性核心:桥的两端

把前面的线索连起来:分布 P 能按 DAG 作因子分解,就称 P 与 G 兼容,也叫 G 是 P 的一个 I-map。这座桥的一端是图拓扑,另一端是概率语义。只要桥存在,d-分离就能翻译成条件独立。

严格说,兼容性保证的是“图→分布”的方向:图中 d-分离蕴含分布中的条件独立。反过来,若想让分布中所有独立都能由图的 d-分离解释,还需要额外加上忠实性假设。在忠实的情况下,I(G)=I(P),桥两端完全对称。

所以 Markov 兼容性是比“完全等于”更轻一点的契约:它只要求图的判断不违约,而不是要求图能解释每一个数据细节。这个契约虽轻,却已经足够支撑 d-分离算法在贝叶斯网络中的全套推理。

这座桥是因果图的“出生证明”:有了兼容性,图上的结构才能作为真实分布的信息压缩,而不只是漂亮的笔画。对研究者而言,判断图与数据是否兼容,是开始所有因果推理之前的第一道安检。

P∼MarkovG  ⟺  P=∏v∈VP(Xv∣Pa(Xv))\displaystyle P \sim_{\mathrm{Markov}} G \;\Longleftrightarrow\; P = \prod_{v\in V}P(X_v \mid \mathrm{Pa}(X_v))
P 和 G 用马尔可夫之桥连通,当且仅当联合分布能按图的结构拆开。
  1. 兼容记号P ~_Markov G 表示分布 P 与图 G 是马尔可夫兼容的。
    P∼MarkovGP \sim_{\mathrm{Markov}} G
  2. 等价定义左侧成立当且仅当右侧成立,这也是兼容性的正式定义。
    ⟺\Longleftrightarrow
  3. 因子分解右侧再次强调:每个变量只在自己的父节点条件下出现。
    P=∏v∈VP(Xv∣Pa(Xv))P = \prod_{v\in V}P(X_v \mid \mathrm{Pa}(X_v))

应用与拓展:从族谱到因果推断

族谱不仅能描述“谁像谁”,还能回答更尖锐的问题:如果当年张爷爷没有娶张奶奶,张家现在的成就还会不会一样?这类“如果强行干预”的问题,比单纯观察复杂得多,因为观察到的相关可能来自共同祖先等混杂因素。

Markov 兼容性提供了替干预问题换上“后门准则”的钥匙:要估计 X 对 Y 的因果效应,只要找到一个变量集合 Z,使得所有从 X 到 Y 的非因果路径都被 Z 阻断,那么通过 Z 分层就可以消去混杂。

这个公式的直接前提,正是我们已经构建的因果图满足 Markov 兼容性。唯有当图对条件独立的承诺与分布一致,研究者才能放心地用 Z 做条件集。在推荐系统、精准医疗、用户增长等领域,这套思路被广泛用于从观测数据中分离真实因果效应。

张家祖训至此升维:族谱不只是记录血缘的工具,而是可以执行“反事实实验”的演算纸。掌握 Markov 兼容性,就是掌握从一张静态的图和一堆观测数据中,读出因果规律的第一项基本功。

P(Y∣do(X=x))=∑zP(Y∣X=x,Z=z)P(Z=z)\displaystyle P(Y \mid \mathrm{do}(X=x)) = \sum_{z} P(Y \mid X=x, Z=z) P(Z=z)
do(X=x) 表示把 X 强行固定为 x,而不是被动观察;右边把混淆变量 Z 的每一层加权平均,得到去除混杂后的因果效应。
  1. 干预分布P(Y | do(X=x)) 表示在理想实验中强行让 X=x 时,Y 的分布。
    P(Y∣do(X=x))P(Y \mid \mathrm{do}(X=x))
  2. 加权求和Σ_z 表示对混淆变量 Z 的所有可能取值求和,等价于按 Z 的比例做加权平均。
    ∑z\sum_{z}
  3. 层内条件期望P(Y | X=x, Z=z)P(Z=z) 是在给定 Z 时的结果分布乘 Z 的概率。
    P(Y∣X=x,Z=z)P(Z=z)P(Y \mid X=x, Z=z) P(Z=z)

AI 应用场景

推荐系统中的特征筛选

阶段:数据处理与特征工程

解决的问题:传统特征选择只看相关性,容易把大量无关特征塞进模型导致过拟合。用 DAG 建模用户点击、浏览、加购、购买等行为,再通过 d-分离找出“给定某些变量后不再相关”的冗余节点,可以显著精简特征。

具体案例:某电商平台构建用户行为 DAG,发现“浏览时长”与“购买”在给定“加购”后条件独立。于是将浏览时长从模型中移除,线上推理速度提升 20%,AUC 不降反升。

用户增长中的因果归因

阶段:因果效应识别与评估

解决的问题:A/B 测试样本不足或无法随机分组时,需要从观测数据推断营销活动对次日留存的真实因果效应,而不是把高活跃用户的自然留存误算成活动效果。

具体案例:增长团队构建 DAG:活动曝光 → 用户活跃 → 留存,同时存在“注册时长”作为共同原因。利用后门准则选择条件集做调整,得到活动贡献的真实提升值,为预算分配提供了可信依据。

Python 演示

python57 行
def ancestors_of(ancestors_set, parents, node):    for p in parents[node]:        if p not in ancestors_set:            ancestors_set.add(p)            ancestors_of(ancestors_set, parents, p) def ancestors(parents, nodes):    result = set()    for n in nodes:        ancestors_of(result, parents, n)    return result def find_paths(neighbors, start, target, seen=None):    if seen is None:        seen = []    seen = seen + [start]    if start == target:        return [seen]    paths = []    for nxt in neighbors[start]:        if nxt not in seen:            paths += find_paths(neighbors, nxt, target, seen)    return paths def is_collider(parents, a, v, b):    return a in parents[v] and b in parents[v] def path_blocked(parents, anc_z, path, z):    for i in range(1, len(path) - 1):        v = path[i]        a = path[i - 1]        b = path[i + 1]        if is_collider(parents, a, v, b):            if v not in z and v not in anc_z:                return True        elif v in z:            return True    return False def d_separated(neighbors, parents, x, y, z):    if x == y:        return False    anc_z = ancestors(parents, z)    paths = find_paths(neighbors, x, y)    return all(path_blocked(parents, anc_z, p, z) for p in paths) chain_neighbors = {'X': {'Y'}, 'Y': {'X', 'Z'}, 'Z': {'Y'}}chain_parents = {'X': set(), 'Y': {'X'}, 'Z': {'Y'}}print('链式 X->Y->Z:')print('  X与Z无条件独立?', d_separated(chain_neighbors, chain_parents, 'X', 'Z', set()))print('  给定Y后X与Z独立?', d_separated(chain_neighbors, chain_parents, 'X', 'Z', {'Y'})) collider_neighbors = {'X': {'Y'}, 'Y': {'X', 'Z'}, 'Z': {'Y'}}collider_parents = {'X': set(), 'Y': {'X', 'Z'}, 'Z': set()}print('对撞 X->Y<-Z:')print('  X与Z无条件独立?', d_separated(collider_neighbors, collider_parents, 'X', 'Z', set()))print('  给定Y后X与Z独立?', d_separated(collider_neighbors, collider_parents, 'X', 'Z', {'Y'}))
目的:实现 d-分离判定算法,用链式与对撞两种结构演示 Markov 兼容性中“条件集合改变独立关系”的核心现象。
  1. def is_collider(parents, a, v, b):判断一条路径的连续三个节点是否在中间节点 v 处构成对撞结构。
  2. if a in parents[v] and b in parents[v]:两条边同时指向 v,说明 v 是“信息流交汇点”。
  3. anc_z = ancestors(parents, z)预计算条件集合的所有祖先节点,用于判断对撞节点的后代是否被条件化。
  4. if v not in z and v not in anc_z:对撞节点既未条件化,其后代也未条件化时,该路径被阻断。
  5. elif v in z:非对撞节点被放入条件集合时,该路径同样被阻断。
  6. return all(path_blocked(parents, anc_z, p, z) for p in paths)只有所有路径都被阻断,才算 d-分离。
  7. print(' 给定Y后X与Z独立?', d_separated(...))直接验证链式结构“中间节点被观察后首尾独立”的经典结论。

常见误区

误区我一直以为,兼容性就是图和分布“完全一样”,图里有的独立性分布必须有,分布里有的独立性图也必须画出来。

正解兼容性只要求“图→分布”的方向:图中 d-分离必然对应分布中的条件独立;分布中所有独立都要被图表达,那是忠实性。就像族谱说两条支脉不通婚,现实中一定不通婚,但现实中的每一段往来不一定都画在族谱上。

为何常见:因为“兼容”两个字听起来像双向匹配,加上许多教程把忠实性作为默认假设,初学者容易把两者混为一谈。

误区马尔可夫条件既然说给定父母就独立,那应该是给定父母后,这个节点跟所有其他节点都独立了吧。

正解不是。它只与非后代独立,子女、孙辈等后代仍然可以通过直接路径与你相关。孩子一定依赖父母,这是因果图允许的。

为何常见:因为把“非后代”理解成“所有其他节点”,忘记了自己对后代仍有直接影响。

误区两个节点之间没有直接边,就一定条件独立,不需要再看条件集合。

正解没有直接边只说明没有直接效应,但可能有一条通过其他变量的开放路径,比如共同原因 X←C→Y,让 X 和 Y 相关。只有给定某些条件后所有路径都被 d-分离,才能断言独立。

为何常见:把“无直接边”与“无条件独立”等同,忽略多跳路径传播相关性的机制。

误区既然 DAG 的箭头方向可以随便画,反正只要独立性一样就行。

正解I 等价的图确实可以共享相同的条件独立集,但改变对撞结构的方向会改变独立性集合,并非任意改箭头都能保持兼容。链式结构与分叉结构有时等价,对撞结构的方向则不能随意翻转。

为何常见:看到 I 等价概念后,错误放大为“方向无关紧要”,实际上只有满足特定骨架和对撞结构的图才等价。

面试题

Q1. Markov兼容性最准确的说法是?

单选题 · easy

  • A.图与分布完全等同
  • B.分布能因子分解← 正确答案
  • C.所有边都是因果边
  • D.节点间完全独立

答案:B。Markov兼容性指联合分布能按 DAG 的结构写成各节点条件概率的乘积,也就是分布能因子分解。选项 A 错在忽略忠实性,C 错在把箭头直接等同因果,D 错在完全不考虑条件关系。

Q2. 在链式结构 X→Y→Z 中,给定 Y 后,X 与 Z 的关系是?

单选题 · easy

  • A.X与Z独立← 正确答案
  • B.X与Y独立
  • C.Y与Z独立
  • D.三者互相独立

答案:A。链式结构里中间节点 Y 一旦被观察到,信息传递路径就被阻断,因此 X 与 Z 条件独立。选项 B、C 混淆了不同的变量对,D 过于绝对。

Q3. 在对撞结构 X→Y←Z 中,不给定 Y 时,X 与 Z 的关系是?

单选题 · easy

  • A.X与Z独立← 正确答案
  • B.X与Y相关
  • C.Y与Z相关
  • D.三者互相独立

答案:A。对撞结构中,Y 是两个原因的汇合点,不观察 Y 时 X 和 Z 之间没有开放路径,所以边际独立。观察 Y 后反而可能产生相关,这正是对撞结构的反直觉之处。

Q4. 在对撞结构 X→Y←Z 中,给定 Y 后,X 与 Z 通常会?

单选题 · mid

  • A.保持独立
  • B.出现相关← 正确答案
  • C.无法判断
  • D.方向反转

答案:B。条件化对撞节点会打开原本阻断的路径,使 X 与 Z 产生依赖。选项 A 是链式结构的直觉,C 忽略马尔可夫兼容性下的明确结论,D 混淆方向概念。

Q5. Markov条件对应的联合分布分解式是?

单选题 · mid

  • A.P = ΠP(Xv)
  • B.P = ΠP(Pa|Xv)
  • C.P = ΠP(Xv|Pa)← 正确答案
  • D.P = P(Xv|Pa)

答案:C。每个变量在自己的父节点条件下相乘,即 P=ΠP(X_v|Pa(X_v))。A 忽略父节点,B 把条件方向写反,D 少了所有节点的累乘。

Q6. 关于"I-map",下列说法正确的是?

单选题 · mid

  • A.只要求分布中的独立能被图表达
  • B.只要求图承诺的独立在分布成立← 正确答案
  • C.要求两者双向一一对应
  • D.要求所有边都为因果边

答案:B。I-map 只要求 I(G)⊆I(P),即图推出的条件独立在分布中都成立。选项 A 描述的是忠实性,C 是忠实且完全等价,D 不属于独立性映射的定义。

Q7. 两个DAG互为I等价,意味着它们?

单选题 · hard

  • A.因果方向完全相同
  • B.蕴含相同的条件独立← 正确答案
  • C.参数取值一定相同
  • D.节点个数一定不同

答案:B。I 等价的两个图拥有相同的条件独立性集合,因此不能仅靠观测数据区分。选项 A 错在箭头方向可以不同,C、D 与独立性集合没有必然联系。

Q8. 在链式、分叉、对撞三类三节点结构中,哪些会因条件集合改变而改变 X 与 Z 的独立性?

多选题 · mid

  • A.链式X→Y→Z← 正确答案
  • B.分叉X←Y→Z← 正确答案
  • C.对撞X→Y←Z← 正确答案
  • D.完全图三角结构

答案:ABC。链式和分叉在未条件化时路径开放,给定 Y 后阻断;对撞则相反,未条件化时独立,给定 Y 后可能相关。完全图没有可被 d-分离改变的独立关系。

Q9. 关于局部马尔可夫性质,正确的说法有?

多选题 · mid

  • A.给定父节点后与非后代独立← 正确答案
  • B.给定父节点后与所有节点独立
  • C.父节点集合属于马尔可夫毯← 正确答案
  • D.马尔可夫毯只包含父节点

答案:AC。局部马尔可夫性质说每个节点在给定父节点后与所有非后代独立。马尔可夫毯还包括子女、共同父节点等,所以 D 错;B 错在忽略了后代仍然依赖。

Q10. 以下哪些情况会使一条路径被d-分离阻断?

多选题 · hard

  • A.路径上有非对撞节点被条件化← 正确答案
  • B.路径上有对撞结构但未被条件化← 正确答案
  • C.路径上有对撞结构的后代被条件化
  • D.条件集合包含所有节点且无遗漏

答案:AB。非对撞节点被条件化会阻断路径;对撞结构未被条件化时也阻断。选项 C 实际上会激活路径而不是阻断,D 不是 d-分离的通用规则。