因果有向无环图和do-calculus为AI系统的公平性分析和偏见溯源提供了严谨的因果推理框架,超越传统相关性分析。本篇讲解因果图构建、do算子的干预语义、后门调整和前门调整公式、反事实推理及其在AI公平性中的应用,涵盖因果发现算法和敏感性分析,适用于AI公平性审计、偏见消除和因果可解释性研究等场景。

岗位关联

你是一家融合菜餐厅的主厨,同时兼任数据分析师。你发现最近一个月,凡是点了辣菜(X)的顾客,满意度(Y)都特别高。你跃跃欲试,想把所有菜都做成辣味。但冷静一想:会不会是「爱吃辣的人」(Z)本身就更容易给好评?你看到的“辣菜→好评”也许只是「顾客类型→爱点辣菜」和「顾客类型→容易满足」两个假象叠加出的海市蜃楼。要回答“把菜变辣能否真正提升满意度”,你需要的不是观察,而是干预——把顾客随机分成两组,一组上辣菜、一组不上辣菜,再对比结果。可现实中你不可能总做随机实验。这时,因果图和 do-calculus 就是你用观察数据模拟随机实验的思维利器:画一张“谁影响谁”的地图,再用数学手术刀切断混淆的血管,让真相浮出水面。 这段知识是 AI 公平性审计、反事实解释和稳健决策的核心引擎。掌握它,你能从“数据相关性”升级到“可干预的因果知识”,在算法治理时代占据不可替代的位置。

目录
  1. 可视化演示
  2. 因果图构建
  3. do算子语义
  4. 后门调整
  5. 前门调整
  6. 反事实推理
  7. 公平性应用
  8. 因果发现
  9. 敏感性分析
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

\u5c55\u793aBresenham\u7b97\u6cd5\u9010\u50cf\u7d20\u7ed8\u5236\u7ebf\u6bb5\u7684\u8fc7\u7a0b\uff0c\u901a\u8fc7\u6574\u6570\u8fd0\u7b97\u786e\u5b9a\u6700\u4f73\u50cf\u7d20\u4f4d\u7f6e\uff0c\u652f\u6301\u8c03\u8282\u7ec8\u70b9\u5750\u6807\u5e76\u89c2\u5bdf\u8bef\u5dee\u7d2f\u52a0\u8fc7\u7a0b\u3002

本节配有交互动效(进入视口后自动加载,约 3KB)。

Bresenham\u7ebf\u6bb5\u7ed8\u5236 \u5df2\u7ed8\u5236\u50cf\u7d20 \u5f53\u524d\u50cf\u7d20 err=dx-dy\u21922*err \u6574\u6570\u8fd0\u7b97\u786e\u5b9a\u6700\u4f73\u50cf\u7d20\u4f4d\u7f6e

因果图构建

回到你的餐厅。你要先画一张“因果地图”:哪些因素直接影响了哪些因素?顾客类型 Z 会影响顾客是否点辣菜 X,也会影响满意度 Y;而辣度 X 本身也会影响满意度 Y。把变量画成圆圈,把“直接因果”画成箭头,你就得到了一张因果有向无环图(Causal DAG)。重点在“无环”——因果关系不能绕一圈回到自己,就像川菜的辣味不可能先影响满意度,再反过来决定顾客当初点了什么。

技术上讲,因果图是一种结构化假设:节点代表变量,有向边代表“存在直接因果效应”,没有边则代表“不存在直接效应”。图中蕴含的条件独立性关系(即 d-分离)可以由图的结构直接读出:当 Z 同时指向 X 和 Y 时,X 和 Y 在给定 Z 的条件下才独立。这张图是后续一切因果计算的“宪法”——它写明了世界如何运转。

有了一张因果图,任何变量的联合概率都能按照图的结构拆解成条件概率的乘积:

因果图是你的“案件关系图”:它不负责告诉你箭头是否真实存在,而负责把你对世界的因果信念显式地画出来。箭头画错了,后面所有计算都会跟着错——所以画图时要像主厨挑选食材一样,宁缺毋滥。

