3、有向无环图(DAG):图模型基础、d-分离、后门准则与前门准则
好,咱们进入因果推断最核心的视觉化工具——有向无环图,简称 DAG。说实话,我入行头两年做风控模型,根本不知道这玩意儿。那时候就是堆特征、调参数,模型效果上不去就加更多特征,结果就是一团乱麻。直到后来接触了因果图,才明白什么叫「结构决定功能」。
3.1 图模型基础:为什么是 DAG?
DAG 说白了就是一张图,里面全是箭头,而且不能有环。箭头从原因指向结果,比如「收入 → 逾期概率」。为什么不能有环?你想想看,如果 A 导致 B,B 又导致 A,那到底谁先谁后?因果推断最讲究时间顺序,有环就乱套了。
我个人习惯把 DAG 当作「因果假设的说明书」。你在建模前,先把所有变量之间的因果关系画出来,后面所有分析都基于这张图。我在项目中遇到过最典型的例子:某次做信贷评分卡,业务方坚持要加入「客户投诉次数」这个特征。我画了个 DAG,发现投诉次数其实是「服务体验差」的结果,而服务体验差又和「收入低」相关。如果直接加进去,反而会引入混杂偏倚。
画 DAG 有几个基本规则:
- 节点:每个变量一个节点,可以是可观测的(如年龄、收入),也可以是潜变量(如信用意识)。
- 边:有向边 A → B 表示 A 是 B 的直接原因。
- 路径:沿着箭头方向走,叫有向路径;逆着箭头走,叫后门路径。
- 碰撞点:两个箭头同时指向同一个节点,这个节点就是碰撞点。比如 X → Z ← Y,Z 就是碰撞点。
嗯,这里要注意:碰撞点是个坑。很多初学者以为两个变量都指向同一个节点,那它们肯定相关。其实恰恰相反——在没有控制 Z 的情况下,X 和 Y 是独立的。但一旦你控制了 Z,X 和 Y 反而会产生虚假相关。这个现象我后面会细说。
3.2 d-分离:判断条件独立的利器
d-分离,全称是「有向分离」。它用来判断:给定一组变量 Z,两个变量 X 和 Y 是否条件独立。说白了,就是看 Z 能不能阻断 X 和 Y 之间的所有路径。
判断规则其实就三条:
- 链式路径:X → Z → Y。如果控制了 Z,路径被阻断。X 和 Y 条件独立。
- 叉式路径:X ← Z → Y。同样,控制了 Z,路径被阻断。
- 碰撞点路径:X → Z ← Y。这里反直觉——不控制 Z 时,路径自然阻断;一旦控制了 Z,路径反而通了。
我曾经在风控项目中踩过这个坑。当时分析「学历」和「逾期率」的关系,发现两者在数据上显著相关。但画了 DAG 后发现,它们之间有个碰撞点「收入水平」。学历和逾期率都指向收入,但彼此独立。我一开始没控制收入,结果看到的是虚假相关。后来控制了收入,学历和逾期率的相关性就消失了。
d-分离的实用价值在于:你可以用它来找出哪些变量需要控制,哪些不能控制。比如你想估计「利率 → 逾期率」的因果效应,就需要找到所有阻断后门路径的变量集合。
3.3 后门准则:如何消除混杂偏倚?
后门准则,是我在风控建模中最常用的工具。它的核心思想是:要估计 X 对 Y 的因果效应,需要控制所有从 X 到 Y 的后门路径上的变量。
什么叫后门路径?就是那些从 X 出发,逆着箭头走,最终到达 Y 的路径。这些路径上往往藏着混杂变量。比如「收入」既是「学历」的结果,又是「逾期率」的原因,那它就在学历和逾期率之间开了个后门。
后门准则的步骤很简单:
- 画出 DAG,标出所有变量。
- 找出所有从 X 到 Y 的后门路径。
- 找到一组变量 Z,能阻断所有后门路径。
- 控制 Z,然后估计 X 对 Y 的效应。
举个例子。假设我们要估计「信用卡额度 → 消费金额」的因果效应。后门路径可能是:额度 ← 收入 → 消费金额。这里收入就是混杂变量。控制收入后,额度对消费的效应就是干净的。
后门准则有个前提:你选择的控制变量 Z 不能是 X 的后代。换句话说,不能控制那些被 X 影响的变量。否则你会阻断因果路径的一部分,导致估计偏差。
3.4 前门准则:当后门走不通时
后门准则虽然好用,但有时候你找不到合适的控制变量。比如混杂变量不可观测,或者数据里没采集到。这时候前门准则就派上用场了。
前门准则的思路是:通过一个中间变量 M 来估计 X 对 Y 的效应。X 影响 M,M 影响 Y。只要我们能估计出 X → M 和 M → Y 的效应,就能间接算出 X → Y 的总效应。
前门准则需要满足三个条件:
- X 通过 M 影响 Y,没有其他路径。
- M 和 Y 之间没有未控制的混杂。
- X 和 M 之间没有未控制的混杂。
我在实际项目中用过一次前门准则。当时要评估「短信提醒次数 → 还款率」的因果效应。但有个潜变量「客户责任心」同时影响提醒次数和还款率,而且无法观测。后门走不通。后来我发现「客户打开 APP 次数」是个很好的中间变量。提醒次数影响打开次数,打开次数影响还款率。用前门准则,我成功估计出了因果效应。
前门准则的计算公式是:
P(Y|do(X=x)) = Σ_m P(M=m|X=x) * Σ_x' P(Y|X=x', M=m) * P(X=x')
看着复杂,其实逻辑很简单:先算 X 对 M 的效应,再算 M 对 Y 的效应,最后加权求和。
3.5 本章知识体系图
下面这张图总结了 DAG 的核心逻辑。我习惯把它当作因果推断的「地图」——先画图,再找路径,最后选准则。
3.6 实际应用中的避坑指南
最后,我分享几个实战中容易踩的坑:
- 别把相关当因果:DAG 只是你的假设,不是真理。画图前先和业务方确认因果关系是否合理。
- 小心遗漏变量:DAG 里漏掉一个关键混杂变量,整个分析就白做了。我习惯先列一个「所有可能变量」的清单,再逐步筛选。
- 别过度控制:控制太多变量,反而可能引入 M-bias(M型偏倚)。用 d-分离仔细检查每个控制变量是否必要。
- 前门准则慎用:前门准则对中间变量的要求很高,必须确保没有其他路径。我在项目中只用过一次,因为条件太苛刻。
好了,DAG 的基础就讲到这里。记住:图是工具,不是目的。关键是用它来理清因果结构,指导你的建模决策。下一章我们会聊更具体的因果效应估计方法,到时候这些图模型知识会派上大用场。
公众号:蓝海资料掘金营,微信deep3321