2. 因果图模型入门:DAG(有向无环图)与结构因果模型

好,我们直接进入正题。

因果推断这件事,说白了就是搞清楚「谁导致了谁」。但在广告投放里,变量之间的关系太复杂了。用户点击广告,是因为广告创意好?还是因为用户本身就有购买意向?还是因为推荐算法恰好把他推到了那个位置?

你想想看,如果没有一个清晰的框架,我们很容易把相关性当成因果。我在项目中就吃过这个亏——有一次优化出价策略,发现出价越高转化率反而越低,差点就得出「降价能提升转化」的结论。后来画了因果图才发现,出价高是因为竞争激烈,竞争激烈时用户质量本来就差。嗯,这里要注意,相关性不等于因果性

2.1 什么是DAG?

DAG,全称是Directed Acyclic Graph,中文叫有向无环图。名字听着吓人,其实很简单:

  • 有向:每条边都有方向,表示因果关系的流向。比如 A → B,意思是 A 导致 B。
  • 无环:不能有循环。你不能从 A 到 B,再从 B 回到 A。因果不能倒流。

我习惯把 DAG 想象成一张「因果地图」。每个节点是一个变量,每条箭头是一个因果假设。你画出来的图,就是你脑子里对这个世界因果关系的理解。

核心要点:DAG 不是数据自动生成的,而是基于你的领域知识手动构建的。它表达的是「你认为」因果结构是什么。

2.2 DAG 的三个基本结构

要理解 DAG,你得先掌握三种基本结构。我当年学的时候,就是靠这三个结构打通了任督二脉。

2.2.1 链式结构(Chain)

A → B → C。A 影响 B,B 影响 C。比如:广告曝光 → 用户点击 → 购买转化。如果你控制了 B(点击),A 和 C 就独立了。这叫「阻断路径」。

2.2.2 叉式结构(Fork)

A ← B → C。B 是 A 和 C 的共同原因。比如:用户收入 → 广告点击率,用户收入 → 购买力。如果你不控制 B,A 和 C 看起来是相关的,但这是假相关。控制 B 之后,A 和 C 就独立了。

避坑指南:我曾经在分析广告素材效果时,发现点击率和转化率高度正相关,差点以为点击率高的素材转化一定好。后来画了叉式结构才发现,用户兴趣才是那个共同原因。控制用户兴趣后,点击率和转化率的相关性几乎消失了。

2.2.3 对撞结构(Collider)

A → B ← C。B 是 A 和 C 的共同结果。比如:广告创意好 → 用户点击,用户需求强 → 用户点击。如果你不控制 B,A 和 C 是独立的。但如果你控制了 B(比如只看点击过的用户),A 和 C 反而会产生虚假的负相关。这就是著名的「伯克森悖论」。

我建议你记住一句话:控制中间变量要小心,控制对撞变量会引入偏差

2.3 结构因果模型(SCM)

DAG 是骨架,SCM 是血肉。结构因果模型(Structural Causal Model)由 Judea Pearl 提出,它把 DAG 中的每个因果关系用数学方程表达出来。

举个例子:

// 结构方程
X = f_X(U_X)          // 广告曝光,由外部因素决定
Y = f_Y(X, U_Y)       // 用户点击,由曝光和外部因素决定
Z = f_Z(Y, U_Z)       // 购买转化,由点击和外部因素决定

这里的 U_X、U_Y、U_Z 是外生变量(未观测到的噪声)。每个方程都表示一个因果机制。你想想看,如果我们能知道这些方程的具体形式,就能回答「如果我把曝光提高10%,点击会变化多少?」这样的反事实问题。

个人经验:在实际广告系统中,我们很少能写出精确的结构方程。但 SCM 的价值在于,它给了我们一个思考框架。哪怕方程是近似的,只要 DAG 结构正确,我们就能用 do-operator 做干预分析。

2.4 用 DAG 识别混淆变量

在广告投放中,最常见的因果推断陷阱就是混淆变量。混淆变量同时影响「干预」和「结果」,导致我们误判因果效应。

比如:你想评估「增加广告预算」对「转化率」的影响。但预算增加往往伴随着「促销活动」的增加。促销活动本身就会提升转化率。如果你不控制促销活动这个混淆变量,你会高估预算的效果。

用 DAG 表示就是:

促销活动 → 广告预算
促销活动 → 转化率
广告预算 → 转化率

这里促销活动就是混淆变量。要得到无偏的因果效应,你必须控制它。

2.5 本章知识体系

下面这张图是我自己画的,帮你理清本章的核心逻辑:

因果图模型知识体系 DAG(有向无环图) 链式 叉式 对撞 结构因果模型(SCM) 混淆变量识别与干预 核心概念速查 • 节点 = 变量 • 边 = 因果关系方向 • 无环 = 因果不能循环 • 阻断路径 = 控制中间变量 • 混淆变量 = 共同原因 • 对撞偏差 = 控制共同结果 • do-operator = 干预操作 • 反事实 = 假设性推理

2.6 小结

这一章我们讲了三个东西:

  • DAG:因果关系的可视化骨架,记住链式、叉式、对撞三种结构
  • SCM:把 DAG 变成数学方程,让因果推断可计算
  • 混淆变量:广告投放中最常见的因果陷阱,用 DAG 可以轻松识别

我个人觉得,DAG 最大的价值不是画图本身,而是逼你思考「我到底相信什么样的因果结构」。这个思考过程,比任何算法都重要。

一个小建议:下次你在分析广告数据时,先别急着跑模型。花10分钟画一张 DAG,把你知道的变量和因果关系列出来。你会发现,很多「奇怪的数据现象」其实在 DAG 里早有预兆。

专注资料整理