Python - 统计中的泊松离散分布

2025年3月17日 | 阅读 12 分钟

统计学中的基本概念之一是随机变量及其分布的研究。本教程将帮助您全面理解泊松离散分布,这是统计学/概率论的关键组成部分,并最终学习如何使用 Python 计算其各种属性。

现在,让我们从理解涉及的随机变量术语开始讨论。

随机变量

随机变量是随机实验的结果。它是一个数值量,其值属于随机实验或事件的可能结果集。

例如

  • 抛硬币 - 考虑一个公平的硬币,我们想抛掷它,随机变量“X”表示抛掷三次公平硬币时获得的正面数。X 的可能值是 0、1、2 或 3,具体取决于抛硬币时获得的正面数。
  • 掷骰子:让我们定义一个随机变量“Y”为两个公平的六面骰子点数之和。Y 的值可以从 2(掷出两个 1)到 12(掷出两个 6)不等。

随机变量可分为两类

  1. 离散随机变量 - 只能表示有限数量的值。上面给出的例子是离散随机变量的例子。
  2. 连续随机变量 - 可以在范围内表示任何可能的值。例如:
    • 个人身高:考虑一个随机变量“H”,它代表人群中的身高。身高可以在一定范围内取任何值(例如,在 4 英尺到 7 英尺之间),因此我们可以说“H”是一个连续随机变量。
    • 温度值:让我们定义一个随机变量“T”,表示特定位置的温度(以摄氏度为单位)。温度可以在一定范围内连续变化,因此“T”是一个连续随机变量。

泊松离散分布

泊松分布是一种离散概率分布,用于表示在固定时间或空间间隔内出现给定数量事件的概率。

离散概率分布是只能取可数个值的随机变量的概率分布。

- 维基百科

它通常用于描述罕见的随机事件,例如呼叫中心在一小时内接到的电话数量、交叉路口一天内的事故数量或每小时收到的电子邮件数量。

泊松分布的关键特征

  • 事件是罕见且随机的。
  • 事件彼此独立。
  • 我们假设平均发生率在整个区间内是恒定的。
  • 在无限小区间内发生多个事件的概率可以忽略不计。

概率质量函数

概率质量函数为随机变量的每个可能值分配一个概率。

泊松分布的概率质量函数 (PMF) 由下式给出

Python - Poisson Discrete Distribution in Statistics

其中

  • X 是表示事件数量的随机变量。
  • k 表示发生次数(非负整数),(k = 0, 1, 2, …)
  • λ (lambda) 是平均发生率。
  • e = 2.71828,欧拉数

您可能会在不同来源上找到表示 pmf 公式的不同符号,因此请勿混淆。

让我们通过几个例子来探讨泊松分布。

示例 1:呼叫中心的电话

假设一个呼叫中心平均每小时接到 5 个电话。下一个小时接到正好 3 个电话的概率是多少?

这里,λ = 5(每小时平均电话数量)和 k = 3(期望的电话数量)。将这些值代入泊松 PMF 公式

因此,下一个小时接到正好 3 个电话的概率约为 0.14037,或约 14.04%。

如何在 Python 中使用泊松分布计算概率?

要使用泊松分布计算概率,我们有 'scipy.stats.poisson.pmf' 函数,它是 SciPy 库的一部分。此函数用于计算从分布中观察到特定值“k”的概率。

语法

参数

  • k - 这是我们要计算 PMF 的值。
  • mu:这是泊松分布的平均发生率(也称为 lambda 参数)。
  • loc - 这是一个可选参数,默认为 0。它会使分布偏移给定的值。

在上面的例子中,已知平均电话数量=每小时 5 个,我们需要找到下一个小时正好接到三个电话的概率。

输出

Poisson PMF: 0.1403738958142805

上述输出与我们手动计算的结果相同。

示例 2:十字路口的事故

假设一个十字路口平均每天发生 2 起事故。一天内至少发生 4 起事故且最多发生 6 起事故的概率是多少?

这里,λ = 2,我们要找 P(X ≥ 4 且 X<=6),这是发生 4、5 和 6 起事故的概率之和。计算每种概率并将其相加

因此,一天内至少发生 4 起事故且最多发生 6 起事故的概率约为 0.1383,或约 13.83%。

Python 代码

输出

Poisson PMF: 0.13834273397520408

如何生成泊松分布?

方法 1 - 使用 NumPy

让我们创建一个 λ = 3 的随机(1 x 15)分布。

在这里,我们从 NumPy 模块导入了 random 方法。

此行返回一个列表,其中包含来自泊松分布的 15 个随机样本。我们传入 lam=3,这意味着事件的平均发生次数是 3。

数组中的每个数字表示在固定时间间隔内发生的事件数量。

运行程序时,我们得到 **输出:**

Poisson Distribution: [4 1 7 2 3 4 4 3 3 7 7 5 2 2 0]

在此输出中,每个数字表示在固定时间间隔内发生的事件数量,并且该分布反映了平均发生率为 3 的泊松分布的特征。

方法 2 - 使用 SciPy

我们可以使用 **poisson.rvs(mu, size)** 来生成泊松分布。

输出

Poisson Distribution: [8 2 2 4 2 2 3 3 1 3 3 2 0 1 3]

如何绘制泊松分布图?