P(v1,v2,…,vn)=∏i=1nP(vi∣pai)\displaystyle P(v_1, v_2, \ldots, v_n) = \prod_{i=1}^{n} P(v_i \mid \text{pa}_i)
每个变量的分布只由其“父节点”决定,这是因果图与普通贝叶斯网络共享的核心编码方式。
  1. 联合分布\(P(v_1, v_2, \ldots, v_n)\) 表示所有变量同时出现的概率——比如“顾客是辣口 + 点了辣菜 + 给了高分”同时成立的可能性。
    P(v1,v2,…,vn)\displaystyle P(v_1, v_2, \ldots, v_n)
  2. 连乘符号\(\prod\) 表示把一系列条件概率相乘,就像把这顿饭拆成一道道菜分别计价再汇总。
    ∏i=1n\displaystyle \prod_{i=1}^{n}
  3. 条件概率\(P(v_i \mid \text{pa}_i)\) 读作“给定父节点取值时,\(v_i\) 的概率”。pa_i 是变量 \(v_i\) 在图中所有直接原因的集合。
    P(vi∣pai)\displaystyle P(v_i \mid \text{pa}_i)
  4. 整体含义整张因果图把“全局的联合分布”压缩为一组“局部的因果规则”,让推理复杂度从指数级降到线性级。
    ∏i=1nP(vi∣pai)\displaystyle \prod_{i=1}^{n} P(v_i \mid \text{pa}_i)

do算子语义

观察数据回答的是“顾客点了辣菜后满意度如何”,而干预回答的是“如果老板强制让每位顾客都点辣菜,满意度会如何”。两者有本质区别:观察时,顾客按自己的偏好做选择;干预时,外部力量接管了选择权。在因果图中,这个外部接管动作记作 \(\text{do}(X = x)\),读作“把 X 强制设为 x”。这是一个手术动作:摧毁所有指向 X 的箭头,因为当老板拍板时,顾客类型 Z 不再影响 X 的取值。

从数学上看,\(\text{do}(x)\) 与普通条件 \(P(Y \mid X = x)\) 的根本差异在于:后者保留了 X 的父节点对 X 的影响,而前者切断了它们。于是联合分布在干预后发生了截断——被干预变量的因子被整体移除:

可以这样记:条件是“看”,do 是“做”。看,是按世界的现状进行观察;做,是亲手改写世界再观察结果。do 算子把“顾客自由选择”改成了“老板强制执行”,这正是随机对照实验的精神内核——只不过现在它被翻译成了图上的代数运算。

P(v∣do(X=x))=∏i:Vi∉XP(vi∣pai)∣X=x\displaystyle P(v \mid \text{do}(X = x)) = \prod_{i: V_i \notin X} P(v_i \mid \text{pa}_i) \bigg|_{X = x}
干预相当于删掉了因果图中“指向 X 的所有边”,再把 X 固定为常数——这就是 do-calculus 的基石操作。
  1. 干预分布\(P(v \mid \text{do}(X = x))\) 表示“强制 X 取 x 后,其他变量的分布”,这是模拟随机实验的目标量。
    P(v∣do(X=x))\displaystyle P(v \mid \text{do}(X = x))
  2. 取子集\(\prod_{i: V_i \notin X}\) 表示只对“没有被干预的变量”保留概率因子,被干预的 X 不再拥有自己的条件分布。
    ∏i:Vi∉X\displaystyle \prod_{i: V_i \notin X}
  3. 截断含义原来的 \(P(x \mid \text{pa}_x)\) 因子从乘积中消失,因为 X 的取值已被外部强制决定,不再由自然机制产生。
    P(x∣pax) 项被移除\displaystyle P(x \mid \text{pa}_x) \text{ 项被移除}
  4. 赋值约束\(\big|_{X = x}\) 表示剩余所有因子中的 X 都被替换为固定值 x,就像菜谱里“辣椒用量”一栏被统一改写为“100 克”。
    ∣X=x\displaystyle \bigg|_{X = x}

后门调整

现在你有了因果图和 do 算子,但还有一个关键问题:你手里只有观察数据,并没有真正做实验。能不能从观察数据中计算出“强制所有顾客都点辣菜”的效果?答案藏在一条后门路径里:X ← Z → Y。这条路径从 X 出发,箭头反向指向 X,再通向 Y——它是一条非因果的“假通路”,让 X 和 Y 的关联混入了 Z 的成分。只要阻断它,剩下的 X → Y 就是纯净的因果效应。

后门准则告诉我们:找到一个变量集合 Z,它阻断所有后门路径,且不包含 X 的后代。然后在每个 Z = z 的“层”内部比较 X 对 Y 的影响,最后按 P(z) 加权平均,就能得到干预效果。就像排查“辣菜与好评”的关系:先按顾客类型分层,在每一层里比较辣与不辣,再把各层结果按占比加权汇总:

