1.3 条件概率、全概率公式、贝叶斯与独立性


1.3 条件概率、全概率公式、贝叶斯与独立性

本节摘要:条件概率 P(A|B) = P(A∩B)/P(B) 回答"已知 B 发生后 A 的概率如何更新";全概率公式把复杂事件按原因分解求和;贝叶斯公式是它的逆运算,从结果反推原因;独立性 P(A∩B)=P(A)P(B) 则是"信息不更新"的特例。本节用赌场中的"换门游戏"与"体检误诊"两个案例,把条件概率的三种表达式(条件、全概率、贝叶斯)串成一条完整的推理链。

信息改变概率:条件概率的直觉

先看一个赌场场景。骰子掷出后,荷官看了一眼偷偷告诉你:"点数比 3 大。"——信息来了,你的判断该更新了。原来 P(偶数)=1/2,现在已知点数 ∈ {4,5,6},偶数占其中两个,所以 P(偶数 | 点数>3)=2/3。

这就是条件概率:在已知 B 发生的条件下重新评估 A 的概率。定义只有一个公式:

P(A|B) = \frac{P(A \cap B)}{P(B)}, \quad P(B) > 0

直观理解:B 已经发生,样本空间收缩成 B,A 在收缩后的空间里占的份额是 A∩B 相对 B 的比例。条件概率不是新概念,而是"换了一个样本空间"的普通概率——所有概率公理在条件概率下依然成立,这是它好用(也常被误用)的根源。

乘法公式与全概率公式:从条件到整体

把条件概率定义变形得到乘法公式

P(A \cap B) = P(A|B)\,P(B)

这是求"两个事件同时发生"概率的通用武器——先发生一个,再在它的条件下发生另一个。赌场里的典型应用是"抽牌不放回":从 52 张牌中连抽两张都是 A 的概率 = (4/52)×(3/51)。

乘法公式再往前推一步就是全概率公式。设 B₁,…,Bₙ 是样本空间的一个分割(互斥且并集为 Ω),则对任意事件 A:

P(A) = \sum_{i=1}^{n} P(A|B_i)\,P(B_i)

它把"求 A 的总概率"分解成"按原因 Bᵢ 分情况讨论再加权求和"。赌场版:一个轮盘有红、黑、绿三色,押"红"的玩家赢的概率,要分"落在红格""落在黑格""落在绿格"三种情况分别算再相加。全概率公式解决的是"从因到果"的正向问题。

贝叶斯公式:从结果反推原因

全概率公式的逆运算就是贝叶斯公式。已知结果 A 发生了,想知道它更可能来自哪个原因 Bᵢ:

P(B_i|A) = \frac{P(A|B_i)\,P(B_i)}{P(A)} = \frac{P(A|B_i)\,P(B_i)}{\sum_{j} P(A|B_j)\,P(B_j)}

分母正是全概率公式,分子是"该原因产生这个结果的贡献"。贝叶斯公式把先验概率 P(Bᵢ) 更新为后验概率 P(Bᵢ|A)——这是统计推断的发动机,第 6 章点估计、第 8 章贝叶斯学派都会反复用到。

案例:体检误诊——阳性不等于患病

设某种罕见病发病率 P(患病)=0.001(先验),检测灵敏度(患病者检出阳性)P(阳性|患病)=0.99,误报率(健康者检出阳性)P(阳性|健康)=0.05。体检结果阳性,真患病的概率是多少?直觉往往给出"很高",贝叶斯公式给出准确答案:

# 贝叶斯公式:阳性条件下真患病的概率 p_dis, sens, fp = 0.001, 0.99, 0.05 p_pos = sens * p_dis + fp * (1 - p_dis) # 全概率公式 post = sens * p_dis / p_pos # 贝叶斯公式 print("P(阳性) = %.4f" % p_pos) print("P(患病|阳性) = %.4f (%.2f%%)" % (post, post * 100)) # 输出约 0.0194,即不足 2%!

看起来反直觉的结果有清晰的机制:误报率 5% 落在 99.9% 的健康人身上,贡献了大量假阳性;真阳性被稀释。先验概率太低时,高灵敏度也救不回后验概率。这正是第 6 章讨论"检验功效与误判成本"时的数学基础。

