Skip to content

2.1 概率的公理化与条件概率 ​

线性代数处理的是确定性的对象:给定矩阵与向量,乘积给出唯一的结果。概率论处理的对象不同,同一个试验重复进行可以得到不同的结果,需要用介于 0 与 1 之间的数来刻画某种结果出现的可能性。机器学习模型的输出大多属于这类数值:分类器给出类别概率,语言模型给出下一个词的分布,扩散模型给出噪声的分布估计。要读懂这些模型的损失函数与推导过程,需要先建立概率论的语言体系。

本节从随机试验出发,依次建立样本空间、事件域与概率公理,再引入条件概率这一核心工具,推导全概率公式与贝叶斯公式,最后讨论事件的独立性。这一套语言是后续全部内容的基础:随机变量是事件的数值编码,期望是概率的加权求和,统计推断是条件概率在数据条件下的反向应用。

2.1.1 随机试验与样本空间 ​

随机现象与随机试验 ​

在给定条件下必然出现确定结果的现象称为确定性现象,例如在标准大气压下把纯水加热到 100℃ 必然沸腾。另一类现象在相同条件下重复进行,结果不唯一且事先无法预知,这类现象称为随机现象。对随机现象进行观察或实验的过程称为随机试验,记作 E。

随机试验有三个特征:可以在相同条件下重复进行;每次试验的可能结果不止一个,且全部可能结果事先已知;每次试验前无法确定哪一个结果会出现。抛硬币、掷骰子、记录服务器下一次请求的响应时间、从一批产品中随机抽取一件测量长度,都是随机试验。

样本空间与样本点 ​

样本空间(sample space)是随机试验全部可能结果的集合,记作 Ω。其中的每个结果称为样本点(sample point),记作 ω。确定样本空间是描述随机现象的第一步,它划定了讨论的范围。

不同试验的样本空间形态差异很大:

抛一枚硬币:Ω={正面,反面}掷两颗骰子:Ω={(i,j)∣i,j∈{1,2,…,6}}记录请求响应时间:Ω=[0,+∞)记录一次传感器采集的波形:Ω=\Rp

样本空间可以是有限集、可数无限集或不可数集。这一区分决定了概率的计算方式:有限与可数样本空间上用求和,不可数样本空间上要用积分。抛硬币与掷骰子的样本空间有限,响应时间与传感器波形的样本空间不可数,两类问题需要不同的工具,这一差别将在 2.2 节展开。

事件与事件域 ​

事件(event)是样本空间的子集。事件 A 发生当且仅当试验结果 ω 落在 A 中。只含一个样本点的事件称为基本事件,样本空间 Ω 自身称为必然事件,空集 ∅ 称为不可能事件。

当样本空间不可数时,把全部子集都当作事件会带来技术困难,需要把讨论范围限制在一个满足封闭性的集合族上。这个集合族记作 F,称为事件域或 σ-代数,其中的元素称为可测集,二元组 (Ω,F) 称为可测空间。事件域需要满足三条性质:

(1) 包含全集:Ω∈F(2) 对补集封闭:A∈F⟹Ac∈F(3) 对可列并封闭:A1,A2,…∈F⟹⋃i=1∞Ai∈F

由这三条性质与德摩根律可以推出,F 对可列交、差集同样封闭。性质 (3) 中的可列并是与有限并的关键区别,它保证了极限运算的合法性,大数定律与中心极限定理的证明都依赖这一点。

实数轴上包含所有开区间的最小 σ-代数称为博雷尔 σ-代数,记作 B(\R),其中的集合称为博雷尔集(Borel set)。区间、开集、闭集、可数个区间的并集都属于博雷尔集。连续型随机变量的取值集合都落在这个范围之内。实际建模时很少需要验证事件域条件,因为常见集合天然是博雷尔集,本教程后续不再重复这一限定。

为什么需要事件域

一个自然的问题是为什么不把所有子集都当作事件。当 Ω 为有限集或可数集时,确实可以取 F 为幂集。当 Ω 是实数区间时,可以构造出无法一致赋予长度的子集,如果强行把它们纳入事件域,概率的可列可加性与平移不变性会同时失效。事件域的作用是把这类病态集合排除在讨论范围之外,使概率的定义保持自洽。

