Python统计中的泊松离散分布

统计学的基本概念之一是研究随机变量及其分布。本教程让您全面了解泊松离散分布,这是统计/概率论的关键组成部分,最后,使用 Python 了解其各种属性和计算。

让我们通过理解所涉及的随机变量项来开始讨论:

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

  • 抛硬币- 考虑到我们有一枚公平的硬币要翻转,随机变量“X”表示翻转一枚公平的硬币 3 次时获得正面的次数。 X 的可能值为 0、1、2 或 3,具体取决于抛硬币中正面朝上的次数。
  • 掷骰子:让我们将随机变量“Y”定义为两个公平的六面骰子上掷出的数字的总和。 Y 的值范围可以从 2(滚动两个 1)到 12(滚动两个 6)。

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

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

离散概率分布是只能呈现可数个值的随机变量的概率分布。
- 维基百科

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

泊松分布的主要特征:

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

如何在 Python 中使用泊松分布计算概率?
为了使用泊松分布计算概率,我们有“scipy.stats.poisson.pmf”函数,它是 SciPy 库的一部分。该函数用于计算从分布中观察到特定值“k”的概率。

From scipy import stats  
Stats.poisson.pmf(k, mu, loc=0)  

参数:

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

示例 1:在呼叫中心拨打电话
假设呼叫中心平均每小时接到 5 个电话。接下来一小时内恰好接到 3 个电话的概率是多少?
假设平均呼叫次数 = 5 次/小时,我们需要计算在接下来的一小时内恰好接到 3 次呼叫的概率。

from scipy.stats import poisson  
  
mu = 5  # Average rate of occurrence  
k = 3  # Value for which to calculate the PMF  
  
pmf_value = poisson.pmf(k, mu)  
print("Poisson PMF:", pmf_value)  

示例 2:十字路口发生的事故
假设一个十字路口平均每天发生 2 起事故。一天内发生至少 4 起事故和至多 6 起事故的概率是多少?
这里,λ = 2,我们想要找到 P(X ≥ 4 且 X<=6),它是发生 4、5 和 6 次事故的概率之和。计算每个概率并将它们相加:

from scipy.stats import poisson  
  
mu = 2  # Average rate of occurrence  
pmf_value = 0  
  
# Value for which to calculate the PMF  
for k in range(4, 7):  
    pmf_value += poisson.pmf(k, mu)  
print("Poisson PMF:", pmf_value)  

如何生成泊松分布?
方法 1 - 使用 NumPy
让我们创建一个 λ = 3 的随机 (1 x 15) 分布。

from numpy import random  
  
# 创建大小为 15 的分布, 
# 事件平均发生率为 3  ;
x = random.poisson(mu=3, size=15)  
  
print("Poisson Distribution:", x)  

在这里,我们首先从 NumPy 模块中导入随机方法。
x = random.poisson(lam=3, size=15)  

此行将返回一个包含 15 个泊松分布随机样本的列表。我们通过 lam=3,表示事件的平均发生次数为 3。

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

运行程序后,我们将得到以下输出结果
Poisson Distribution: [4 1 7 2 3 4 4 3 3 7 7 5 2 2 0]

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

from scipy.stats import poisson  
import matplotlib.pyplot as plt  
  
# 生成样本量 = 50000 的泊松分布  
# 假设分布是关于一个城市每天的事故数量  ;
x = poisson.rvs(mu=3, size=5000)  
  
# Plot a histogram of the Poisson distribution  
plt.hist(x, color='red', edgecolor='black')  
plt.title(f"Poisson Distribution Plot for ? = 3" )  
plt.xlabel(
"Number of Accidents per day")  
plt.ylabel(
"Frequency")  
plt.show()  

累积分布函数(CDF):
累积分布函数 (CDF) 描述随机变量的值小于或等于特定值的概率。
在数学上,随机变量 X 的累积分布函数定义为:

  1. F(x) = P(X ≤ x)  

在哪里:

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

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

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

from scipy.stats import poisson  
  
# Average rate of emails (?)  
lambda_value = 6  
  
# Initial Probability set to 0  
pmf_value = 0  
  
# 方法 1:使用泊松 PMF 函数 P(X < 5)   计算概率;
for i in range(5):  
    pmf_value += poisson.pmf(k=i, mu=lambda_value)  
  
print(f"Probability using PMF P(X < 5) = {pmf_value}")  
  
# 方法 2:计算 CDF(累积分布函数) ;
cdf_value = poisson.cdf(k=4, mu=lambda_value)  
print(f
"Cumulative Probability of X < 5 = {cdf_value}")  

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

  • 在方法 1 中:我们通过对 X = 0, 1, 2, 3, 4 的概率求和,使用 poisson.pmf() 计算接收电子邮件的概率 (P(X < 5))。
  • 在方法 2 中:我们使用 poisson.cdf(k - 1, lambda_value) 计算接收最多 4 封电子邮件 (P(X < 5)) 的 CDF。

最终结果表示在接下来的一小时内收到少于 5 封电子邮件的概率。