蒙特卡洛复核这个结论:模拟一百万人的患病与检测过程,统计阳性人群中实际患病的比例。

import numpy as np rng = np.random.default_rng(7) N = 1_000_000 dis = rng.random(N) < 0.001 # 患病 pos = np.where(dis, rng.random(N) < 0.99, # 患病者按灵敏度检出 rng.random(N) < 0.05) # 健康者按误报率检出 print("模拟 P(患病|阳性) = %.4f" % (dis[pos].mean())) # 约 0.019

模拟的 0.019 与手算 0.0194 一致——"先验压过似然"在几十万次模拟里被钉死。

独立性:信息不更新的特例

回到条件概率的定义式:什么时候"知道 B 发生"不会改变对 A 的判断?答案是 P(A|B) = P(A)。代入定义式得到独立性的标准定义:

P(A \cap B) = P(A)\,P(B)

独立 = 联合概率等于边缘概率的乘积。赌场里最典型的独立事件是"连续两局轮盘结果"——上一局红不影响下一局,P(红₂|红₁)=P(红₂)。注意独立性是定义在概率上的,不是"看起来没关系";两个事件是否独立必须用乘法检验,不能凭直觉。

两个经典陷阱:

  1. 独立 ≠ 互斥。互斥指 P(A∩B)=0,若 A、B 概率都为正,则 P(A)P(B)>0,绝不独立。反过来,独立事件可以同时发生。轮盘"押红"和"押 17"互斥吗?不,17 是红的就同时发生。
  2. 两两独立 ≠ 相互独立。三个事件两两独立,未必三个同时独立的乘法也成立。经典反例:掷两枚硬币,A=第一枚正面,B=第二枚正面,C=两枚同面。A、B、C 两两独立,但 A∩B∩C 概率为 1/4,P(A)P(B)P(C)=1/8,不相等。这提醒我们:**独立性是全局性质,验证必须覆盖所有组合**。
# 两两独立 ≠ 相互独立:硬币反例 from itertools import product omega = list(product("HT", repeat=2)) def P(ev): return len(ev) / len(omega) A = {o for o in omega if o[0] == "H"} B = {o for o in omega if o[1] == "H"} C = {o for o in omega if o[0] == o[1]} print("P(A)P(B)=%.3f P(A∩B)=%.3f" % (P(A)*P(B), P(A & B))) # 0.25 = 0.25 独立 print("P(A∩B∩C)=%.3f P(A)P(B)P(C)=%.3f" % (P(A & B & C), P(A)*P(B)*P(C))) # 0.25 ≠ 0.125

换门游戏:条件概率的终极考场

蒙特霍尔问题(三门问题)是条件概率的经典压轴题:三扇门,一扇后有车,两扇后有羊。你选 1 号门,主持人(知道车在哪)打开一扇有羊的门,问是否换到剩下的那扇。答案是——因为 P(车在 2 号|开门 3 号) = 2/3,不换只有 1/3。

import numpy as np rng = np.random.default_rng(3) N = 200_000 car = rng.integers(0, 3, N) # 车的位置 pick = rng.integers(0, 3, N) # 玩家初选 # 不换胜率:初选即中 no_swap = (car == pick).mean() # 换门胜率:初选没中(主持人打开另一扇羊门后,换门必中) swap = (car != pick).mean() print("不换胜率 %.4f 换门胜率 %.4f" % (no_swap, swap)) # 1/3 vs 2/3

模拟输出 0.333 / 0.667,与条件概率手算一致。换门问题的"反直觉"恰恰说明:信息改变概率,而条件概率是唯一正确的更新方式——主持人开门是信息,不是随机事件。

本节要点回顾

  • 条件概率 = 换样本空间:P(A|B)=P(A∩B)/P(B),所有公理在条件概率下依然成立
  • 乘法公式:P(A∩B)=P(A|B)P(B),"不放回"类问题的标准武器
  • 全概率公式:按原因分解求和,解决"从因到果"
  • 贝叶斯公式:从结果反推原因,先验→后验,统计推断的发动机
  • 独立性:P(A∩B)=P(A)P(B),信息不更新的特例;互斥≠独立、两两独立≠相互独立
  • 信息改变概率:换门游戏与体检误诊,都是条件概率在真实决策中的发力点

作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U