集合运算与德摩根律 ​

事件之间的关系用集合运算表达,概率论中常用的对应关系如下表。

记号集合含义概率含义
A∪B并集A 与 B 至少有一个发生
A∩B交集,简记ABA 与 B 同时发生
Ac补集A 不发生
A∖B差集A 发生而 B 不发生
A∩B=∅互斥A 与 B 不可能同时发生
A⊆B包含A 发生则 B 必然发生

德摩根律(De Morgan's law)把并、交、补三种运算联系起来:

(A∪B)c=Ac∩Bc,(A∩B)c=Ac∪Bc

用自然语言表述:至少一个发生这一命题不成立,等价于两个都不发生;两个同时发生这一命题不成立,等价于至少一个不发生。德摩根律在可列情形下同样成立:

(⋃i=1∞Ai)c=⋂i=1∞Aic,(⋂i=1∞Ai)c=⋃i=1∞Aic

计算中经常出现至少一个发生的表述,直接计算需要考虑无穷多种组合,转化为对立事件后只需计算全部不发生,德摩根律是这一转化的依据。

事件组的划分 ​

若事件组 B1,B2,…,Bn 满足两个条件:两两互斥(Bi∩Bj=∅,i≠j),并集为全集(⋃i=1nBi=Ω),则称该事件组为样本空间的一个划分(partition),也称完备事件组。划分的含义是每次试验有且仅有一个 Bi 发生。

例如,抛一枚硬币时 {正面} 与 {反面} 构成划分;按性别划分人群时 {男} 与 {女} 构成划分;按患病状态划分体检人群时 {患病} 与 {健康} 构成划分。下文的乘法公式、全概率公式与贝叶斯公式都以划分为结构基础。

2.1.2 概率的公理化定义 ​

概率空间与三条公理 ​

概率是定义在事件域上的集函数 P:F→[0,1],满足以下三条公理。这组公理由柯尔莫哥洛夫在 1933 年给出,把概率论建立在了严格的测度论基础之上。

  • 非负性:对任意 A∈F,有 P(A)≥0。
  • 规范性:P(Ω)=1。
  • 可列可加性:若 A1,A2,… 两两互斥,则 P(⋃i=1∞Ai)=∑i=1∞P(Ai)。

三元组 (Ω,F,P) 称为概率空间。三条公理不含经验内容,它们是后续全部推论的逻辑起点。

公理化处理的价值在于把概率的语义解释与数学运算分离开。无论把 P(A) 理解为长期频率的极限、信念的强度,还是某种主观判断,只要满足三条公理,全部推论都成立。频率派与贝叶斯派共用同一套数学基础,分歧出现在如何为 P 赋值,以及如何解释条件概率上,这一点在 2.12 节讨论贝叶斯推断时会再次展开。

由公理导出的基本性质 ​

以下性质都可以由三条公理推出,它们是后续计算中最常使用的工具。

性质 1(不可能事件):P(∅)=0。证明:取 A1=Ω,A2=A3=⋯=∅,由可列可加性得 P(Ω)=P(Ω)+∑i=2∞P(∅),故 P(∅)=0。

性质 2(有限可加性):若 A1,…,An 两两互斥,则 P(⋃i=1nAi)=∑i=1nP(Ai)。证明:令 An+1=An+2=⋯=∅,归入可列可加性。

性质 3(补事件):P(Ac)=1−P(A)。证明:A 与 Ac 互斥且并为 Ω,由有限可加性与规范性得到。

性质 4(单调性):若 A⊆B,则 P(A)≤P(B),且 P(B∖A)=P(B)−P(A)。证明:把 B 分解为互斥的两部分 B=A∪(B∖A),由有限可加性与非负性得到。

性质 5(次可加性,布尔不等式):对任意事件列 A1,A2,…,

P(⋃i=1∞Ai)≤∑i=1∞P(Ai)

次可加性去掉了互斥要求,代价是把等号放宽为不等号。它在证明各种尾概率界时频繁使用,是马尔可夫不等式、联合界(union bound)的直接来源。

性质 6(容斥原理):对任意两个事件,

P(A∪B)=P(A)+P(B)−P(A∩B)

对三个事件,

P(A∪B∪C)=P(A)+P(B)+P(C)−P(A∩B)−P(A∩C)−P(B∩C)+P(A∩B∩C)

一般地,n 个事件的并集概率为

P(⋃i=1nAi)=∑k=1n(−1)k−1∑1≤i1<⋯<ik≤nP(Ai1∩⋯∩Aik)

性质 7(下连续性):若事件列单调递增(A1⊆A2⊆⋯,记 limnAn=⋃i=1∞Ai),则

P(limn→∞An)=limn→∞P(An)

证明:把极限集合分解为互斥的差集序列 A1,A2∖A1,A3∖A2,…,再用可列可加性与性质 4。上连续性可由补集转化得到。这条性质保证了概率在极限运算下连续,是推导大数定律的技术前提。

古典概型与几何概型 ​

当样本空间有限且各样本点出现的可能性相同时,概率简化为计数之比:

P(A)=|A||Ω|

这类模型称为古典概型,计算归结为计数。经典例子是生日问题:n 个人中至少两人生日相同的概率。直接计算至少两人相同的组合很复杂,用对立事件处理:全部人生日互不相同的概率是

P(互不相同)=365⋅364⋯(365−n+1)365n

当 n=23 时,至少两人同生日的概率已经超过 0.5。

python
import numpy as np

def birthday_same(n: int) -> float:
    """n 个人中至少两人生日相同的概率(按一年 365 天计)"""
    days = np.arange(365, 365 - n, -1)
    p_all_distinct = np.prod(days / 365)
    return 1 - p_all_distinct

for n in [10, 23, 40, 60]:
    print(f"n = {n:2d},至少两人同生日的概率 = {birthday_same(n):.4f}")
# n = 10,至少两人同生日的概率 = 0.1169
# n = 23,至少两人同生日的概率 = 0.5073
# n = 40,至少两人同生日的概率 = 0.8912
# n = 60,至少两人同生日的概率 = 0.9941

样本空间有限但样本点等可能这一条件不能省略。掷一颗质地不均的骰子时样本空间仍然是 {1,…,6},但各点概率不再相等,古典概型失效,需要直接为每个样本点赋值。

当样本空间是某个区域且样本点按面积均匀分布时,概率等于面积之比,这类模型称为几何概型。例如在单位正方形内随机投点,落在半径为 0.5 的四分之一圆内的概率为 π/16,这一思路可以用来估计圆周率。

2.1.3 条件概率与乘法公式 ​

条件概率的定义 ​

在已知事件 B 发生的条件下,事件 A 发生的概率称为条件概率,定义为

P(A∣B)=P(A∩B)P(B),P(B)>0

这个定义不能凭直觉改写为 P(A)P(B)/P(B),条件概率的顺序不可交换,一般有 P(A∣B)≠P(B∣A)。两个方向的区别在 2.1.4 节的贝叶斯公式中处于核心位置。

条件概率的几何解释是样本空间的收缩。已知 B 发生后,讨论范围从 Ω 缩小为 B,原来落在 B 之外的结果都被排除。在 B 内部,A 所占的比例就是 P(A∣B)。这一收缩视角与事件的独立、条件独立以及图模型中的 d-分离都有直接联系。

固定 B 时,P(⋅∣B) 本身也是一个概率函数,满足三条公理:非负性显然,P(Ω∣B)=P(B)/P(B)=1,可列可加性来自 P 的可列可加性。因此条件概率可以继承上一节的全部性质,包括容斥原理与次可加性。

乘法公式 ​

把条件概率的定义式移项,得到乘法公式:

P(A∩B)=P(A∣B)P(B)=P(B∣A)P(A)

推广到 n 个事件,得到链式法则:

P(A1∩A2∩⋯∩An)=P(A1)P(A2∣A1)P(A3∣A1∩A2)⋯P(An∣A1∩⋯∩An−1)

链式法则把联合概率分解为一系列条件概率的乘积。自然语言模型的基本恒等式就来自这一分解:一个句子的概率被写为逐词条件概率的连乘,

P(w1,w2,…,wT)=∏t=1TP(wt∣w1,…,wt−1)

这一分解在数学上没有引入任何近似。语言模型的建模选择在于如何参数化这些条件概率:n 元语法把条件截断到前 n−1 个词,循环神经网络与 Transformer 则用一个带隐状态的函数直接逼近整个条件分布。

python
import numpy as np

rng = np.random.default_rng(0)

# 掷两颗骰子,模拟 100 万次
n = 1_000_000
d1 = rng.integers(1, 7, size=n)
d2 = rng.integers(1, 7, size=n)

# 事件 A:两骰子点数之和为 8;事件 B:至少有一颗是 6
A = (d1 + d2) == 8
B = (d1 == 6) | (d2 == 6)

print(f"P(A)      = {A.mean():.4f}")            # 理论值 5/36 ≈ 0.1389
print(f"P(B)      = {B.mean():.4f}")            # 理论值 11/36 ≈ 0.3056
print(f"P(A ∩ B)  = {(A & B).mean():.4f}")      # 理论值 1/36 ≈ 0.0278
print(f"P(A | B)  = {(A & B).sum() / B.sum():.4f}")   # 理论值 1/11 ≈ 0.0909
print(f"P(B | A)  = {(A & B).sum() / A.sum():.4f}")   # 理论值 1/5 = 0.2

运行结果会显示 P(A∣B)≈0.0909 而 P(B∣A)=0.2,两个方向相差一倍以上。这个例子说明条件概率的顺序不能交换,也给出一条实用的检验习惯:写出条件概率时明确哪一个是条件、哪一个是目标事件。

2.1.4 全概率公式与贝叶斯公式 ​

全概率公式 ​

设 B1,B2,…,Bn 是样本空间的一个划分,且 P(Bi)>0,则对任意事件 A,

P(A)=∑i=1nP(A∣Bi)P(Bi)

公式的含义是把事件 A 按划分拆成互斥的若干部分。A 的发生必然伴随某个 Bi 的发生,把每种情形下的条件概率按 Bi 的权重加权求和,就得到 A 的无条件概率。全概率公式的用途是把难算的概率分解为若干容易计算的条件概率,划分的选取决定了分解是否有效。

贝叶斯公式 ​

在同一划分下,若 P(A)>0,则对任意 j,

P(Bj∣A)=P(A∣Bj)P(Bj)∑i=1nP(A∣Bi)P(Bi)

公式把 P(A∣Bj) 与 P(Bj∣A) 这两个方向的条件概率联系起来。各个部分的名称在统计推断中固定下来:

名称数学形式含义
先验概率P(Bj)观察数据前对Bj 的信念
似然P(A∣Bj)Bj 成立时观察到 A 的可能性
证据P(A)数据本身的边际概率,起归一化作用
后验概率P(Bj∣A)观察数据后对Bj 的信念

贝叶斯公式的结构可以概括为一句可操作的话:后验正比于先验乘似然。分母 P(A) 与 j 无关,只负责把各项归一化到和为 1。当划分只有两项时,分母可以直接用全概率公式展开:

P(B1∣A)=P(A∣B1)P(B1)P(A∣B1)P(B1)+P(A∣B2)P(B2)

实例:一次风控判定 ​

某电商平台的交易中,欺诈交易占 1%。风控模型对欺诈交易的识别率(欺诈交易被标记为可疑的概率)为 99%,对正常交易的误报率(正常交易被标记为可疑的概率)为 5%。一笔交易被模型标记为可疑,它真正属于欺诈交易的概率是多少?

用 F 表示欺诈交易,S 表示被标记为可疑,已知 P(F)=0.01,P(S∣F)=0.99,P(S∣Fc)=0.05。由贝叶斯公式,

P(F∣S)=0.99×0.010.99×0.01+0.05×0.99=0.00990.0099+0.0495≈0.167

被标记后真正属于欺诈交易的概率约为 16.7%,远低于多数人的第一反应。原因在于正常交易的数量是欺诈交易的近百倍,5% 的误报率在庞大基数上产生了大量错误标记,把后验概率压了下来。忽略基础比率是概率应用中最常见的错误之一。

python
def posterior(prior: float, recall: float, false_alarm: float) -> float:
    """给定欺诈率、识别率与误报率,计算被标记后的欺诈概率"""
    p_flag_given_fraud = recall
    p_flag_given_normal = false_alarm
    p_flag = p_flag_given_fraud * prior + p_flag_given_normal * (1 - prior)
    return p_flag_given_fraud * prior / p_flag

print(posterior(0.01, 0.99, 0.05))   # 0.1667
print(posterior(0.10, 0.99, 0.05))   # 0.6875,欺诈率提高后后验显著上升
print(posterior(0.01, 0.99, 0.001))  # 0.9078,误报率降低后错误标记大幅减少

同一份模型判定在不同先验下给出完全不同的结论。这一现象在风控、司法与异常检测中反复出现,处理方式是明确写出先验,再计算后验,避免把 P(S∣F) 与 P(F∣S) 混为一谈。

优势与贝叶斯因子 ​

概率的比值形式在计算与解释上更简洁。事件 B 的优势(odds)定义为

Odds(B)=P(B)P(Bc)=P(B)1−P(B)

把贝叶斯公式用于优势,分母 P(A) 在分子分母中同时出现而被约去,得到简洁的更新规则:

P(B1∣A)P(B2∣A)⏟后验优势=P(B1)P(B2)⏟先验优势×P(A∣B1)P(A∣B2)⏟似然比

似然比在统计检验中称为贝叶斯因子(Bayes factor),它度量数据对两个假设的相对支持强度。在风控的例子中,先验优势为 0.01/0.99≈0.0101,似然比为 0.99/0.05=19.8,后验优势约为 0.2,换算回概率即 0.2/1.2≈0.167,与直接计算一致。优势形式把乘性更新与加性证据分离开,在 2.12 节讨论贝叶斯因子与模型比较时还会用到。

序列更新 ​

贝叶斯公式可以迭代使用:把一次观测后的后验当作下一次观测的先验。若两次判定相互独立(在交易性质已知的条件下),则连续两次被标记为可疑的后验为

P(F∣S1,S2)=0.992×0.010.992×0.01+0.052×0.99≈0.797

两次独立的标记把后验从 16.7% 推高到约 79.7%。在优势形式下这一点更容易看出:每次观测把优势乘以一个似然比,多次观测的累积效果是似然比连乘。序列更新是卡尔曼滤波、隐马尔可夫模型与在线学习算法的共同结构。

2.1.5 事件的独立性 ​

两个事件独立 ​

若事件 A 与 B 满足

P(A∩B)=P(A)P(B)

则称 A 与 B 是相互独立的。当 P(B)>0 时,这一定义等价于 P(A∣B)=P(A),即 B 的发生不改变 A 的概率。独立性是概率论特有的概念,它没有对应的集合运算表达,只能通过概率的乘积关系定义。

独立性的实用价值在于把联合概率的计算化简为乘积。多个相互独立的组件构成系统时,系统的可靠性、失效率与联合分布都可以由各自的边缘概率相乘得到。

多个事件的相互独立 ​

n 个事件 A1,…,An 相互独立,要求对任意 k≥2 与任意下标组合 1≤i1<⋯<ik≤n,都有

P(Ai1∩⋯∩Aik)=P(Ai1)⋯P(Aik)

这个条件需要检查全部 2n−n−1 个非平凡组合,比只检查全部事件同时发生要严格得多。只满足两两乘积关系的情形称为两两独立,两两独立不能推出相互独立,反例由伯恩斯坦给出:抛两枚均匀硬币,定义 A 为第一枚正面,B 为第二枚正面,C 为两枚结果相同。三个事件的概率都是 1/2,任意两个的交集概率都是 1/4,两两独立成立;但 P(A∩B∩C)=1/4,而 P(A)P(B)P(C)=1/8,三者不相互独立。原因是 C 由 A 与 B 完全决定,一旦知道前两枚的结果,C 就没有剩余的不确定性。

python
import numpy as np

rng = np.random.default_rng(1)
n = 1_000_000
c1 = rng.integers(0, 2, size=n).astype(bool)   # 第一枚硬币
c2 = rng.integers(0, 2, size=n).astype(bool)   # 第二枚硬币

A = c1
B = c2
C = c1 == c2   # 两枚结果相同

print(f"P(A)P(B)      = {A.mean() * B.mean():.4f},P(A∩B)      = {(A & B).mean():.4f}")
print(f"P(A)P(C)      = {A.mean() * C.mean():.4f},P(A∩C)      = {(A & C).mean():.4f}")
print(f"P(A)P(B)P(C)  = {A.mean() * B.mean() * C.mean():.4f},P(A∩B∩C) = {(A & B & C).mean():.4f}")
# 前两行两项接近,第三行相差约一倍:两两独立成立,相互独立不成立

条件独立 ​

若在事件 C 发生的条件下有

P(A∩B∣C)=P(A∣C)P(B∣C)

则称 A 与 B 在给定 C 下条件独立,记作 A⊥B∣C。条件独立描述的是:在已知 C 之后,B 的信息对 A 不再有额外贡献。

条件独立与独立之间没有包含关系。考虑一个共因结构:降雨 C 会使地面变湿 A,也会使行人撑伞 B。在观测数据中,地面变湿与行人撑伞是相关的,因为地面湿说明很可能刚下过雨,行人也就更可能撑伞。在已知是否降雨 C 之后,两个事件之间的关联消失,条件独立成立。这类结构在概率图模型中处于核心位置,也是贝叶斯网络与隐马尔可夫模型的主要假设来源。

朴素贝叶斯分类器建立在一个更强的假设上:给定类别标签后,各个特征相互条件独立。这个假设在文本分类中大致成立,因为给定主题后,各个词的出现主要由主题决定;在特征强相关的场景中假设明显违背,模型仍然常给出可用的分类结果,但概率输出会系统性偏移,这是概率校准问题的来源之一。

互斥与独立的区别 ​

互斥与独立描述的是两种完全不同的关系,容易混淆。互斥指 A∩B=∅,即两个事件不可能同时发生;独立指 P(A∩B)=P(A)P(B),即一个事件的发生不提供关于另一个的信息。

若 P(A)>0 且 P(B)>0,两个事件不可能既互斥又独立。互斥给出 P(A∩B)=0,独立要求 P(A∩B)=P(A)P(B)>0,两者矛盾。直观上,互斥事件提供了最强的负相关信息:知道 A 发生,就知道 B 必然不发生。

独立同分布 ​

若随机变量序列 X1,X2,…,Xn 相互独立,且每个 Xi 服从相同的分布 F,则称它们独立同分布(independent and identically distributed,i.i.d.)。这一假设在统计学中反复出现:从总体中做有放回抽样得到的样本近似 i.i.d.,重复测量的误差常被建模为 i.i.d.。

i.i.d. 假设的作用在于把联合分布写成单个分布的乘积 F(x1,…,xn)=∏i=1nF(xi),从而使似然函数可以分解、样本均值具备稳定的极限行为。大数定律与中心极限定理(2.7 节)都以 i.i.d. 为最常见的前提,自助法(2.10 节)通过重抽样构造近似的 i.i.d. 结构。

最简单的 i.i.d. 序列是伯努利序列:每次试验只有成功与失败两种结果,成功概率恒为 p,各次试验相互独立。抛硬币、检测的阳性与否、点击广告与否都可以建模为伯努利序列,它是二项分布与几何分布的来源。

2.1.6 本节小结 ​

从不确定性到可计算的结构

本节建立的概率空间 (Ω,F,P) 把不确定现象纳入了一个严格的数学框架:样本空间划定讨论范围,事件域排除病态集合,三条公理规定了概率必须满足的运算规则。条件概率 P(A∣B) 引入了一个新的操作,把已知信息编码进概率,乘法公式、全概率公式与贝叶斯公式是这一操作的三条基本推论。贝叶斯公式把先验与似然组合为后验,给出了从数据反推原因的计算路径,它的优势形式把更新过程写成似然比的连乘,便于序列处理。独立性是把联合概率分解为乘积的条件,两两独立与相互独立的差别说明这一分解需要逐层验证,条件独立则提供了一个更贴近实际数据的弱化版本。

下一节把这些概念落到具体的数值对象上。事件的概率是一组抽象的数,不便于做运算与建模;随机变量把样本点映射为实数,使得概率可以用分布函数、密度函数与期望来描述,也为后续的极限定理与统计推断提供了统一的载体。

练习题 ​

第 1 题 概念推导 ​

设 A 与 B 是两个事件,且 P(B)>0。由条件概率的定义与概率的三条公理,证明 P(⋅∣B) 满足规范性,并证明当 A1,A2,… 两两互斥时 P(⋃i=1∞Ai∣B)=∑i=1∞P(Ai∣B)。

参考答案

规范性:由定义 P(Ω∣B)=P(Ω∩B)P(B)=P(B)P(B)=1,这里用到 Ω∩B=B 与 P(B)>0。

可列可加性:设 Ai 两两互斥。由于 Ai∩B 也两两互斥,且

(⋃i=1∞Ai)∩B=⋃i=1∞(Ai∩B)

由 P 的可列可加性,

P(⋃i=1∞(Ai∩B))=∑i=1∞P(Ai∩B)

两端同时除以 P(B) 即得结论。非负性由 P(A∩B)≥0 与 P(B)>0 直接得到。三条公理全部满足,因此条件概率本身也是一个概率,上一节导出的单调性、次可加性与容斥原理对条件概率同样适用。

第 2 题 计算推理 ​

某工厂的两条生产线生产同一种零件,甲线产量占 60%,次品率为 2%;乙线产量占 40%,次品率为 5%。从成品中随机抽取一件,发现是次品,它来自甲线的概率是多少?若该零件被送往两个不同的客户,客户甲只接受甲线产品,这一信息会如何改变结论?

参考答案

记 M 为来自甲线,N 为来自乙线,D 为次品。已知 P(M)=0.6,P(N)=0.4,P(D∣M)=0.02,P(D∣N)=0.05。

由全概率公式,

P(D)=0.02×0.6+0.05×0.4=0.012+0.02=0.032

由贝叶斯公式,

P(M∣D)=0.02×0.60.032=0.0120.032=0.375

次品来自甲线的概率约为 37.5%,低于甲线的产量占比 60%,因为乙线的次品率更高,使得次品中乙线的比例被放大。

若已知该零件来自客户甲的订单,且客户甲只接受甲线产品,则这一信息把先验改为 P(M)=1,后验随之变为 P(M∣D)=1。先验信息改变了划分的权重,后验完全由新的先验决定。这说明贝叶斯公式的结论依赖于先验的设定,先验的合理性需要单独论证。

第 3 题 代码验证 ​

用蒙特卡洛模拟验证伯恩斯坦反例:抛两枚均匀硬币,事件 A 为第一枚正面,B 为第二枚正面,C 为两枚结果相同。验证 A,B,C 两两独立但不相互独立。再增加一个事件 D 为第一枚反面,说明为什么 D 与 A 互斥且不独立。

参考答案
python
import numpy as np

rng = np.random.default_rng(42)
n = 2_000_000
c1 = rng.integers(0, 2, size=n).astype(bool)
c2 = rng.integers(0, 2, size=n).astype(bool)

A, B, C = c1, c2, c1 == c2
D = ~c1

# 两两独立
pairs = [("AB", A, B), ("AC", A, C), ("BC", B, C)]
for name, X, Y in pairs:
    print(f"P({name}) = {(X & Y).mean():.4f},P(X)P(Y) = {X.mean() * Y.mean():.4f}")

# 三者同时发生
print(f"P(ABC) = {(A & B & C).mean():.4f},P(A)P(B)P(C) = {A.mean() * B.mean() * C.mean():.4f}")

# D 与 A 的关系
print(f"P(A ∩ D) = {(A & D).mean():.4f},P(A)P(D) = {A.mean() * D.mean():.4f}")

三个两两独立对的输出都在 0.25 附近,与乘积一致;P(A∩B∩C) 输出约 0.25,而乘积约 0.125,相差一倍,说明三个事件不相互独立。D 与 A 的交集概率为 0,乘积为 0.25,两者相差最大,说明互斥事件提供最强的负相关信息,不可能独立。

第 4 题 综合应用 ​

某垃圾邮件过滤器使用朴素贝叶斯假设:在给定邮件类别(垃圾或正常)的条件下,各个词是否出现相互独立。设垃圾邮件占 30%,词"免费"在垃圾邮件中出现的概率为 0.4,在正常邮件中为 0.02;词"发票"在垃圾邮件中出现的概率为 0.3,在正常邮件中为 0.01。一封邮件同时包含这两个词,判断它属于垃圾邮件的概率,并说明条件独立假设在此处的作用。

参考答案

记 S 为垃圾邮件,W1 为包含"免费",W2 为包含"发票"。已知 P(S)=0.3,P(W1∣S)=0.4,P(W1∣Sc)=0.02,P(W2∣S)=0.3,P(W2∣Sc)=0.01。

条件独立假设给出联合似然:

P(W1,W2∣S)=0.4×0.3=0.12,P(W1,W2∣Sc)=0.02×0.01=0.0002

由贝叶斯公式,

P(S∣W1,W2)=0.12×0.30.12×0.3+0.0002×0.7=0.0360.036+0.00014≈0.996

后验概率约为 99.6%,判为垃圾邮件。

条件独立假设的作用是把两个词同时出现的联合似然写成各自似然的乘积,避免了估计特征组合的联合分布。若不做这一假设,需要估计 P(W1,W2∣S) 这一四元联合概率,其参数数量随特征数指数增长。假设的代价是当两个词高度相关时(例如两者常常同时出现),乘积会高估联合似然,导致概率输出过于自信。实践中常用概率校准方法对输出进行修正。

常见错误 ​

错误 1 · 把 P(A∣B) 与 P(B∣A) 当作同一个量

原因:两个条件概率在数值上往往相差很大,只是方向不同,书写时容易颠倒。风控例子中 P(S∣F)=0.99 与 P(F∣S)≈0.167 相差近六倍。司法领域的检察官谬误也属于这一类:把无辜者匹配到该证据的概率当作匹配到该证据者无辜的概率。

解决:写出条件概率时明确竖线两侧的角色,竖线右侧是已知信息,左侧是要求的目标。需要反向的条件概率时用贝叶斯公式显式计算,不凭直觉替换。

错误 2 · 用两两独立代替相互独立

原因:多个事件的独立性定义要求检验全部子集组合,只检查两两乘积关系会遗漏高阶约束。伯恩斯坦反例中三个事件两两独立,但三者同时发生的概率是乘积的两倍。

解决:需要相互独立时按定义检查全部 2n−n−1 个组合,或者从问题的生成机制上论证独立性。由独立试验的不同次结果定义的事件组通常天然相互独立,由数据的函数关系定义的事件需要额外检查。

错误 3 · 混淆互斥与独立

原因:两个概念都描述事件之间的关系,字面上又都与关联有关,容易混用。互斥是集合层面的关系,独立是概率层面的关系,两者互不相容。

解决:记住判别式。互斥看 A∩B=∅,概率上表现为 P(A∪B)=P(A)+P(B);独立看 P(A∩B)=P(A)P(B)。两个概率均为正的事件不可能同时满足这两条。

错误 4 · 忽略基础比率直接解释模型判定

原因:模型的识别率与误报率只描述条件概率 P(判定∣真实状态),而实际关心的是 P(真实状态∣判定)。当目标事件在总体中占比很低时,即使模型性能很高,后验概率也可能很低。

解决:计算后验时显式写出先验,用贝叶斯公式或优势形式把先验优势与似然比相乘。调整策略应基于后验,例如用第二次独立判定提高似然比,把后验推高到可决策的水平。