跳至主要内容

离散概率分布详解与示例

理解数据科学中的离散概率分布。通过 Python 示例探索 PMF、CDF,以及伯努利、二项、泊松等主要分布类型。
· 13分钟 阅读

使用 AI 探索

先问您一个问题:以下情境有什么共同点?统计网站点击次数、跟踪不良品数量、分析客户购买行为。它们都涉及可计数的结果,这正是离散概率分布的基础。

离散概率分布是我们用来建模结果可以被枚举的情境的工具,比如 0、1、2、3 位客户,正反面、成功或失败等。不同于处理身高或温度等可测量量的连续分布,离散分布关注可计数的事件。

作为动机,下面是这些分布在各行业中的一些应用示例:

  • Netflix 使用类别分布进行推荐
  • 银行依赖二项模型进行信用风险评估
  • 制造商在质量控制抽样中应用超几何分布。

在本文中,我将涵盖掌握离散概率分布所需的理论基础、实际应用以及上手示例。读完后,您将对其有扎实的概念理解与实操能力,能够有效建模现实世界的现象。

什么是离散概率分布?

前面我已简要提到过这类分布的含义,现在我们深入一点。本质上,离散概率分布就是为一组可计数的结果分配概率。结果可以是 0、1、2、3… 这样的数,也可以是“红、蓝、绿”这样的类别。

形式上,若我们有离散随机变量 X,则其分布由概率质量函数(PMF)定义。PMF 告诉我们每个可能结果的概率p(x)=P(X=x)。

然而,要使其成为有效的离散概率分布,需要满足两条关键规则:

  1. 对所有 x,p(x) >= 0
  2. 对所有 x,∑p(x)=1

我们来解释一下。第一条说明所有结果的概率都必须大于等于 0,因为负概率没有意义!第二条说明所有事件概率之和必须等于 1。有一些方法可以确保这个条件成立,比如对一个分布应用softmax 函数,将其规范为有效的概率分布。

一个经典示例是掷一枚公平的六面骰子。每一面出现的概率都是1/6,将全部六个概率相加,得到 1。

这里您可能会问:

这为什么重要?

因为离散分布为我们提供了结构化的方式来回答实际问题,例如:

  • “掷硬币 5 次得到 3 次正面的概率是多少?”
  • “一批次中预期有多少不良品?”
  • “今天至少有一位顾客购买的可能性有多大?”

请注意,这些并非我随意编造的抽象数学问题!它们直接关联到业务指标、风险模型与产品表现。

离散分布 vs. 连续分布

此时,您可能还有一个问题:

离散分布与连续分布有何不同?

简而言之:离散分布处理计数,连续分布处理测量。

  • 在离散分布中,我们讨论精确概率:P(X=2),即“恰好看到两位顾客的概率是多少?”
  • 在连续分布中,任意精确点的概率为零(这一点非常重要!)。因此我们讨论区间,如 P(160≤X≤170),即“一个人的身高在 160cm 到 170cm 之间的概率是多少?”

还可以这样形象地理解:

  • 离散分布看起来像阶梯函数。可以把它想成每个计数对应一根概率柱的柱状图。
  • 连续分布看起来像平滑曲线,如正态分布的钟形曲线。

图示:左为离散分布,右为连续分布。作者制图。

另一个很好的后续问题是:

何时用哪一种?

  • 离散:当结果是计数或类别时,如点击次数、获胜次数、有缺陷 vs. 无缺陷等。
  • 连续:当结果是在尺度上测量的,如身高、体重、温度、时间等。

数学基础与理论框架

在正式介绍各类离散概率分布之前,我需要先讲一些有助于全面理解各分布的重要数学概念。

概率质量函数(PMF)

PMF 告诉我们离散随机变量X可以取到的每个精确值的概率。

我们之前提到的条件正是 PMF 合法性的依据:

  1. 对所有 x,p(x) >= 0
  2. 对所有 x,∑p(x)=1

总之,PMF对计算均值、方差与矩非常有用。我们一起做个快速示例:

设 X∈{0,1,2,3},且 p(0)=0.1,p(1)=0.2,p(2)=0.3,p(3)=0.4。先求均值(期望)。按如下计算:

E[X]=0*(0.1)+1*(0.2)+2*(0.3)+3*(0.4)=2.0。这很合理,因为我们将每个可能结果的取值与其对应概率相乘后求和,得到期望值。继续可求第二阶矩E[X2]:

E[X^2]=0+1(0.2)+4(0.3)+9(0.4)=5.0

