因果图模型基础:DAG、马尔可夫等价类与因果充分性

各位同学,咱们今天聊点硬核的。因果推断里,图模型是绕不开的基石。说白了,你要想从数据里挖出因果关系,就得先搞清楚这些图到底长什么样、有什么脾气。

我个人习惯把因果图模型比作一张「交通地图」。变量是城市,箭头是高速公路。但这条路上跑的不是车,是因果效应。嗯,咱们先从最基础的概念说起。

有向无环图(DAG)

DAG,全称 Directed Acyclic Graph。翻译过来就是「有方向、没环路的图」。为什么不能有环?你想想看,如果 A 导致 B,B 又导致 A,那到底谁先谁后?这在因果世界里是说不通的。时间不能倒流,原因必须在结果之前。

一个标准的 DAG 由两部分组成:

  • 节点(Node):代表变量,比如 X、Y、Z
  • 有向边(Directed Edge):箭头,表示因果方向,比如 X → Y

举个例子,我去年做过一个电商用户留存的项目。我们画了这么一张图:

# 一个简单的 DAG 示例
# 用户活跃度 → 购买频次 → 留存率
#        ↑           ↑
#   推送次数    优惠券发放

# 用 Python 的 networkx 表示
import networkx as nx
dag = nx.DiGraph()
dag.add_edges_from([
    ('推送次数', '用户活跃度'),
    ('用户活跃度', '购买频次'),
    ('优惠券发放', '购买频次'),
    ('购买频次', '留存率')
])

这里要注意,DAG 不允许出现类似「推送次数 → 用户活跃度 → 推送次数」这样的闭环。一旦出现,你的因果推断就全乱了。

⚠️ 我曾经踩过的坑: 有一次我画图时不小心加了一条反向边,结果用 PC 算法跑出来的结构完全不对。排查了两天才发现是 DAG 里有个隐藏的环。所以,画完图一定要用 nx.is_directed_acyclic_graph() 检查一下。

马尔可夫等价类

好,现在问题来了。你从数据里学到的 DAG,真的是唯一的吗?

答案是否定的。不同的 DAG 可能生成完全相同的概率分布。这些 DAG 就属于同一个「马尔可夫等价类」。说白了,光靠数据你分不清它们谁是谁。

举个例子,下面三个 DAG 在统计上是等价的:

# 三个马尔可夫等价的 DAG
# 1. X → Y → Z
# 2. X ← Y → Z  
# 3. X ← Y ← Z

# 它们都编码了同一个条件独立性:
# X ⊥ Z | Y

为什么会这样?因为这三个图都表达了「给定 Y 时,X 和 Z 独立」。你从数据里只能学到这个独立性,但无法判断箭头的方向。

💡 关键点: 马尔可夫等价类告诉我们,因果发现算法只能学到「等价类」,而不是唯一的 DAG。要打破这种等价性,你需要额外的假设或实验数据。

我记得有一次做基因调控网络分析,数据量很大,但跑出来的结果是一堆等价类。当时我对着屏幕发愁,后来加了干预数据才把方向定下来。嗯,这就是等价类的现实意义——它告诉你哪些方向是「不确定的」。

因果充分性假设

这个假设听起来有点绕,其实很简单:

你观测到的所有变量,已经包含了所有共同的因果原因。

换句话说,没有遗漏的混淆变量。如果漏了,你的因果图就是错的。

举个例子,假设你想研究「运动量」和「睡眠质量」的关系。你画了这么个 DAG:

# 不满足因果充分性的 DAG
# 运动量 → 睡眠质量
# 
# 实际上,还有一个隐藏变量:
# 压力水平 → 运动量
# 压力水平 → 睡眠质量
# 
# 如果你没观测到「压力水平」,那运动量和睡眠质量之间的相关性就是虚假的。

我在实际项目中遇到过这种情况。有一次做用户行为分析,发现「登录次数」和「付费金额」强相关。我差点就画了个箭头从登录到付费。后来仔细一想,其实有个隐藏变量「用户粘性」同时影响了这两个。这就是因果充分性被破坏的典型案例。

🔧 我的建议: 在做因果发现之前,先列一个「潜在混淆变量清单」。把你能想到的所有可能同时影响多个变量的因素都列出来。哪怕有些变量你没数据,也要在图上标出来。这样至少你知道自己的假设有多强。

知识体系总览

下面这张图是我自己画的,把这三个概念串起来了。你一看就明白它们之间的关系:

因果图模型基础:三大核心概念 有向无环图 节点 + 有向边 无环结构 因果方向明确 马尔可夫等价类 多个 DAG 共享 相同条件独立性 方向不确定 因果充分性假设 无遗漏混淆变量 所有共同原因 已被观测 三者关系 DAG 是因果图的基本形式 马尔可夫等价类告诉我们:数据只能学到等价类,不是唯一 DAG 因果充分性假设是因果发现的前提条件,不满足则结果不可靠

三个概念的关系

你可能会问,这三个东西到底怎么串起来的?我简单总结一下:

  • DAG 是因果图的基本形式。没有它,后面的所有分析都无从谈起。
  • 马尔可夫等价类 是 DAG 的「模糊版本」。它告诉你哪些方向是数据无法区分的。
  • 因果充分性假设 是因果发现的「入场券」。不满足这个假设,你画出来的 DAG 就是错的。

说白了,你要先假设「没有遗漏变量」,然后用数据去学 DAG,最后接受你只能学到等价类这个事实。嗯,这就是因果发现的现实。

📌 一句话总结: DAG 是骨架,等价类是模糊,充分性是前提。三者缺一不可。

好了,这一章的内容就到这里。下一章咱们聊聊因果发现算法的分类,看看哪些算法能帮你从数据里「挖」出这些图。


专注资料整理