Causal Discovery
因果发现从数据中还原因果图。了解 PC 算法及其后续算法如何运作、它们有哪些假设,以及一个可运行示例。
因果发现旨在从数据中推断哪些变量导致了哪些结果,并生成一张有向图;从 X 指向 Y 的箭头表示 X 直接影响 Y。标准机器学习会学习足以支持预测建模的关联。因果发现则会追问,在干预下这些关联是否依然成立,例如改变机器设置或交通信号灯时序。它会输出一组候选因果结构,其中往往有些边仍未定向,随后再由领域专家和实验进一步完善。
哪些因素让因果结构可学习#
因果图通常是有向无环图(DAG),与贝叶斯网络使用的结构相同,但按因果关系来解读:每个箭头都表示直接影响。发现算法依赖三个标准假设。根据因果马尔可夫条件,已知某个变量的直接原因后,该变量便独立于所有并非其结果的变量。忠实性假设认为,数据中的每个独立关系都来自图结构,而非恰好相互抵消的影响。因果充分性假设则认为,不存在同时导致两个已测量变量的未测量变量。
即使满足这三个假设,观察数据也不总能揭示边的方向。链式结构 X → Y → Z、反向链式结构 X ← Y ← Z,以及分叉结构 X ← Y → Z 都意味着相同的独立性模式,即已知 Y 后,X 和 Z 相互独立,因此无论有多少观察数据,都无法区分它们。碰撞结构 X → Y ← Z 则不同。X 和 Z 本身相互独立,但已知 Y 后就会变得相关;这种特征能够确定两个箭头的方向。
因此,算法会返回马尔可夫等价类:一张部分定向图,其中已定向的边方向确定,未定向的边则可能朝任一方向。这个相同的性质也解释了数据集偏差的一个经典来源:对碰撞变量进行筛选或调整,会在其原因之间制造一种依赖关系,而这种关系在完整总体中并不存在。
发现算法#
大多数方法可归为三类。以 PC 为代表的基于约束的算法以 Peter Spirtes 和 Clark Glymour 命名,他们于 1991 年发表了该算法。算法从完全连接的无向图开始,删除条件独立性检验通过的变量之间的边,然后确定碰撞点方向。FCI 将此方法扩展到存在隐藏混杂因素的情况。基于分数的算法,例如贪心等价搜索(GES),会在图中搜索得分最高的图,分数可采用贝叶斯信息准则;而 NOTEARS 将无环性重新表述为平滑约束,使搜索能够通过梯度下降进行连续优化。LiNGAM 等函数方法假设关系是线性的、噪声是非高斯分布,因此即使只有两个变量,也能识别每条边的方向。
因果发现库还允许将时间顺序、物理约束和专家知识作为背景规则,禁止或要求特定边的存在,从而缩小搜索范围,并确定仅凭数据无法判断方向的边。开源库 causal-learn 实现了这三类方法。下面的示例根据一个已知碰撞点生成数据,并使用 PC 找回该结构:
import numpy as np
from causallearn.search.ConstraintBased.PC import pc
rng = np.random.default_rng(0)
n = 5000
# 真实结构:雨和体育场活动都会导致拥堵
rain = rng.normal(size=n)
event = rng.normal(size=n)
congestion = rain + event + rng.normal(scale=0.5, size=n)
# PC 通过检验条件独立性,仅凭数据恢复图结构
data = np.column_stack([rain, event, congestion])
result = pc(data, alpha=0.05, node_names=["rain", "event", "congestion"], show_progress=False)
print(result.G)输出列出了两条有向边:rain --> congestion 和 event --> congestion。由于雨和活动相互独立,但已知拥堵后会变得相互依赖,PC 将两条边都定向了。如果真实结构是一条从雨到拥堵再到延误的链,两条边就会保持无向。
因果发现的应用领域#
生物学领域提供了一个早期里程碑。2005 年,Karen Sachs 及其同事通过单细胞测量,学习了包含 11 种蛋白质和磷脂的蛋白质信号网络,找回了大多数已知连接;作者随后通过实验室实验确认了一个新预测的连接。在气候科学中,由 Jakob Runge 开发并通过 Tigramite 软件包实现的 PCMCI 等时间序列方法,能够在处理滞后和自相关的同时,发现气候变量之间的因果联系,非常适合时间序列分析。PyWhy 生态系统将因果发现工具与 DoWhy 配合使用,进入下一步:在图结构确定后估计效应大小。
计算机视觉可以提供这些变量。在交通视频中使用 Ultralytics YOLO26 进行目标计数,可以统计穿过某条线或某个区域的车辆和行人;将每个时间间隔内记录的计数与天气、活动日程和信号灯时序合并后,就可以运行因果发现算法。
因果发现与相关术语的区别#
- 因果表示学习:从像素等原始输入中学习因果变量本身及变量之间的图结构。因果发现则从已经测量的变量开始。
- 可解释 AI(XAI):解释哪些输入影响了模型的预测,但不会声称改变某个输入就会改变现实世界中的结果。
- 特征工程:选择并构建有助于预测的输入,包括仅与目标相关的变量。因果图则会识别出那些变化会推动目标变化的变量。










