图论基础:有向图与无向图、路径与环、DAG的定义与性质
说实话,很多同学刚开始学因果推断,一上来就被各种图论术语给唬住了。什么有向无环图、马尔可夫毯、d-分离……听着像天书。但你别怕,图论这东西,说白了就是画圈圈和箭头。
我当年第一次接触因果图,是在一个电商推荐系统的项目里。老板让我分析「用户点击广告」和「最终购买」之间的关系。我一开始拿了一堆回归模型跑,结果越跑越糊涂。后来一个老大哥跟我说:「你先别急着建模,把变量之间的因果关系画出来。」
嗯,就是这句话,让我彻底入了因果推断的坑。今天我们就从最基础的图论开始,把地基打牢。
什么是图?
图,就是一堆节点(Node)和一堆边(Edge)的集合。节点代表变量,边代表关系。
举个例子:
- 节点:天气、冰淇淋销量、游泳人数
- 边:天气影响冰淇淋销量,天气也影响游泳人数
就这么简单。你不需要把它想得多复杂。图论就是研究这些节点和边之间关系的数学工具。
有向图 vs 无向图
这是最基础的一个区分,也是你以后天天要打交道的概念。
无向图:边没有方向。A和B相连,就是互相有关系,但不分谁影响谁。比如社交网络里的「好友关系」——你是我朋友,我也是你朋友,没有箭头指向。
有向图:边有方向。A → B 表示A影响B,但B不一定影响A。比如「下雨 → 地湿」,下雨会导致地湿,但地湿不会导致下雨。
我个人习惯,在因果推断里几乎只用有向图。因为因果关系天然就是有方向的——原因指向结果,而不是反过来。
核心要点:因果图必须是有向图。无向图只能表示关联,不能表示因果。
我在项目中遇到过一位同事,他用无向图做因果分析,结果把「相关」当成了「因果」,模型上线后效果惨不忍睹。嗯,这个坑我替你们踩过了。
路径与环
有了节点和边,我们就可以在图上「走路」了。
路径:从一个节点出发,沿着边走,到达另一个节点,中间经过的节点序列就是一条路径。比如 A → B → C,就是从A到C的一条路径。
路径可以是任意长度的。甚至你可以走回头路,只要沿着边走就行。
环:如果一条路径的起点和终点是同一个节点,那就形成了一个环。比如 A → B → C → A。
你想想看,在因果关系里,环意味着什么?意味着A导致B,B导致C,C又导致A。这在现实中很少见——除非是反馈系统,比如「供需关系」:需求高导致价格涨,价格涨又抑制需求。但大多数因果推断场景,我们假设没有这种循环。
避坑指南:我曾经在一个医疗数据分析项目里,不小心画了一个环——「用药 → 副作用 → 停药 → 病情加重 → 用药」。这个环导致后续的因果效应估计完全失效。后来我才意识到,在静态因果图中,环是不允许的。
DAG:有向无环图
好了,重点来了。DAG,全称 Directed Acyclic Graph,中文叫「有向无环图」。
三个条件:
- 有向:所有边都有方向
- 无环:图中不存在任何环
- 图:由节点和边组成
说白了,DAG就是一张没有回头路的因果地图。你从任何一个节点出发,沿着箭头走,永远不可能回到原点。
为什么DAG在因果推断里这么重要?
因为因果关系的本质就是「前因后果」,不能循环。如果A导致B,B又导致A,那到底谁是因谁是果?这就乱套了。
我的经验:每次构建因果图之前,我都会先检查一遍有没有环。一个简单的方法:把所有节点按时间顺序排列。原因一定发生在结果之前。如果发现某个节点的时间顺序对不上,那大概率是画错了。
DAG的核心性质
DAG有几个非常重要的性质,我挑三个最常用的讲:
| 性质 | 说明 | 实际意义 |
|---|---|---|
| 拓扑排序 | DAG中的节点可以排成一个线性序列,使得每条边的起点都在终点之前 | 可以确定变量的因果顺序,方便建模 |
| 马尔可夫性质 | 给定父节点,每个节点与它的非后代节点条件独立 | 简化了概率计算,是贝叶斯网络的基础 |
| d-分离 | 判断两个节点是否条件独立的方法 | 用于选择调整变量,避免混杂偏差 |
这三个性质,你以后会反复用到。尤其是d-分离,它是因果推断里最核心的工具之一。不过今天我们先不展开,先把DAG本身搞明白。
一个简单的DAG示例
我们来看一个实际的例子。假设我们要分析「广告投放」对「销售额」的影响。
变量有:
- 广告预算(Budget)
- 广告曝光量(Exposure)
- 用户点击量(Click)
- 销售额(Sales)
一个合理的DAG可能是这样的:
Budget → Exposure → Click → Sales
你看,箭头都是单向的,没有环。预算影响曝光,曝光影响点击,点击影响销售。每一步都有明确的因果方向。
如果我在这个图里加一条边:Sales → Budget(销售额高所以增加预算),那就形成了一个环。这时候就不是DAG了,而是一个有向循环图。处理起来就麻烦得多。
记住:在因果推断中,我们默认使用DAG。如果你遇到循环,要么拆解成多个时间点,要么使用更复杂的动态因果模型。
SVG知识结构图
下面我用一张图来总结本章的核心知识体系。你可以把它当作一个「思维导图」来看。
这张图把本章的核心内容串起来了。从图的分类,到路径与环,再到DAG的定义和性质,一层层往下走。你以后每次构建因果图,都可以拿这张图来对照一下,看看自己有没有遗漏什么。
小结
好了,今天的内容就到这里。我们讲了:
- 图的基本概念:节点和边
- 有向图和无向图的区别
- 路径和环的含义
- DAG的定义:有向 + 无环 + 图
- DAG的三个核心性质:拓扑排序、马尔可夫性质、d-分离
这些东西看起来简单,但它们是整个因果推断的根基。我见过太多人,一上来就学各种高级方法,结果连DAG都画不对,最后模型跑出来全是错的。
所以,别急。把基础打牢,后面才能走得远。