据此,我们可以计算方差,按如下公式:Var(X) = E[X2] - (E[X])2

因此:

Var(X)=5.0−2.0^2=1.0

累积分布函数(CDF)

接下来谈 CDF,它是一个将概率累加到某个阈值以内的函数。对于离散概率分布,由于其离散性,CDF 将呈现阶梯函数的形态。为清晰起见,连续分布的 CDF 则是平滑的连续函数(类似于S 型函数)。

图示:离散分布的 CDF。作者制图。

其数学表达为:FX​(x)=P(X≤x)=∑{k<=x}​pX​(k)。为确保完全清楚,我们一起做个示例:

设 X 取值 0、1、2、3,对应概率为:

  • P(X=0)=0.1
  • P(X=1)=0.2
  • P(X=2)=0.3
  • P(X=3)=0.4

要求 CDF,只需设定阈值并将不超过该阈值的结果对应概率相加。例如,F(x < 3) =0.1 + 0.2 +0.3 = 0.6(等价于 F(2) = 0.6)。显然,对于连续分布,CDF 将通过积分而非求和得到。

矩(Moments)

另一个重要的数学对象是矩母函数(MGF),但在此之前,需要先理解什么是矩。我之前已经提到过矩,现在更深入一点。

矩是描述概率分布形状的数字。它们像摘要,刻画分布的中心位置、离散程度,甚至偏斜程度或“峰态”。矩有一阶、二阶、三阶等,每一阶传达不同信息。

例如,一阶矩告诉我们分布的中心位置,也就是期望值,也等同于均值。

形式上,关于原点的 k 阶矩定义为E[Xk]=∑xk pX(x)。

关于各阶矩的更多信息:

  • 一阶矩:E[X] → 均值,表示中心位置
  • 二阶矩:E[X^2] → 还不是方差,但与离散程度相关
  • 三阶矩:E[X3] → 与偏度相关(分布向左或向右倾斜)
  • 四阶矩:E[X4] → 与峰度相关(尾部厚度或尖峰程度)

还可以有五阶、六阶等,但通常不再使用,因为信息增益有限。

中心矩

请注意,有时我们不是围绕 0,而是围绕均值来度量矩。

这称为中心矩,其公式为:

μk=E[(X−E[X])k]

  • 一阶中心矩:恒为 0(因为 X−E[X] 的平均为 0)
  • 二阶中心矩:即方差 Var(X)
  • 三阶中心矩:度量偏度
  • 四阶中心矩:度量峰度

矩母函数(MGF)

MGF 是一个将随机变量的所有矩编码到一个紧凑公式中的函数:

MX​(t)=E[etX]=∑​etxpX​(x),其中 p(x) 为 X 的 PMF。

该函数有用之处在于,它能方便地求取各阶矩。例如,均值可由 t=0 处的一阶导数给出:M′ₓ(0) = E[X]。

类似地,二阶矩可由 t=0 处的二阶导数得到:M″ₓ(0) = E[X²]。

据此,我们可以计算方差:Var(X) = M″ₓ(0) − (M′ₓ(0))²。

MGF 的另一强大之处在于,求和易于分析。若 X 与 Y 相互独立,则其和的 MGF 等于各自 MGF 的乘积: M₍ₓ₊ᵧ₎(t) = Mₓ(t) · Mᵧ(t)。

最后,MGF 还可用于刻画分布。即若两个随机变量在 0 附近有相同的 MGF,则它们服从相同的分布。

主要的离散概率分布类型

下面来介绍我们可能遇到的不同离散概率分布。

伯努利分布

这是最简单的模型,只有一次试验且只有两种结果——成功(记为 1)或失败(记为 0)。当我们记录单个二元事件时使用它,例如邮件是否被打开、传感器是否触发、测试是否通过、垃圾邮件分类等。

重要的是,它还是许多其他分布的构建基石。

PMF:

P(X = x) = pˣ (1 − p)(1−x) ,x ∈ {0, 1}

均值与方差:E[X] = p, Var(X) = p(1 − p)。

示例:假设我们玩一款“赢/输”游戏。若胜率 p = 0.6,则:P(X = 1) = 0.6, P(X = 0) = 0.4。均值 = 0.6,方差 = 0.6 × 0.4 = 0.24

对应的代码为:

from scipy.stats import bernoulli
p = 0.6
rv = bernoulli(p) #inbuilt bernoulli distribution method
P1 = rv.pmf(1) # P(X=1)
P0 = rv.pmf(0)

