条件概率
理解 P(A|B) 表示在已知 B 的条件下重新计算 A 的概率,并区分条件概率、联合概率、独立性和常见的条件反转错误。
[!info] related notes
- 所属 MOC: logic-moc
- 前置概念:
- 并列概念:
- 易混淆概念:
- 关系笔记:
条件概率
一句话定义
条件概率 P(A|B) 表示:在已经知道 B 发生的前提下,A 发生的概率。
它不是 A 的原始概率,而是信息 B 到来后重新缩小样本空间得到的概率。
基本公式
当 P(B) > 0 时:
P(A|B) = P(A ∩ B) / P(B)
直觉:先只看 B 已经成立的那些情况,再问其中有多少同时满足 A。
最小例子
100 人中:
60 人会 JavaScript
30 人会 TypeScript
其中 24 人两者都会
那么:
P(TypeScript | JavaScript)
= 24 / 60
= 0.4
意思是:已经知道某人会 JavaScript 后,他会 TypeScript 的比例是 40%。
而:
P(JavaScript | TypeScript)
= 24 / 30
= 0.8
是 80%。
这两个数字可以完全不同。
最重要的警告:P(A|B) ≠ P(B|A)
条件方向不能随便反转。
例如:
P(阳性 | 患病)
表示检测灵敏度的一部分:患病的人有多大概率测阳性。
而:
P(患病 | 阳性)
表示一个人测阳性后真正患病的概率。
两者不是同一个问题。
要从前者推到后者,还需要基础率和假阳性信息,这正是贝叶斯更新要解决的。
联合概率乘法规则
由条件概率定义:
P(A ∩ B) = P(A|B)P(B)
同样也有:
P(A ∩ B) = P(B|A)P(A)
于是:
P(A|B)P(B) = P(B|A)P(A)
这就是贝叶斯公式的直接来源。
独立性
如果 A 和 B 独立,意味着知道 B 并不会改变 A 的概率:
P(A|B) = P(A)
此时:
P(A ∩ B) = P(A)P(B)
注意
“看起来没关系”不是数学意义的独立。
独立是概率分布中的明确关系,需要由模型或数据支持。
条件化就是“更新样本空间”
假设一副标准牌抽一张。
原本:
P(抽到 A) = 4/52
现在已知抽到的是黑桃:
P(A | 黑桃) = 1/13
你没有改变那张牌,只是获得信息后,把可能世界从 52 张缩小到了 13 张。
Debug 场景
你想判断根因 H:数据库连接池耗尽。
观察证据 E:出现大量 connection timeout。
真正有用的问题不是:
“连接池耗尽会不会出现 timeout?”
而是同时区分:
P(E | H)
P(E | ¬H)
如果无论 H 是否成立都经常出现 E,那么 E 区分力很弱。
如果 E 在 H 成立时非常常见,在其他原因下很少见,它才是强诊断证据。
证据区分力
一个证据 E 支持 H 的程度,与下面这个比较高度相关:
P(E|H) vs P(E|¬H)
如果:
P(E|H) 很高
P(E|¬H) 很低
看到 E 会明显提高 H 的可信度。
这也解释了为什么“和假设一致”本身不够:很多证据可能和所有假设都一致。
条件概率与因果不是一回事
即使:
P(B|A) > P(B)
也只说明 A 与 B 有统计关联。
不能自动写成:
A causes B
原因可能包括:
- 混杂变量;
- 反向因果;
- 选择偏差;
- 测量偏差。
概率依赖与因果关系需要分开。
自然频数比百分比更容易理解
医学检测例子里,与其说:
基础率 1%
灵敏度 90%
假阳性率 5%
不如想成 10,000 人:
100 人患病
→ 约 90 人阳性
9900 人未患病
→ 约 495 人假阳性
总阳性约 585 人,其中真正患病约 90 人。
所以:
P(患病 | 阳性) ≈ 90/585 ≈ 15.4%
即使测试“对患病者很敏感”,阳性后的患病概率仍可能远低于直觉。
和基础率忽视的关系
基础率忽视就是在计算或直觉判断:
P(H|E)
时,过度注意个案证据 E,却忽略:
P(H)
这个原始基础率。
条件概率让这个偏差从“心理提醒”进入数学结构。
快速自测
已知:
90% 的严重数据库故障都会触发告警 A。
现在看到告警 A,能否说:
“90% 概率是严重数据库故障”?
不能。
你只知道:
P(A | 严重故障) = 0.9
你要的是:
P(严重故障 | A)
还需要故障基础率和其他情况下告警 A 的发生率。
一句记忆
竖线
|不是装饰:它告诉你“我已经知道什么”,而条件一反转,问题就可能完全变了。