深夜的“老周蛋糕店”失窃了:监控显示蛋糕在午夜不翼而飞,而同一条街的监控显示那晚下过雨。见习侦探阿明兴冲冲地喊:“我知道了!是雨水导致的失窃!”而他的 AI 助手“小元”却冷静摇头:“雨水和失窃碰巧一起出现,不代表雨水会偷蛋糕。你还没问最关键的问题——如果把后门锁好,蛋糕还会丢吗?” 这个“如果……还会吗”,正是因果推理(causal reasoning)的灵魂。阿明要破的,不只是“谁在案发现场”的统计题,而是“谁导致了谁”的因果题。本篇文章围绕大语言模型(LLM)的因果理解展开:从“相关不等于因果”的底层常识,到观察、干预、反事实三阶梯;从画“线索地图”般的因果图,到让模型自己发现因果结构;再到评估 LLM 因果力、用提示与微调增强它,最后讨论工程中常见的坑。读完你会明白:真正的 AI 因果理解,不是背得住多少统计规律,而是能不能在“换个世界重演一遍”时,依然作出稳定而可解释的判断。

岗位关联

学会因果理解,你将不只是“会跑模型的调参师”,而是能解释结论、设计干预、能守住产品底线的可信 AI 工程师。

目录
  1. 可视化演示
  2. 相关并非因果:雾里看花到廓清迷雾
  3. 因果三阶梯:从观察走向反事实
  4. 因果图语言:画一张“线索地图”
  5. 因果发现寻因:让数据自己画出箭头
  6. 大模型因果能力:小元到底懂多少
  7. 因果增强技术:给小元装上“因果外挂”
  8. 评估与基准:怎么考小元才算数
  9. 工程挑战与未来:守住可信 AI 底线
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

展示Transformer核心处理流程:输入嵌入与位置编码、多头自注意力计算、前馈网络、输出投影,含残差连接与层归一化。

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

输入嵌入与位置编码 输入token序列经嵌入矩阵映射为连续向量 位置编码注入序列顺序信息 x = Emb(token) + PE(pos) 嵌入向量叠加位置编码作为网络输入

相关并非因果:雾里看花到廓清迷雾

阿明盯着第一版案情报告,兴奋地划出一条结论:“全市的蛋糕失窃案,80% 都发生在雨夜!所以雨是罪魁祸首。”小元被逗笑了:“阿明,你描述的是‘相伴’,不是‘导致’。要想知道雨有没有偷蛋糕,得问另一个问题——如果人为让天下雨,蛋糕店失窃率会变高吗?”在统计学家嘴里,前者叫“相关”,后者才叫“因果”。

从数学上区分这两者,需要引入一个看起来很像、意义却迥异的记号:do 算子。do(X=x) 表示“人为把 X 固定为 x”,如同阿明亲手锁上门再观察结果;而 X=x 只是“路过现场时看到 X 等于 x”。两者之差,就是相关与因果之间的鸿沟。

为什么现实中这么容易混淆?因为有一个隐形角色躲在幕后:混淆变量。雨天既让伙计偷懒忘锁门,又让街上行人稀少方便作案,于是“下雨”和“失窃”看起来牢牢绑定,其实两者都被“店员疏忽”这个第三方驱动。更反直觉的是辛普森悖论:如果一种药在男性和女性分组中都有效,但合并所有数据后反而显得有害,原因同样是“性别”这个混淆变量在组间分布不均。阿明若只信报表明细,就会冤枉良药。

P(Y∣do(X=x))≠P(Y∣X=x)\displaystyle P(Y \mid do(X=x)) \neq P(Y \mid X=x)
这个公式说:看到 X 时的 Y 分布,不等于强行设置 X 后的 Y 分布。观察到的“共现”往往是假象,真正的因果需要干预来验证。
  1. 观察事件$X=x$ 表示我们“看见”变量 X 恰好取值为 x,就像阿明看见后门当时是虚掩的,这是被动观测。
    X=x\displaystyle X=x
  2. 干预动作$do(X=x)$ 表示我们“强行把 X 变成 x”,好像阿明亲手把后门锁上,切断所有外界对门的干扰。
    do(X=x)\displaystyle do(X=x)
  3. 条件概率$P(Y \mid X=x)$ 是在“看到门没锁”这个现场下,蛋糕失窃的概率,结论来自历史共现记录。
    P(Y∣X=x)\displaystyle P(Y \mid X=x)
  4. 干预概率$P(Y \mid do(X=x))$ 是“强制锁门”后蛋糕失窃的概率,代表因果效应本身。
    P(Y∣do(X=x))\displaystyle P(Y \mid do(X=x))
  5. 不等号$\neq$ 强调观察相关与因果效应不一定相同。一旦混淆二者,就会把“雨天”当小偷,放跑真正的“后门”。
    ≠\displaystyle \neq