伯努利分布的 PMF(左)与 CDF(右)。作者制图。

二项分布

当我们需要对重复的、相互独立的“是/否”试验进行建模,且每次试验具有相同的成功概率 p时,使用该分布。我们将试验进行n 次,并统计成功的次数。常见问题如“n 位用户中有多少转化?”、“n 个零件中有多少合格?”等。

我希望您记住该分布的几个关键假设:

  1. 每次试验的成功概率(p)相同
  2. 试验次数固定(n)
  3. 各次试验相互独立

PMF:P(X = x) = C(n, x) · pˣ · (1 − p)ⁿ⁻ˣ, x ∈ {0, 1, …, n},其中 C 为组合数

均值与方差:E[X] = n·p, Var(X) = n·p·(1 − p)

示例:令 n = 10,p = 0.3。P(X = 4) = C(10, 4) · 0.3⁴ · 0.7⁶ ≈ 0.2001。E[X] = 3, Var(X) = 2.1

对应的代码为:

from scipy.stats import binom
n, p, x = 10, 0.3, 4
rv = binom(n, p) # inbuilt binomial distribution method
pmf = rv.pmf(x) # works out P(X=4)

二项分布的 PMF(左)与 CDF(右)。作者制图。

几何分布

该分布刻画“直到首次成功所需的试验次数”,当每次试验以概率 p 成功时使用。它回答“要尝试多少次才会成功?”(首次点击、首次购买)之类的问题。它具有无记忆性:过去的失败不会改变未来。

所谓无记忆性,即过去不影响未来,意味着未来结果的概率与从头开始相同。只有几何分布与指数分布具有该性质。

PMF:P(X = k) = (1 − p)^(k−1) · p, k ∈ {1, 2, …}

均值与方差:E[X] = 1/p, Var(X) = (1 − p)/p²

示例:令 p = 0.2。P(X = 3) = (0.8)² · 0.2 = 0.128。E[X] = 5, Var(X) = 20。

对应的代码为:

from scipy.stats import geom
p, k = 0.2, 3
rv = geom(p)  # Inbuilt Geometric distribution method
pmf = rv.pmf(k) # P(X=3)

几何分布的 PMF(左)与 CDF(右)。作者制图。

泊松分布

该模型用于在固定区间内计数事件,当事件以平均固定速率 λ 且相互独立地发生时。常用于每小时工单数、每千次请求的错误数、每分钟呼叫数等——“稀有但稳定”的事件。

该分布的一个有趣性质是其均值等于方差。

PMF:P(X = x) = e^(−λ) · λˣ / x!, x ∈ {0, 1, 2, …}

均值与方差:E[X] = λ, Var(X) = λ

示例:令 λ = 3,表示呼叫中心每小时平均来电数为 3。P(X = 0) = e^(−3) ≈ 0.0498P(X ≤ 2) = e^(−3) · (1 + 3 + 9/2) ≈ 0.4232

对应的代码为:

from scipy.stats import poisson
lam = 3 # average rate
rv = poisson(mu=lam)  # Inbuilt poisson distribution method
P0 = rv.pmf(0) # P(X=0)

泊松分布的 PMF(左)与 CDF(右)。作者制图。

进阶分布类型与扩展

现在,我们来介绍一些更高级的离散概率分布。

超几何分布

该分布刻画从一个有限总体中不放回抽样的过程。从 N 个样本中有 K 个“成功”(如不良品),我们抽取 n 个,并统计成功的个数。适用于小批量质量控制、抽牌,或任何在每次抽取后概率发生变化的有限样本池。

PMF:P(X = x) = [C(K, x) · C(N − K, n − x)] / C(N, n),其中 x 的范围为 max(0, n − (N − K)) 到 min(n, K)。

均值与方差:E[X] = n·(K/N), Var(X) = n·(K/N)·(1 − K/N)·((N − n)/(N − 1))

示例:设 N = 100,K = 8 个不良品,n = 10,则至少抽到一个不良品的概率:P(X ≥ 1) = 1 − C(92, 10)/C(100, 10) ≈ 0.5834

对应的代码为:

from scipy.stats import hypergeom
N, K, n = 100, 8, 10
rv = hypergeom(M=N, n=K, N=n)  # Inbuilt hypergeometric distribution method
answer = 1 - rv.pmf(0)

超几何分布的 PMF(左)与 CDF(右)。作者制图。类别分布

这是单次选择的一种多类别版本:一次试验,恰有 k 个类别中的一个发生。我们用于多分类标签(如 {猫、狗、鸟})或任何“在 k 个中选一个”的事件。它是多分类分类目标的构建基石。