要绘制泊松分布图,我们首先需要创建一个样本。这里,我们使用 scipy.stats.poisson.rvs() 方法从泊松分布生成随机样本,并使用 matplotlib 库绘制直方图。

输出

Python - Poisson Discrete Distribution in Statistics

运行此代码时,它将生成一个直方图,表示从平均值为 3 的泊松分布中抽取的 5000 个随机数的分布。直方图显示了在指定范围内不同值出现的频率,帮助我们可视化泊松分布的形状。

计算每个样本值的概率

输出

Python - Poisson Discrete Distribution in Statistics

说明

在上面的代码中,我们首先使用平均值为 3 和样本大小为 5000 的泊松分布创建了一个随机样本。

我们创建了一个列表 `prob_dist` 来存储样本中每个值的概率。

然后,我们使用一个 for 循环,计算数组 'x' 中每个值的概率质量函数 (PMF)。

最后,我们显示条形图,显示给定参数的泊松分布。该图表示在假设平均每天发生 3 起事故(λ = 3)的情况下,每天发生不同数量事故的概率。

我们也可以绘制具有不同平均值的泊松分布。

绘制 λ = [2, 3, 4, 5] 的泊松分布

输出

Python - Poisson Discrete Distribution in Statistics

说明

在上面的代码中

  • 我们使用 plt.subplots(2, 2, figsize=(10, 8)) 创建了一个 2x2 的子图网格。这种网格布局允许我们拥有四个独立的子图。
  • 我们使用 enumerate(λ) 来迭代 λ 的值以及子图网格中的相应位置。
  • 在循环内部,我们为每个 mu 值计算概率分布,并在相应的子图中创建条形图。
  • 我们使用 axs[j] 来访问网格中的当前子图。
  • 我们使用 plt.tight_layout() 来确保子图正确间隔且不重叠。

它为不同的 λ 值生成了四个不同的泊松分布子图。

累积分布函数 (CDF)

累积分布函数 (CDF) 描述了随机变量取小于或等于特定值的概率。

数学上,随机变量 X 的累积分布函数定义为

其中

  • F(x) 是随机变量 X 的累积分布函数 (CDF)。
  • x 是我们要计算累积概率的特定值。
  • P(X ≤ x) 是随机变量 X 取小于或等于 x 的值的概率。

我们可以利用泊松 CDF 函数来计算累积概率。

问。一个电子邮件服务器平均每小时收到 6 封电子邮件。下一个小时收到少于 5 封电子邮件的概率是多少?

答。

输出

Probability using PMF P(X < 5) = 0.2850565003166312
Cumulative Probability of X < 5 = 0.2850565003166312

在此代码中:

我们将 k 设置为 4,因为我们要查找收到少于 5 封电子邮件的概率,这对应于泊松随机变量 X 小于 5。

  • 方法 1:我们使用 poisson.pmf() 计算收到电子邮件的概率(P(X < 5)),方法是加总 X = 0, 1, 2, 3, 4 的概率。
  • 方法 2:我们使用 poisson.cdf(k - 1, lambda_value) 计算收到最多 4 封电子邮件(P(X < 5))的 CDF。

最终结果代表下一个小时收到少于 5 封电子邮件的概率。

以下是一些您可以解决的练习题。我们鼓励您在继续查看给定解决方案之前独立解决问题。

问。 1 一个工厂平均每周生产 10 件次品。一周内正好有 8 件次品的概率是多少?

解。

平均发生率,λ = 10

计算 pmf 的值,k = 8

输出

Poisson PMF: 0.11259903214902009

问。 2 一个网站平均每小时有 500 次访问。在随机选择的一个小时内访问次数超过 600 次的概率是多少?

解。

平均发生率,λ = 500

计算 pmf 的值,k = 600

输出

Poisson PMF: 1.3566714436562893e-06

问。 3 一家餐厅在午餐时间平均供应 15 份素食餐。午餐时间供应正好 10 份素食餐的概率是多少?

解。

平均发生率,λ = 500

计算 pmf 的值,k = 600

输出

Poisson PMF: 0.04861075082960534

问。一家汽车租赁公司平均每天租出 4 辆豪华车。某一天租出少于 3 辆豪华车的概率是多少?

解。

平均汽车数量,λ = 4

计算 cdf 的汽车数量,k < 3

输出

Poisson CDF: 0.23810330555354436

问。 5 一家零售店平均每小时有 12 位顾客。下一个小时有超过 15 位顾客的概率是多少?

解。

平均顾客数量 = 12

要计算 CDF 的顾客数量,k > 15

输出

Poisson CDF of attending customers <= 15: 0.7720245323035447
Poisson CDF of attending customers > 15: 0.22797546769645527

总结

  • 随机变量:随机变量是随机实验的结果。它是一个数值量,其值属于随机实验或事件的可能结果集。
  • 泊松离散分布:泊松分布是一种离散概率分布,用于模拟在固定时间或空间间隔内出现特定数量事件的概率。
  • 概率质量函数 (PMF):概率质量函数为随机变量的每个可能值分配一个概率。
    Python - Poisson Discrete Distribution in Statistics
  • 累积分布函数 (CDF):累积分布函数 (CDF) 描述了随机变量取小于或等于特定值的概率。

在整篇文章中,我们提供了使用泊松 PMF 和 CDF 函数计算概率的 Python 代码示例。这些示例说明了如何处理泊松分布并将其应用于现实场景。