因果三阶梯:从观察走向反事实

小元把侦探的工作方法总结成三个台阶:“阿明,你破案有三问。第一问:你看到什么?后门开着、蛋糕没了——这是观察。第二问:如果你把门锁上,蛋糕还会丢吗?——这是干预。第三问:如果昨晚锁了门,蛋糕是不是就不会丢?——这是反事实。”这三个问题,恰好对应 Pearl 提出的“因果三阶梯”。

观察层级(L1)只记录“看见的规律”,比如雨天失窃率高;干预层级(L2)回答“我改变环境后会发生什么”,比如人工锁门实验;反事实层级(L3)回答“在既成事实下换个选择会怎样”,比如“当初锁门”这个平行世界。越往上走,问题越难,需要的信息与模型假设也越多。LLM 在观察层可以靠海量语料“偷懒”,但到了反事实层,就需要真正的结构理解。

阿明若有所思:“所以小元,你要当个好侦探,不能只背监控记录,还得学会‘在脑子里重开一局’。”反事实正是人类区别于“统计鹦鹉”的核心能力,也是衡量 LLM 因果理解深浅的试金石。

L1: P(Y∣X=x),L2: P(Y∣do(X=x)),L3: P(Yx′∣X=x,Y=y)\displaystyle \mathcal{L}_1:\ P(Y \mid X=x), \qquad \mathcal{L}_2:\ P(Y \mid do(X=x)), \qquad \mathcal{L}_3:\ P(Y_{x'} \mid X=x, Y=y)
三个层级依次表示:被动观察一个条件概率、主动干预一个变量、在已知结果的前提下反推“假如当初”。层级越高,因果味越浓。
  1. 观察层(L1)$P(Y \mid X=x)$ 是“如果看到 X 是 x,Y 怎样”的概率,它回答“看见了什么”,不改变任何东西。
    L1: P(Y∣X=x)\displaystyle \mathcal{L}_1:\ P(Y \mid X=x)
  2. 干预层(L2)$P(Y \mid do(X=x))$ 是“如果我强行把 X 设成 x,Y 怎样”的概率,它回答“做了会怎样”,切断了外部对 X 的影响。
    L2: P(Y∣do(X=x))\displaystyle \mathcal{L}_2:\ P(Y \mid do(X=x))
  3. 反事实层(L3)$Y_{x'}$ 表示“在保持已知条件 $X=x$ 和 $Y=y$ 的情况下,如果当初换成 $x'$,Y 会怎样”,它回答“假如当初”,是全篇最硬核的因果问题。
    L3: P(Yx′∣X=x,Y=y)\displaystyle \mathcal{L}_3:\ P(Y_{x'} \mid X=x, Y=y)
  4. 层级递进从 L1 到 L3,所需假设从“无”到“需要完整因果模型”,难度递增;能回答 L3 的系统,也一定能回答 L1 和 L2。
    L1⊂L2⊂L3\displaystyle \mathcal{L}_1 \subset \mathcal{L}_2 \subset \mathcal{L}_3

因果图语言:画一张“线索地图”

阿明发现线索太多,干脆把蛋糕店所有嫌疑因素画成一张图:节点是“雨、后门、伙计、小偷、失窃”,从“伙计偷懒”指向“后门虚掩”,从“后门虚掩”指向“失窃”。小元点头:“这就是因果图,画箭头的人是在宣称‘谁直接导致谁’。”

这种图在数学上叫有向无环图(DAG):每条边有方向,且不能兜圈子产生循环。有了图,我们就能把原本庞大的联合概率拆成一串“每个变量只看它的直接原因”的小块。就像阿明不用把所有线索一天看完,只需顺着箭头逐户敲门。因果图还带来一个强大工具——d-分离:给定一组节点 Z 后,如果图上 X 和 Y 之间的所有路径都被阻断,就说它们在图上“条件独立”,这为判断“哪些相关是假的”提供了几何式的直觉。

有了这张线索地图,阿明不再被“雨夜”这种表面相关性牵着鼻子走:只要在地图上找出阻断路径的中间人,就能识破假线索。LLM 若能把隐式知识组织成这种结构化图表,因果推理能力将显著增强。

P(V)=∏i=1nP(Vi∣Pa(Vi))\displaystyle P(V) = \prod_{i=1}^{n} P(V_i \mid \mathrm{Pa}(V_i))
联合概率等于每个变量在自己“父节点”(直接原因)条件下的概率之积。因果图把复杂案情拆成了一个个可以逐个审理的小案件。
  1. 变量集合$V$ 表示现场所有相关变量,如雨、后门、失窃等,来自阿明的案情清单。
    V={V1,V2,…,Vn}\displaystyle V = \{V_1, V_2, \dots, V_n\}
  2. 父节点$\mathrm{Pa}(V_i)$ 是因果图中直接指向 $V_i$ 的节点,也就是“直接原因”,例如“后门虚掩”是“失窃”的父节点。
    Pa(Vi)\displaystyle \mathrm{Pa}(V_i)
  3. 条件概率$P(V_i \mid \mathrm{Pa}(V_i))$ 表示在已知直接原因的条件下,$V_i$ 出现的概率,排除了更远祖先的干扰。
    P(Vi∣Pa(Vi))\displaystyle P(V_i \mid \mathrm{Pa}(V_i))
  4. 连乘分解$\prod$ 把所有 $P(V_i \mid \mathrm{Pa}(V_i))$ 乘在一起,得到全局联合概率 $P(V)$。这被称为因果图的链式法则或马尔可夫分解,是很多因果推断算法的基础。
    P(V)=∏i=1nP(Vi∣Pa(Vi))\displaystyle P(V) = \prod_{i=1}^{n} P(V_i \mid \mathrm{Pa}(V_i))

因果发现寻因:让数据自己画出箭头

蛋糕店失窃案越查越大,阿明把全市十年的监控数据扔给小元:“线索太多,我手工画图不现实,你能不能自动找出箭头?”小元回答:“可以。我给你一摞数据,我用条件独立性检验来剪枝:如果两个变量在给定某些条件后已经互相独立,那它们之间就不该有直接箭头。”

自动从数据中学习因果图的方法主要分两种:一是约束式搜索,代表算法是 PC 算法,它反复做条件独立检验,删掉多余的边,再确定箭头方向;二是评分式搜索,给每张候选图打一个分(如 BIC),选出与数据最吻合的图。核心思想是“让数据说话”,但前提是数据要足够好,且不能违反忠实性等假设。这就像阿明看监控:如果摄像头本身糊了、角度歪了,再好的图也画不出真相。

阿明把自动画出的因果图与手工推理一对比,发现雨水的箭头消失了,后门到失窃的箭头清晰可见。“原来数据也会说人话,”他感叹道,“只要问对问题、用对方法。”这也提醒我们:因果发现是“机器辅助假设生成”,而非“全知全能的天眼”。

X⊥GY∣Z  ⇒  X⊥PY∣Z\displaystyle X \perp_{\mathbb{G}} Y \mid Z \;\Rightarrow\; X \perp_{\mathbb{P}} Y \mid Z
图上被 Z 阻断路径的 X、Y 两节点(d-分离),在真实数据分布中也应条件独立。因果发现算法正是利用这个方向性的规律来修剪错误连线。
  1. 图上的分离$X \perp_{\mathbb{G}} Y \mid Z$ 表示在因果图 G 中,给定节点集合 Z 后,X 和 Y 之间所有路径都被阻断,称为 d-分离。
    X⊥GY∣Z\displaystyle X \perp_{\mathbb{G}} Y \mid Z
  2. 数据上的独立$X \perp_{\mathbb{P}} Y \mid Z$ 表示在真实概率分布 P 中,给定 Z 后 X 与 Y 条件独立。
    X⊥PY∣Z\displaystyle X \perp_{\mathbb{P}} Y \mid Z
  3. 蕴含箭头$\Rightarrow$ 表示“若图上 d-分离,则数据中条件独立”。这一性质叫因果马尔可夫性,是约束式搜索的理论基石。
    ⇒\displaystyle \Rightarrow
  4. 反用做发现因果发现算法反过来用:如果数据中表现出条件独立,就删除对应边;保留的边再借助方向规则确定因果箭头。
    独立性检验→删边→定向\displaystyle \text{独立性检验} \rightarrow \text{删边} \rightarrow \text{定向}

大模型因果能力:小元到底懂多少

新线索来了:小元没读任何新卷宗,却直接说出“锁门能防失窃,雨不会偷东西”。阿明震惊:“你明明没做过实验,怎么知道?”小元解释:“我在预训练阶段读过数不清的案件记录、科学论文和百科知识,这些文本里本身就写了大量因果结论。我的参数里沉淀了一种‘隐式因果知识’。”

研究者发现,LLM 确实能在很多场景中识别混淆变量、预测干预效果,甚至完成一定程度的反事实推理。但也必须清醒:这种因果能力是“从人类语言化石中学来的直觉”,而不是真正在世界里做实验验证过的严谨结构。好比一个读书破万卷的侦探,能猜到凶手是谁,却不代表他亲自勘查过每一间密室。论文实验常用“反事实改写”来测试:把句子里的主体或场景换成同类对象,LLM 的答案是否保持稳定?如果一换就崩,说明它只是在背套路。

阿明盯着小元:“原来你是个‘理论派侦探’。”小元大方承认:“我强在知识面广、上手快,弱在没有真实世界的因果验证。你得用评估基准盯着我,别让我一本正经地胡说八道。”

Acc=1N∑i=1N1[y^i=yi∗]\displaystyle \mathrm{Acc} = \frac{1}{N} \sum_{i=1}^{N} \mathbb{1}[\hat{y}_i = y_i^*]
这是最常用的准确率:在 N 道反事实考题中,模型给出的答案与标准答案一致的比例。一致率越高,说明因果理解越稳定、越不靠死记硬背。
  1. 考题总数$N$ 是反事实或干预预测题的条数,例如“若锁门,失窃概率会怎样”。
    N\displaystyle N
  2. 模型答案$\hat{y}_i$ 是 LLM 对第 i 题的回答,比如“不会失窃”。
    y^i\displaystyle \hat{y}_i
  3. 标准答案$y_i^*$ 是数据集的标注答案,源自人工推理或已知因果事实。
    yi∗\displaystyle y_i^*
  4. 指示函数$\mathbb{1}[\hat{y}_i = y_i^*]$:若两者一致则记 1,否则记 0,把“答对”变成数数问题。
    1[y^i=yi∗]\displaystyle \mathbb{1}[\hat{y}_i = y_i^*]
  5. 求均值$\tfrac{1}{N}\sum$ 把所有题的 0/1 得分取平均,得到 0 到 1 之间的准确率,越接近 1 越强。
    1N∑i=1N1[y^i=yi∗]\displaystyle \frac{1}{N} \sum_{i=1}^{N} \mathbb{1}[\hat{y}_i = y_i^*]

因果增强技术:给小元装上“因果外挂”

既然小元有潜力但不够稳,阿明开始训练它。他先改变提问方式:不再直接问“结论是什么”,而是要求“请先列出如果锁门、如果不锁门两条世界线,再给出结论”。这种“先走后跑”的推理方式,就是思维链提示,它迫使模型把隐式的因果链条显式化,显著减少跳步错误。

除了提示,还可以做因果微调:用带因果标注的数据(如“原因→结果→干预→反事实”)对模型做二次训练,让参数更贴合因果推理的句式。再配合检索增强:让模型先检索可信文献中关于“门锁与失窃”的证据,再回答。这些方法像给侦探配上了推理手册、案卷库和复核员。实验表明,加了思维链后,LLM 在因果基准上的表现往往有明显提升,但增益会因任务和模型规模而变化。

小元在加入思维链后,破案报告明显更有条理:“锁门后窃贼无法进入,所以失窃不会发生;若不锁门,任何人都可能顺手牵羊。”阿明点点头:“看来激发潜力和死记硬背,效果真的不一样。”

Δ=AccCoT−Accdirect\displaystyle \Delta = \mathrm{Acc}_{\text{CoT}} - \mathrm{Acc}_{\text{direct}}
思维链带来的增益:在使用思维链提示时的准确率,减去直接作答时的准确率。如果增益为正,说明“先想后答”确实优于“张口就来”。
  1. 直接作答$\mathrm{Acc}_{\text{direct}}$ 是让 LLM 不加推理步骤、直接输出因果结论的准确率。
    Accdirect\displaystyle \mathrm{Acc}_{\text{direct}}
  2. 思维链作答$\mathrm{Acc}_{\text{CoT}}$ 是让 LLM 先写出“如果……那么……”的推理链条再作答的准确率。
    AccCoT\displaystyle \mathrm{Acc}_{\text{CoT}}
  3. 增益差$\Delta$ 是二者的差值。$\Delta > 0$ 说明显式推理有效,$\Delta$ 越大越值得采用。
    Δ=AccCoT−Accdirect\displaystyle \Delta = \mathrm{Acc}_{\text{CoT}} - \mathrm{Acc}_{\text{direct}}

评估与基准:怎么考小元才算数

小元说自己“懂因果”,阿明决定出套卷子考它。考题分三类:第一类是干预预测,问“给病人服药,痊愈率会不会上升”;第二类是反事实推理,问“小明没吃药也好了,如果他当时吃药,会不会好得更快”;第三类是对抗改写,把句中“医生”换成“兽医”、“蛋糕”换成“面包”,看模型是否还坚持原答案。这些标准化的“考卷”,就是因果基准数据集。

设计良好的基准不仅要看总分,还要看“稳定性”。如果模型在原题上得 90 分,换个马甲只剩 40 分,说明它靠语言痕迹而非因果结构作答。常用的鲁棒性指标会计算对抗样本与原始样本的准确率之差,差值越小,说明模型越接近“真懂”。

阿明看到小元的成绩单哭笑不得:原题答得漂亮,把“蛋糕”换成“面包”后正确率掉了一截。“小元,你考的是‘背答案’,不是‘会破案’。”小元也服气:“所以人类需要设计更狠的考卷来逼我成长。”

R=1M∑j=1M(Accjanti−Accjorig)\displaystyle R = \frac{1}{M} \sum_{j=1}^{M} \left( \mathrm{Acc}^{\text{anti}}_j - \mathrm{Acc}^{\text{orig}}_j \right)
这是因果鲁棒性分数:对抗改写后准确率比原始准确率低多少。负得越少,甚至接近零,说明模型没有被表面词汇干扰,因果判断更稳健。
  1. 原始题目$\mathrm{Acc}^{\text{orig}}_j$ 是第 j 组原始因果题的模型准确率。
    Accjorig\displaystyle \mathrm{Acc}^{\text{orig}}_j
  2. 对抗改写$\mathrm{Acc}^{\text{anti}}_j$ 是把题中无关名词替换后(主体、地点、物品变化)的准确率。
    Accjanti\displaystyle \mathrm{Acc}^{\text{anti}}_j
  3. 逐组求差差值 $\mathrm{Acc}^{\text{anti}}_j - \mathrm{Acc}^{\text{orig}}_j$ 衡量模型是否“换汤就换药”,越接近 0 越好。
    Accjanti−Accjorig\displaystyle \mathrm{Acc}^{\text{anti}}_j - \mathrm{Acc}^{\text{orig}}_j
  4. 取平均$\frac{1}{M}\sum_{j=1}^{M}$ 对所有改写题型取平均,得到整体鲁棒性分数 $R$。
    1M∑j=1M\displaystyle \frac{1}{M} \sum_{j=1}^{M}

工程挑战与未来:守住可信 AI 底线

虽然小元进步神速,但阿明心里清楚:真实世界比考卷复杂得多。报告里满是看似合理的“因果解释”,比如“因为客户看了三天页面没下单,所以是我们的推荐算法不行”——这很可能只是混淆变量在作祟,比如客户本来就不需要这个商品。更可怕的是,LLM 会生成听起来因果味十足、实际毫无依据的“幻觉归因”,把产品的失败甩锅给无关因素。

要治理这些乱象,工程上需要三管齐下:一是用因果结构模型显式建模关键变量,让模型在受限的因果图上推理,而不是自由发挥;二是引入人机协同,由领域专家审核因果图与关键结论,把模型当作高杠杆的“假设生成器”;三是持续用对抗基准监控线上表现,及时发现因果能力退化。因果推理的最终目标,是让 AI 在做出“如果当初……会不会……”的判断时,拥有可验证、可解释的根基,而非仅仅语言上的优雅。

阿明合上卷宗,终于理解小元的价值与风险:它能提出“锁门能破案”的好假设,也能编造“月亮惹的祸”的坏解释。只有人类与 AI 各自发挥优势——人提供结构与经验,模型提供速度与广度——才能真正守住可信 AI 的底线。

Yx(u)  :  在 do(X=x) 下,个体 u 的潜在结果\displaystyle Y_x(u) \;:\; \text{在 } do(X{=}x) \text{ 下,个体 } u \text{ 的潜在结果}
这是反事实的个体定义:对特定个体 u,若强行实施干预 X=x,Y 会取何值。它让“假如当初锁门”这句话从修辞变成可计算的问题。
  1. 个体对象$u$ 指某个具体场景或个体,如“昨晚老周蛋糕店的现场”。
    u\displaystyle u
  2. 干预设置$do(X{=}x)$ 是把 X 强制置为 x,如“强制锁门”。
    do(X=x)\displaystyle do(X{=}x)
  3. 潜在结果$Y_x(u)$ 表示该个体在干预后的结果变量取值,它属于平行世界的“假设结果”。
    Yx(u)\displaystyle Y_x(u)
  4. 推断意义反事实结果不能直接观测,但通过结构因果模型,可以利用观测数据、干预数据和图的约束来估计,这正是工程落地的基础。
    Yx(u)=模型推断出的潜在结果\displaystyle Y_x(u) = \text{模型推断出的潜在结果}

AI 应用场景

医疗诊断辅助:纠正“吃药更危险”的假象

阶段:因果效应估计与结果解释

解决的问题:医院观察到“吃药的患者死亡率反而更高”,传统统计模型若直接建模会得出“药物有害”的错误结论。AI 通过混淆变量(病情严重程度)分层与后门调整,估计出真实的因果效应,避免错误用药决策。

具体案例:某三甲医院用 LLM 解读病史文本,抽取“基础疾病、用药、转归”三元组,构建因果图后发现:重症患者更可能被开药,导致“吃药”与“高死亡”共现。经 do-算子的分层校正,模型准确告诉医生:药物对轻重症都有正向保护作用。

智能客服归因:分清“用户抱怨”与“产品缺陷”

阶段:文本因果抽取与反事实问答

解决的问题:用户投诉“页面太卡所以退款”,平台若只统计关键词共现,会把“卡顿”当全责。AI 用因果理解来判断:卡顿是真实诱因,还是用户对价格不满的托词;再通过反事实生成“如果页面不卡,用户还会退款吗”的评估。

具体案例:某电商 LLM 客服系统在处理退款时,自动抽取对话中的因果链(“页面卡顿”→“等待过久”→“退款”),结合订单时长、网络类型等上下文数据,判断卡顿是否系统性问题,并输出带置信度的归因报告,人工复核量减少 60%。

科研文献挖掘:从论文海量文本中提炼因果主张

阶段:因果知识抽取与假设生成

解决的问题:科研人员每天要读上百篇论文,难以快速筛选哪些研究真正建立了因果关系。LLM 基于隐式因果知识,可抽取“干预→结局”句子对,并按因果三阶梯分类,帮助科学家生成可验证的新假设。

具体案例:药物研发团队用 LLM 扫描 5 万篇生物医学摘要,自动抽取出“A 基因敲除→B 通路激活→细胞增殖抑制”的链条,再交由湿实验验证,将候选靶点筛选周期从数月缩短到两周。

Python 演示

python39 行
import numpy as npimport pandas as pd rng = np.random.default_rng(42)n = 6000 # 混淆变量 Z:1 表示重症患者,0 表示轻症患者Z = rng.binomial(1, 0.5, n) # 服药倾向 X:重症患者更可能服药(95% vs 10%)p_x = np.where(Z == 1, 0.95, 0.1)X = rng.binomial(1, p_x) # 痊愈结果 Y:无论轻症还是重症,服药者的痊愈率都更高p_y = np.where(    X == 1,    np.where(Z == 1, 0.25, 0.55),    np.where(Z == 1, 0.15, 0.45),)Y = rng.binomial(1, p_y) df = pd.DataFrame({"Z": Z, "X": X, "Y": Y})df["group"] = np.where(Z == 1, "重症", "轻症")  def effect(g):    treated = g.loc[g.X == 1, "Y"].mean()    control = g.loc[g.X == 0, "Y"].mean()    return treated - control  means = df.groupby("X")["Y"].mean()overall_effect = means.loc[1] - means.loc[0]print("总体痊愈率:未服药=%.3f,服药=%.3f" % (means.loc[0], means.loc[1]))print("总体效应(服药-未服药): %.3f" % overall_effect) print("分层效应:")for name, group in df.groupby("group"):    print("  %s组 服药效应 = %.3f" % (name, effect(group)))
目的:用模拟数据完美复现辛普森悖论——合并数据时“服药有害”,分层后“服药有益”,直观演示混淆变量如何扭曲因果结论。
  1. Z = rng.binomial(1, 0.5, n)随机生成轻症/重症分组,这是后续一切“假象”的幕后推手。
  2. p_x = np.where(Z == 1, 0.95, 0.1)重症患者服药概率远高于轻症,导致“是否服药”与“病情轻重”纠缠不清。
  3. p_y = np.where(...)每个病情分层内,服药者的痊愈率都比未服药者高 10%,这是真实的因果效应。
  4. df.groupby("X")["Y"].mean()直接按“是否服药”算痊愈率,看起来服药组更差,实际是重症患者在服药组里占比过高的假象。
  5. effect(g)按病情分层计算“服药效应”,剥开混淆变量后,真实的正向药效立即显现。

常见误区

误区我做了个分析,发现“冰淇淋销量”和“溺水人数”的相关系数高达 0.9,那肯定就是吃冰淇淋导致溺水,应该禁止卖冰淇淋!

正解这两个变量都被第三个变量“气温”驱动:天热,大家既爱吃冰也爱下水。相关只说明两个变量“形影不离”,因果要求“我推你一把,你才动”。像冰淇淋和溺水,一旦控制住气温,二者立刻“翻脸不认人”。判别方法很简单:问一句“如果我强行改变 X,Y 会变吗?”如果能回答,才谈得上因果。

为何常见:人类大脑天生爱找模式、讲因果故事,而统计工具直接输出的相关系数又太好拿到,让人误以为“数字显著”等于“关系真实”。

误区大模型不就是个超级“词频预测器”吗?它只是在猜下一个词,根本不可能有因果理解。

正解预训练语料里包含了大量人类写的因果结论(实验报告、科学文献、故事),模型在学习语言的同时,把这些因果关系的“神经痕迹”压缩进了参数中。研究显示 LLM 能较稳定地回答不少干预与反事实问题。但它的因果知识是隐式、间接的,容易在分布外或对抗改写场景下失效。正确态度是:承认它有“因果直觉”,但必须用基准和干预实验严格验证。

为何常见:人们把“理解”想象成全有或全无,又习惯拿 LLM 早期按字面统计的失败案例以偏概全,因此低估了大规模预训练带来的结构知识。

误区我上线了 A/B 测试,把用户分成两组分别看不同页面,点击率有差异,所以这个页面改动就是“因”,点击率提升就是“果”。

正解良好随机的 A/B 实验确实是因果推断的金标准,但工程中常有漏洞:样本分流是否真正随机?是否存在“用户自选择”?有没有中间变量被同时操纵?更隐蔽的是,现实约束下很多问题不能做实验(比如“让用户熬夜”),这时就要靠 do-算子、后门调整和因果图做“从观察数据中识别因果”的数学推导。实验也好、观察也罢,关键是画出假设图并检验混淆变量。

为何常见:A/B 测试的概念深入人心,人们误以为“对照实验”四个字就自动消解了所有混淆,忽略了实施细节与无法实验的场景。

误区因果结构这么复杂,肯定是几个专家坐在一起拍脑袋画出箭头,机器学习在这种“先验知识”面前无能为力。

正解因果发现算法(如 PC、GES)能从观测数据中自动学习 DAG:先用条件独立检验删边,再用评分函数选图,还能借助半实验数据确定方向。只不过它依赖数据质量、充分性和忠实性等假设,输出只能视为“候选因果图”。更现实的工程做法是“专家先验 + 数据修正 + 模型推断”三方协作,而不是非此即彼。

为何常见:因果图常被描述成“领域知识建模”,教材又很少讲自动发现,导致初学者以为它与数据驱动方法天然对立。

面试题

Q1. 下列对“相关”与“因果”关系的描述正确的是?

单选题 · easy

  • A.相关性强就必然存在因果关系
  • B.因果关系不一定体现为统计相关← 正确答案
  • C.相关数据无法提供任何因果线索
  • D.只要样本量大,相关即可等同因果

答案:B。相关只是“相伴出现”,因果要求“干预后结果随之改变”。B 正确:真实的因果效应可能被混淆变量掩盖,在未调整的数据上不显示为相关。A、D 把相关吹捧为因果,C 又完全否定相关作为线索的价值,都走了极端。就像雨夜与失窃高度相关,但干预“下雨”并不会导致失窃。

Q2. 混淆变量的典型特征是?

单选题 · mid

  • A.同时影响 X 与 Y,制造虚假相关← 正确答案
  • B.只影响 X,与 Y 毫无关系
  • C.只影响 Y,与 X 毫无关系
  • D.与 X、Y 完全独立,不起作用

答案:A。混淆变量是“幕后推手”:它既推了 X 一把,又推了 Y 一把,于是 X 和 Y 看起来关系紧密,实则都是它的提线木偶。就像“病情严重程度”同时影响“是否服药”和“痊愈率”,造成服药有害的假象。其余选项描述的不是混淆变量,而是无关变量。

Q3. 因果三阶梯(L1、L2、L3)的正确顺序是?

单选题 · easy

  • A.观察、干预、反事实← 正确答案
  • B.干预、观察、反事实
  • C.反事实、观察、干预
  • D.观察、反事实、干预

答案:A。因果三阶梯从低到高依次是观察(看到什么)、干预(做了什么会怎样)、反事实(假如当初会怎样)。阶梯越高,越需要更强的因果模型,也越接近人类“复盘式”的推理方式。其他顺序都打乱了从被动到主动再到“平行世界”的自然递进。

Q4. 下列属于反事实推理的是?

多选题 · hard

  • A.看到下雨天蛋糕店失窃率更高
  • B.锁门后实验组失窃率显著下降
  • C.想象昨晚若锁门蛋糕是否还丢← 正确答案
  • D.统计近十年雨夜失窃案占比

答案:C。反事实的核心是“在结果已定的前提下,假设改变原因再推演结果”。C 正是“已知失窃已发生,假如当初锁门”的平行世界推演。A、D 是观察层级的统计描述,B 是干预层级的真实实验,都够不上反事实。

Q5. 因果记号 do(X=x) 表示?

单选题 · easy

  • A.观察样本中 X 恰好取值为 x
  • B.人为干预使 X 固定为 x← 正确答案
  • C.预测 X 在未来出现的概率
  • D.删除所有包含 X 的数据

答案:B。do(X=x) 是 Pearl 提出的干预算子,意为“强行把 X 设为 x”,同时切断外部变量对 X 的影响。A 是普通条件概率中的“看见”,C、D 与干预无关。就像“看见门虚掩”和“亲手锁门”是两码事,前者观察,后者干预。

Q6. 关于 d-分离在因果图中的作用,正确的是?

单选题 · mid

  • A.用于判断图上两个节点是否条件独立← 正确答案
  • B.只能用于计算回归系数的大小
  • C.用来证明相关就是因果
  • D.无法在结构因果模型中应用

答案:A。d-分离是因果图上的几何判据:给定一组节点 Z,若 X 到 Y 的所有路径都被阻断,则说 X 与 Y 在图上是 d-分离的,对应数据中应该条件独立。它是因果发现和混淆识别的基础工具。B、C、D 都错在贬低或错解了它的用途。

Q7. 下列属于因果发现主流方法的是?

多选题 · mid

  • A.约束式搜索,如 PC 算法← 正确答案
  • B.评分式搜索,如 BIC 打分← 正确答案
  • C.使用 k 均值聚类寻找因果关系
  • D.计算词向量间的余弦相似度

答案:AB。因果发现的两大类方法是约束式(PC 算法通过条件独立检验删边定角)和评分式(对候选 DAG 计算 BIC 等得分选最优)。聚类是无监督打散样本,余弦相似度是文本相似度度量,都未触及因果结构学习。

Q8. 关于 LLM 的隐式因果知识,下列认知正确的是?

单选题 · mid

  • A.LLM 完全不具备任何因果知识
  • B.LLM 拥有部分隐式因果知识但不稳定← 正确答案
  • C.LLM 在所有反事实场景中都表现稳健
  • D.LLM 只能机械记忆表面词语共现

答案:B。预训练语料包含大量人类因果结论,LLM 因此具备一定隐式因果能力,能回答部分干预和反事实题;但在对抗改写、分布外场景下容易失效。A、C 各走一个极端,D 低估了模型从语言中抽象结构关系的能力。

Q9. 辛普森悖论给数据分析师的核心启发是?

单选题 · hard

  • A.合并数据的相关结论可能被分层数据翻转← 正确答案
  • B.样本量越大,相关就越接近因果
  • C.只要相关性显著,就无需控制变量
  • D.统计学无法处理任何分组矛盾

答案:A。辛普森悖论说明:总体汇总后呈现的关系,可能与每个子群内部的关系方向截然相反,根因是混淆变量在分组间分布不均。它提醒我们建模前必须思考混淆变量,必要时做分层或调整。B、C 恰是悖论所反讽的粗暴做法,D 则夸大了困难。

Q10. 关于反事实结果 Y_x(u),以下说法正确的是?

多选题 · extreme

  • A.它描述平行世界里对个体 u 干预后的结果← 正确答案
  • B.它只能通过被动观察直接获得
  • C.结构因果模型可以支持对它的推断← 正确答案
  • D.它需要保持已知条件后再重写历史← 正确答案

答案:ACD。Y_x(u) 是反事实“潜在结果”的个体化表达,刻画“若强行干预 X=x,个体 u 会怎样”。被动观察只能看到已发生的一种结果,不能直接得到反事实,因此 B 错;结构因果模型借助图、干预分布与一致性条件可推断反事实,A、C、D 均正确。