后门调整就像餐厅做顾客满意度分析的“分层问卷”:先把顾客按类型分桌,在每个小群体内对比辣与不辣,最后按各群体人数占比汇总。它把“被混杂的观察关联”还原为“纯净的因果效应”,是 do-calculus 最常用的一把手术刀。

P(y∣do(X=x))=∑zP(y∣X=x,Z=z) P(z)\displaystyle P(y \mid \text{do}(X = x)) = \sum_{z} P(y \mid X = x, Z = z) \, P(z)
后门调整把“干预概率”改写为“可观测的条件概率的加权和”,这是从观察数据估计因果效应的黄金公式。
  1. 目标量等号左边 \(P(y \mid \text{do}(X = x))\) 是干预世界中的分布,即“强制加辣后,顾客满意的概率”。
    P(y∣do(X=x))\displaystyle P(y \mid \text{do}(X = x))
  2. 外层求和\(\sum_{z}\) 表示对混杂因子 Z 的所有可能取值逐一累加,例如“辣口顾客”和“清淡口顾客”两类。
    ∑z\displaystyle \sum_{z}
  3. 条件概率\(P(y \mid X = x, Z = z)\) 是在每一层内部“固定辣度与顾客类型”后满意的概率——此时 X 的取值不再受 Z 影响。
    P(y∣X=x,Z=z)\displaystyle P(y \mid X = x, Z = z)
  4. 权重乘以 \(P(z)\) 并按 z 求和,等于按“各类型顾客在真实世界中的占比”对层内效应做加权平均,还原总体效果。
    ×P(z)\displaystyle \times P(z)

前门调整

有些时候,混杂因子 Z 根本看不见——比如你无法观测“顾客的隐藏口味偏好”。但这时如果你能观测到一个中介变量 M,比如“顾客是否愿意再次光顾”或“上菜速度”,而 M 恰好承接了 X 对 Y 的全部(或部分)影响,那么还有一条路可以走:前门调整。

前门路径的思想是“借道”:X 对 Y 的效应完全通过 M 传导,那么可以先估计 X 对 M 的效应,再估计 M 对 Y 的效应,最后复合起来。就像你不知道顾客心底的口味偏好,但你能看到“点辣菜的人(X)确实更多地要求加辣蘸碟(M),而加辣蘸碟的人确实满意度更高(Y)”——两个可观测环节一拼,中间那段被隐藏因素污染的部分就绕过去了:

前门调整像一位聪明的侦探:当唯一的证人不肯开口(混杂不可观测),就改从“作案工具”和“目击者的行动”两条间接线索交叉验证。它体现了 do-calculus 的哲学——因果路径可以被分解、重组,最终绕开所有障碍抵达真相。