PMF:P(X = i) = pᵢ, i ∈ {1, …, k}, ∑ᵢ₌₁ᵏ pᵢ = 1

均值与方差(独热编码视角):若将结果编码为独热向量 Y ∈ {e₁, …, eₖ},则 E[Y] = p,且 Cov(Y) = diag(p) − p·pᵀ。

示例:令类别 = {A, B, C},p = (0.5, 0.3, 0.2)。P(X = B) = 0.3。若以独热存储,均值标签向量为 [0.5, 0.3, 0.2]。

对应的代码为:

import numpy as np
from scipy.stats import rv_discrete
classes = np.array(["A", "B", "C"])
p = np.array([0.5, 0.3, 0.2])
rv = rv_discrete(values=(np.arange(len(p)), p)) # Building a categorical random variable over indices {0,1,2}
P_B = rv.pmf(1) # Probability of class "B" (index 1)

类别分布的 PMF(左)与 CDF(右)。作者制图。

离散均匀分布

该分布很简单:区间内所有整数等可能。用于随机整数生成、洗牌与“无偏好”的基线。

PMF:P(X = x) = 1 / (b − a + 1), x ∈ {a, …, b}

均值与方差:E[X] = (a + b)/2Var(X) = ((b − a + 1)² − 1)/12

示例:假设我们要在 10 到 15 之间均匀地选取一个整数。因此每个数的概率均为 1/6。均值 = (10 + 15)/2 = 12.5方差 = (6² − 1)/12 = 35/12 ≈ 2.9167

对应的代码为:

import numpy as np
from scipy.stats import randint
a, b = 10, 15  # inclusive bounds
rv = randint(low=a, high=b+1)  # note that SciPy randint is [low, high)
xs = np.arange(a, b+1) # PMFs for all outcomes
pmfs = rv.pmf(xs)

离散均匀分布的 PMF(左)与 CDF(右)。作者制图。

负二项分布

该分布刻画为达到r 次成功需要的试验次数,其中每次试验相互独立且具有相同的成功概率 p。它实际上是几何分布的自然推广(r = 1 是其特例)。当我们关心第 r 次成功发生在何时使用它。示例包括“第几位顾客会产生我们的第 3 笔购买?”、“要打多少个电话才能达成 5 笔交易?”等。

PMF:P(X = k) = C(k−1, r−1) · pʳ · (1 − p)^(k−r), k = r, r+1, r+2, …

均值与方差:E[X] = r/pVar(X) = r·(1 − p)/p²

示例:设每次试验成功概率 p = 0.3,目标是第 3 次成功(r = 3)。

第 3 次成功发生在第 k = 7 次试验的概率:P(X = 7) = C(6, 2) · (0.3)³ · (0.7)⁴ = 15 × 0.027 × 0.2401 ≈ 0.09724。

对应的代码为:

from scipy.stats import nbinom
p, r, k = 0.3, 3, 7
rv_failures = nbinom(r, p)  # Inbuilt method for negative binomial distribution
P_X_eq_k = rv_failures.pmf(k - r)

负二项分布的 PMF(左)与 CDF(右)。作者制图。

总结思考

总而言之,离散概率分布是建模可计数结果的中流砥柱,帮助我们量化从质量控制到机器学习中的各种不确定性。

我们已经学习了大量关于离散概率分布的内容。要更进一步,我强烈建议您阅读我们的教程《Python 中的概率分布》,并开始接触连续分布,如高斯分布与指数分布。

离散概率分布常见问答

离散概率分布与连续分布有何不同?

离散分布处理可计数的结果(如点击次数或掷骰结果),而连续分布处理可测量的量(如身高、时间或重量)。

二项分布在现实世界中的应用有哪些?

二项分布用于 A/B 测试、质量控制(通过/未通过)、临床试验成功率,以及跨重复实验建模“是/否”结果。

什么是无记忆性?哪些分布具有该性质?

无记忆性意指过去事件不影响未来概率。在离散场景中,只有几何分布具有该性质。

什么是矩母函数(MGF)?为何有用?

MGF 是编码分布全部矩(均值、方差、偏度等)的公式。它们让这些性质的计算与分布关系的证明更容易。

为什么泊松分布在数据科学中被广泛使用?

因为它能刻画稀有但稳定的事件。其简单的假设结构以及“均值 = 方差”的性质使其非常实用。

Vaibhav Mehra

作者

Vaibhav Mehra

主题