P(y∣do(X=x))=∑mP(m∣X=x)∑x′P(y∣X=x′,M=m) P(x′)\displaystyle P(y \mid \text{do}(X = x)) = \sum_{m} P(m \mid X = x) \sum_{x'} P(y \mid X = x', M = m) \, P(x')
前门调整通过中介变量 M 绕开不可观测的混杂因子,是后门准则失效时的备选方案。
  1. 外层求和\(\sum_{m}\) 表示对中介变量 M 的所有取值加权求和,这里的 M 是“加辣蘸碟”这类中间环节。
    ∑m\displaystyle \sum_{m}
  2. 第一阶段效应\(P(m \mid X = x)\) 是 X 对 M 的因果效应——“强制加辣后,顾客要求加辣蘸碟的概率”。
    P(m∣X=x)\displaystyle P(m \mid X = x)
  3. 内层求和\(\sum_{x'}\) 对 X 的所有可能取值求和,这里 \(x'\) 是“虚拟的 X 取值”。
    ∑x′\displaystyle \sum_{x'}
  4. 第二阶段效应\(P(y \mid X = x', M = m)\) 是在固定 X 与 M 后 Y 的概率——M 对 Y 的因果贡献。
    P(y∣X=x′,M=m)\displaystyle P(y \mid X = x', M = m)
  5. 权重乘回乘上 \(P(x')\) 并双重求和,等价于把“X→M“与”M→Y”两段效应串联复合,得到总效应。
    ×P(x′)\displaystyle \times P(x')

反事实推理

你已经知道如何用观察数据计算干预效应,但有些问题连干预实验都回答不了:“如果当初没有给这位顾客推荐这款产品,他会买吗?”——现实中不可能让同一位顾客既被推荐又不被推荐。这种“事后假设”就是反事实推理。它想象一个平行世界:世界还是那个世界,顾客还是那个顾客,唯一的区别是 X 被设定为另一个值。

在潜在结果框架中,\(Y_x(u)\) 表示个体 \(u\) 在 X 被强制设为 x 时的结果。反事实问题“给定观察到的 X = x' 且 Y = y',若 X = x 结果会如何”写成条件概率:

反事实推理是餐厅里最微妙的对话:“那位给差评的顾客,如果服务员当时主动送了甜品,他会回心转意吗?”当然,你无法回到过去验证,但因果图提供了结构化的方法:把现实证据固定下来,在干预后的图中借道计算假设世界的结果。它是因果推理阶梯的最高层——关联 → 干预 → 反事实——也是可解释 AI 与个性化决策的理论基石。

P(Yx=y∣X=x′,Y=y′)\displaystyle P(Y_{x} = y \mid X = x', Y = y')
反事实推理回答“假如当初”的问题,它比干预多了一层条件——在已知现实结果的前提下进行假设。
  1. 潜在结果\(Y_x\) 读作“若 X 被设为 x 时的 Y”,它是每个个体在平行世界中的结果,现实只能看到其中一条分支。
    Yx=y\displaystyle Y_{x} = y
  2. 条件子句\(\mid X = x', Y = y'\) 表示条件背景是“现实中这位顾客选了 \(x'\) 并得到了 \(y'\)”。
    X=x′,Y=y′\displaystyle X = x', Y = y'
  3. 整体含义整个表达式回答“在已知现实结局的情况下,如果当初换一种处理,结局会怎样”——这是在给定证据下的反事实推断。
    P(Yx=y∣X=x′,Y=y′)\displaystyle P(Y_{x} = y \mid X = x', Y = y')

公平性应用

现在把主厨的目光从餐厅转向 AI 系统。假设一个招聘算法根据求职者特征预测“入职表现”,你担心算法存在性别或地域歧视。传统的相关性分析只能告诉你“算法输出与敏感属性相关”,却无法告诉你歧视发生在哪条路径上。因果图为公平性审计提供了可解释的路径拆解:敏感属性 A 通过哪些途径影响了决策 Y?哪条路径是合理的(如“教育背景”),哪条是不合理的(如“性别直接决定录用”)?

利用 do-calculus,可以把总效应拆解为自然直接效应(ND)与间接效应(NIE)。直接效应是保持中介变量不变、只改变敏感属性带来的结果差异——这正是法律意义上的“直接歧视”;间接效应是通过改变中介变量而传递的差异——对应“间接歧视”。自然直接效应公式:

因果公平性分析让 AI 审计从“黑盒找相关性”进化为“白盒剖因果路径”:招聘算法若是因“性别影响实习机会,再影响录用”而歧视,就应该修复间接路径;若是“性别被直接用于打分”,则必须移除直接路径。主厨终于可以指着因果关系图说:歧视的源头在这里,而不是笼统地归咎于“数据里存在偏见”。

ND=E[Y1,Z0−Y0,Z0]\displaystyle \text{ND} = E\big[Y_{1, Z_0} - Y_{0, Z_0}\big]
在“所有中介都保持与 X=0 时相同”的前提下,把敏感属性从 0 改为 1 引起的结果差异,就是去除间接影响后的直接歧视分量。
  1. 期望符号\(E[\cdot]\) 表示对所有个体求平均,得到群体的平均结果差异。
    E[⋅]\displaystyle E[\cdot]
  2. 第一个潜在结果\(Y_{1, Z_0}\) 表示“敏感属性被设为 1,但中介变量 Z 保持其在 X=0 时的取值”——这是假设世界的录用结果。
    Y1,Z0\displaystyle Y_{1, Z_0}
  3. 第二个潜在结果\(Y_{0, Z_0}\) 表示“敏感属性为 0 且中介取值为 0 状态的录用结果”,作为基准对照组。
    Y0,Z0\displaystyle Y_{0, Z_0}
  4. 相减求期望两者期望之差剥离了“因敏感属性而改变中介”的间接效应,剩下的就是绕过中介直击结果的部分。
    E[Y1,Z0−Y0,Z0]\displaystyle E[Y_{1, Z_0} - Y_{0, Z_0}]

因果发现

前面的所有分析都依赖一个前提:因果图是已知的。但在真实业务中,你往往只有一堆列名复杂的数据库表,并不知道谁影响谁——这时就需要因果发现算法从数据中反推图结构。最经典的算法是 PC 算法:它从完全连接的图开始,用条件独立性检验逐条砍掉不相关的边。

PC 算法的每一步都可以用“餐厅后厨的排除法”来理解:先假设所有食材之间都可能有关系(全连接图),然后逐一检验“在控制某些变量后,X 与 Y 是否还关联”。如果控制 Z 后 X 和 Y 变得独立,就说明 X 与 Y 的关联是 Z 伪造的,可以把这条边擦掉。其核心检验以条件独立性为判据:

PC 算法接着会利用“v 型结构”(对撞因子)确定箭头的方向——就像侦探发现“只有警察在场时,消防队和围观群众才同时出现”这种特殊模式来推断支配关系。另一类方法是贪婪搜索:给每个候选图打分(如 BIC 分数),在图的空间中逐步向高分图爬坡。因果发现让“从数据中画出因果地图”成为可能,为后续的 do-calculus 计算提供了图纸。

X⊥ ⁣ ⁣ ⁣⊥Y∣Z  ⟺  P(X,Y∣Z)=P(X∣Z) P(Y∣Z)\displaystyle X \perp\!\!\!\perp Y \mid Z \iff P(X, Y \mid Z) = P(X \mid Z) \, P(Y \mid Z)
在给定 Z 的条件下,X 与 Y 联合分布等于各自条件分布的乘积——意味着 Z 完全解释了它们的关联。
  1. 独立性符号\(X \perp\!\!\!\perp Y \mid Z\) 表示“在 Z 固定的条件下,X 和 Y 相互独立”。
    X⊥ ⁣ ⁣ ⁣⊥Y∣Z\displaystyle X \perp\!\!\!\perp Y \mid Z
  2. 乘积分解\(P(X, Y \mid Z) = P(X \mid Z) P(Y \mid Z)\) 是两个条件概率的乘积等于联合条件概率——独立的核心定义。
    P(X,Y∣Z)=P(X∣Z)P(Y∣Z)\displaystyle P(X, Y \mid Z) = P(X \mid Z) P(Y \mid Z)
  3. 等价判断用这个等式是否成立来判定条件独立性,从而决定是否删除候选边。
      ⟺  \displaystyle \iff

敏感性分析

因果分析的最后一步是诚实面对不确定性。后门调整的结论建立在“Z 已经阻断了所有后门路径”的假设之上,但现实中总可能存在未观测混杂因子 U——比如你无法观测的“顾客当天心情”。当 U 既影响 X 又影响 Y 时,计算出的因果效应会被污染。敏感性分析要回答的问题是:“我的结论在多大程度上依赖于那些看不见的假设?”

方法很直接:给未观测混杂的强度设定不同的假设值(比如 U 对 X 和 Y 的效应大小),看因果效应估计值会如何漂移。如果效应从“正向显著”漂移到“接近零甚至反向”,说明结论很脆弱;如果效应方向始终不变,说明结论稳健。这可以概括为边界估计:

敏感性分析是因果推理的“质检报告”:它不声称结论绝对正确,而是坦白地告诉你“在最坏情形下结论会变成什么样”。主厨推广辣菜单前,会问自己:“如果顾客当天的心情好坏(U)同时影响了点辣菜和打分,我的结论还站得住吗?”——一个负责任的因果分析,必须经得起这样的灵魂拷问。

ATE∈[ATEobs−∣γ∣,ATEobs+∣γ∣]\displaystyle \text{ATE} \in \Big[\text{ATE}_{\text{obs}} - |\gamma|, \quad \text{ATE}_{\text{obs}} + |\gamma|\Big]
未观测混杂可能造成的最大偏差 \(\gamma\) 决定了因果效应估计值的不确定性区间。
  1. 观测效应\(\text{ATE}_{\text{obs}}\) 是“在现有数据上用后门调整算出的平均处理效应”,如“辣菜使满意度提升 0.5 分”。
    ATEobs\displaystyle \text{ATE}_{\text{obs}}
  2. 偏差幅度\(|\gamma|\) 表示未观测混杂 U 可能诱发的最大绝对偏差——它是 U 对 X 影响的强度与 U 对 Y 影响的强度之积。
    ∣γ∣\displaystyle |\gamma|
  3. 区间边界真实因果效应落在观测值加减偏差幅度构成的闭区间内。区间包含零则结论不稳健;远离零则结论可信。
    [ATEobs−∣γ∣,ATEobs+∣γ∣]\displaystyle [\text{ATE}_{\text{obs}} - |\gamma|, \text{ATE}_{\text{obs}} + |\gamma|]

AI 应用场景

AI 公平性审计平台

阶段:模型评估与治理(部署后监控)

解决的问题:信贷审核、招聘筛选等 AI 系统常被认为“存在歧视”,但传统解释工具只能展示“性别/地域特征与输出相关”,无法回答“歧视通过哪条因果路径产生、是直接歧视还是间接歧视”。这使得业务方无法有针对性地修复模型。

具体案例:某银行信用卡审批 AI 被举报“对某地区用户不利”。审计团队构建因果图:地区(A)→ 收入(M)→ 审批结果(Y)。do-calculus 将总效应分解为间接效应(地区通过收入差异影响审批,属于合理的风险定价)与直接效应(地区本身直接改变审批结果,属于地域歧视)。最终确认直接效应显著,团队删除了直连路径的特征,并通过反事实推理为每位被拒用户生成“若收入相同是否会被拒”的解释报告。

反事实营销与推荐系统

阶段:决策解释与策略优化

解决的问题:推荐系统需要回答“如果用户当初看到了另一种商品,他今天会不会转化?”——真实世界中无法做重复实验,传统 A/B 测试成本高昂且只适合小规模验证。

具体案例:某电商平台想为“未转化用户”生成挽回策略。因果推理团队建立用户活跃度、曝光商品、购买行为的因果图,用前门调整估计“曝光→点击→转化”的路径效应,再用反事实推理构造“假如推荐了更高折扣商品,该用户的购买概率”的高维估计。系统自动筛选出“反事实提升幅度最大”的用户群体,定向推送优惠券,转化率提升 23%,且不会对“本就会买”的用户浪费优惠成本。

药物与政策效应评估

阶段:实验设计前的事后评估(观察性研究)

解决的问题:医药和政策领域常无法开展大规模随机试验,而传统回归分析会因混杂因子(年龄、既往病史、收入等)产生偏差。后门调整和敏感性分析在这里成为标准工具。

具体案例:某卫生机构评估“社区运动干预计划”对居民健康的影响。由于参与者是自愿加入(存在自选择偏差),统计部门用后门准则选择合适的协变量集合(年龄、基础血压、社经地位)做分层加权,计算干预效应。随后进行敏感性分析,证明即使存在一个中等强度的未观测混杂,结论(干预使患病风险下降 12%)也不会翻转,为政策拨款提供了坚实的因果证据。

Python 演示

python33 行
import numpy as np  def simulate_confounded(n=5000, seed=42):    rng = np.random.default_rng(seed)    z = rng.normal(0, 1, n)                 # 混杂因子:顾客类型    x = 2.0 * z + rng.normal(0, 1, n)       # 处理:辣度    y = 1.5 * x + 2.0 * z + rng.normal(0, 1, n)  # 结果:满意度    return z, x, y  def naive_effect(x, y):    beta = np.cov(x, y, ddof=1)[0, 1] / np.var(x, ddof=1)    return beta  def backdoor_adjust(z, x, y):    design = np.column_stack([np.ones(len(x)), x, z])    beta, *_ = np.linalg.lstsq(design, y, rcond=None)    return beta[1]  def main():    z, x, y = simulate_confounded()    naive = naive_effect(x, y)    causal = backdoor_adjust(z, x, y)    print("观察相关系数估计(被混杂): %.3f" % naive)    print("后门调整因果效应(真实=1.5): %.3f" % causal)    print("偏差: %.3f" % abs(naive - causal))  if __name__ == "__main__":    main()
目的:用模拟数据演示“混杂因子如何污染相关分析,后门调整如何还原真实因果效应”。
  1. z = rng.normal(0, 1, n)生成混杂因子:顾客的“隐藏口味类型”,它是后面所有变量的共同上游。
  2. x = 2.0 * z + rng.normal(0, 1, n)处理变量由混杂因子驱动:爱吃辣的人更可能点辣菜。
  3. y = 1.5 * x + 2.0 * z + rng.normal(0, 1, n)结果同时被处理与混杂影响,真实因果效应被设定为 1.5。
  4. np.cov(x, y, ddof=1)[0, 1] / np.var(x, ddof=1)朴素回归:直接看 X 与 Y 的关联,混杂会让这个值偏离 1.5。
  5. np.column_stack([np.ones(len(x)), x, z])构造设计矩阵:在回归中同时放入 X 与 Z。
  6. beta[1]取出 X 的回归系数:在控制 Z 后,它等价于后门调整的因果效应估计。
  7. print("偏差: %.3f" % abs(naive - causal))输出朴素估计与因果估计的差距,直观展示混杂的破坏力。

常见误区

误区我做了回归分析,X 的系数显著为正,说明 X 确实导致了 Y。如果再加更多控制变量,结论就更可靠了。

正解回归系数在未经因果图指导时,只是条件相关性。若 X 与 Y 之间存在未阻断的后门路径,系数就是“关联”而非“因果”。后门调整的关键是先画出因果图,再选择合适的调整集——调错变量(如控制了对撞因子)反而会制造新的偏差。

为何常见:大多数统计课先教回归,而回归本身只是条件期望的工具,默认因果含义只有搭配因果假设才成立,初学者极易混淆。

误区do(X=x) 不就是“看 X=x 时的 Y 吗”?条件概率也能算,何必引入新符号?

正解条件概率 \(P(Y \mid X=x)\) 保留“X 被自然选择”的机制,X 的父节点依然在影响 X;而 \(\text{do}(X=x)\) 是外部强制干预,切断所有指向 X 的边。当存在混杂时两者差异巨大:观察数据中“点了辣菜的人满意度高”,不代表“强制所有人点辣菜满意度都高”。

为何常见:do 算子与条件概率在无混杂时结果相同,很多人只在简单无混杂的例子里认识符号,误以为两者恒等。

误区我有大数据,用因果发现算法跑一遍就能得到正确的因果图,不需要领域知识。

正解因果发现算法只能从数据中提取条件独立关系,同样的分布可能对应多张不同的因果图(马尔可夫等价类)。箭头方向的确定高度依赖假设和领域先验。数据能告诉你“有关联”,只有实验或理论能告诉你“谁指向谁”。

为何常见:机器学习界“数据驱动一切”的惯性思维让人低估了因果结构学习的不可辨识性。

误区把数据集中所有变量都放进回归,就消除了所有混杂,得到因果效应。

正解调整变量集合必须满足后门准则——阻断所有后门路径且不包含 X 的后代。盲目加入全部变量,可能控制了对撞因子(如同时受 X 和 Y 影响的变量)从而打开新的偏差通道,也可能控制了中介变量从而低估总效应。“多多益善”在因果调整中是危险的。

为何常见:传统回归教学强调“控制混杂”,但没讲清楚哪类变量该控制、哪类不该控制,导致“全变量回归”被误当作安全默认值。

误区反事实推理很强,所以可以任意回答“如果没有这个特征,模型会怎样”,不需要任何条件或图结构。

正解反事实推断必须建立在因果图结构和“一致性假设”基础上,即现实观察值等于对应潜在结果。不同场景下“该顾客是否曾被推荐过”会产生不同的反事实图,需要计算相应的截断分布。没有因果假设置于其上的“反事实”只是插值或臆测。

为何常见:反事实概念与人的直觉贴合,AI 从业者容易把语言模型的“如果……会怎样”想象当成严格的反事实因果推理。

面试题

Q1. 因果有向无环图(Causal DAG)的主要作用是什么?

单选题 · easy

  • A.描述变量间的相关联系
  • B.表达变量间的因果假设← 正确答案
  • C.直接替代机器学习模型
  • D.仅用于数据可视化展示

答案:B。因果图通过“节点 + 有向边”显式编码“谁直接影响谁”的因果假设。相关性只是统计关联的度量,而 DAG 的结构规定了干预计算所需的因果框架,是 do-calculus 的推理基础。

Q2. 关于“观察”与“干预”的区别,正确的是哪一项?

单选题 · easy

  • A.观察数据足以确定因果
  • B.干预是主动改变变量值← 正确答案
  • C.两者在数学上完全等价
  • D.干预无需依赖因果假设

答案:B。观察是被动记录自然发生的变量取值;干预通过 do 算子强制设定变量取值并切断其父边。只有干预才能直接对应随机实验,而观察数据必须在因果假设基础上借助后门、前门等方法才能估计效应。

Q3. 什么是“后门路径”?

单选题 · mid

  • A.所有从 X 到 Y 的路径
  • B.首条边指向 X 的路径← 正确答案
  • C.从 Y 到 X 的逆向路径
  • D.包含中介变量 M 的路径

答案:B。后门路径是从 X 出发、第一步边指向 X(即 X ← …… → Y)的非因果通路。它让混杂因子 Z 的关联混入 X 与 Y 的统计关系中。阻断所有后门路径是识别因果效应的关键步骤。

Q4. 在因果图中执行 do(X=x) 对应什么操作?

单选题 · mid

  • A.删除所有指向 X 的边← 正确答案
  • B.删除所有从 X 出发的边
  • C.增加一条指向 X 的边
  • D.仅改变 X 节点的颜色标记

答案:A。干预的核心是“外部接管”,因此要删除所有指向 X 的父边,使 X 不再受自然机制控制,再将其固定为 x。这与统计条件化(保留父边)的本质区别正是 do-calculus 的立足点。

Q5. 后门调整公式中,Z 集合必须满足什么条件?

单选题 · mid

  • A.Z 必须包含所有可观测变量
  • B.Z 阻断所有后门路径且无 X 后代← 正确答案
  • C.Z 与 X 必须完全无关
  • D.Z 必须是 X 的直接父节点

答案:B。后门准则要求 Z 阻断 X 到 Y 的所有后门路径,同时不得包含 X 的后代节点,否则会堵塞因果路径或引入对撞偏差。只取全部变量或只需父节点都是误解。

Q6. 前门调整适用于什么典型场景?

单选题 · mid

  • A.存在不可观测混杂且可观测中介← 正确答案
  • B.完全没有混杂因子干扰
  • C.所有变量均可被精确观测
  • D.只针对时间序列类型数据

答案:A。前门调整的价值在于:当混杂不可观测、后门路径无法阻断时,若能观测到中介变量 M,且 X→M→Y 路径捕获全部因果效应,则可以通过两阶段复合计算绕过混杂。这是后门准则失效时的备选方案。

Q7. 反事实问题“如果该用户当时没被推荐该商品,他会购买吗?”属于哪个层次?

单选题 · mid

  • A.关联层次(看数据相关性)
  • B.干预层次(做随机对照实验)
  • C.反事实层次(事后假设推理)← 正确答案
  • D.描述统计层次(汇总数据指标)

答案:C。因果推理的“关联 → 干预 → 反事实”三层次中,反事实是最高层:它结合现实观察证据与假设干预,回答“假如当初……”的平行世界问题,需要潜在结果框架与因果图结构支撑。

Q8. 用因果推理进行 AI 公平性审计时,正确的做法包括哪些?

多选题 · mid

  • A.构建因果图定位敏感属性到决策的路径← 正确答案
  • B.直接计算敏感属性与输出的相关系数
  • C.用 do-calculus 分离直接与间接歧视← 正确答案
  • D.忽略混杂因子直接对比不同群体均值

答案:AC。因果审计先画图定位路径,再用自然直接/间接效应公式拆解歧视来源。相关系数和群体均值只是观测关联,混杂因子会让它们误导结论,无法区分合理的背景差异与真正的歧视。

Q9. 未观测混杂存在时,敏感性分析可以做到什么?

多选题 · hard

  • A.给出因果效应的边界区间← 正确答案
  • B.评估结论对混杂强度的稳健性← 正确答案
  • C.完全消除所有混杂偏差
  • D.帮助判断结论是否会翻转← 正确答案

答案:ABD。敏感性分析通过假设未观测混杂的强度,计算效应的边界或 E 值,检验结论在极端情形下是否稳健。但它的本质是“压力测试”而非“偏差消除器”,无法真正观测或移除未观测混杂。

Q10. 关于 do-calculus 的规则与实际应用,正确的说法有哪些?

多选题 · hard

  • A.可删除与干预无关变量的条件项← 正确答案
  • B.特定条件下可交换观察与干预← 正确答案
  • C.无需因果图即可直接套用公式
  • D.前门与后门是它的具体实例← 正确答案

答案:ABD。do-calculus 的三条规则分别对应:移除无关干预、交换观察与干预、移除无关观察。后门前门调整都是其工程化实例。但所有规则都以因果图的 d-分离结构为前提,脱离因果图则无从使用。