数据分析-泊松分布

泊松分布是统计学中一个非常重要的离散型概率分布,尤其适合描述稀有事件的发生概率。

(一)什么是泊松分布

泊松分布描述的是在​​一段固定时间或空间内​ ​,某个​​稀有事件​ ​发生的​​次数​​的概率分布。

例如:高速公路上的一个加油站,一小时内到达加油站的车辆数。一天内某网站收到的请求错误数。小区楼下的煎饼摊,一天可以卖出的煎饼数。一段固定时间内接到客服电话的次数。

(二)核心特征与假设

泊松过程需要满足以下条件:

1.​独立性​​:事件的发生是相互独立的。一个事件的发生不影响另一个事件发生的概率。

2.​平稳性​ ​:在任意等长的时间/空间区间内,事件发生的平均速率(强度)是​​恒定​ ​的。这个平均发生率记为 ​​λ​​。

3.​普通性​​:在极短的时间或空间内,发生两次或以上事件的概率趋近于零。即同一时刻最多发生一个事件,默认客服电话是一个一个打进来的、到达加油站的车也是一辆接一辆进来的。

(三)概率分布

如果随机变量 X(表示给定区间内事件发生的次数)服从泊松分布,我们记为:

​X ~ Poisson(λ)​

那么,在区间内事件恰好发生 k次的概率由以下​​概率质量函数​​ 给出:

​P(X = k) = (λ^k * e^(-λ)) / k!​

其中:

P(X = k)​​: 表示事件恰好发生 k 次的概率。

λ​ ​: 单位时间(或单位空间)内事件发生的​​平均次数​​(λ > 0)。这是泊松分布的唯一参数。

e​​: 自然对数的底数,约等于 2.71828。

k​​: 事件发生的次数(k = 0, 1, 2, ...)。

(四)分布数字特征

期望值(均值)​ ​: E(X) = λ

方差​ ​: Var(X) = λ

泊松分布一个非常重要的特性是:它的期望和方差相等。​这个特性在实际中常被用来初步判断一个数据集是否可能服从泊松分布。

(五)与二项分布的关系

当二项分布的试验次数 n很大,而成功概率 p很小时,二项分布可以近似用泊松分布来替代,其中 ​​λ = n * p​​。

n > 20p < 0.05,或 n > 100np < 10时,这种近似效果很好。

为什么有用?​ ​: 当 n很大时,计算二项系数 C(n, k)会相对困难,而泊松分布公式更易于计算。

例如​​: 已知某种疾病的患病率为 0.001。在 5000 人的社区中,患病人数为 4 的概率是多少?

​二项分布精确解​ ​: X ~ Binomial(5000, 0.001)P(X=4) = C(5000, 4) * (0.001)^4 * (0.999)^4996,计算复杂。

​泊松近似​ ​: λ = 5000 * 0.001 = 5X ~ Poisson(5)P(X=4) = (5^4 * e^(-5)) / 4!,计算简单,且结果非常接近。

(六)注意事项

λ 是常数​​: 必须确保事件发生的平均速率 λ 在观察期间是恒定的。例如,不能用"一天"的平均通话量来精确计算"凌晨3点-4点"的通话量,因为速率在一天内是变化的。

​事件独立性​​: 这是关键假设。例如,一个地方发生地震后可能会引发余震(不独立),因此严格来说,地震次数不完全服从泊松分布。

​均值等于方差​​: 如果你的数据计数的方差远大于或远小于均值(称为过离散或欠离散),那么数据可能不适用于泊松分布,需要考虑负二项分布等其他模型。

​区间选择​​: λ 的大小依赖于你所选的时间或空间区间。例如,λ=3次/小时 等价于 λ=0.05次/分钟。

(七)Python计算

在Python中,可以使用 scipy.stats模块的 poisson对象来进行相关数值计算。

假设某咖啡店每小时平均有5位顾客通过手机下单(λ=5)。

python 复制代码
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import poisson

# 定义参数 lambda
lambda_ = 5

# 1. 计算概率质量函数 - 恰好有 k 个订单的概率
k = 3
prob_exactly_3 = poisson.pmf(k, lambda_)
print(f"一小时恰好有 {k} 个订单的概率: {prob_exactly_3:.4f}") # 输出: 0.1404

# 2. 计算累积分布函数 - 订单数小于等于 k 的概率
k = 7
prob_at_most_7 = poisson.cdf(k, lambda_)
print(f"一小时订单数小于等于 {k} 的概率: {prob_at_most_7:.4f}") # 输出: 0.8666

# 3. 计算生存函数(1 - CDF) - 订单数大于 k 的概率
k = 2
prob_more_than_2 = poisson.sf(k, lambda_) # 等价于 1 - poisson.cdf(k, lambda_)
print(f"一小时订单数大于 {k} 的概率: {prob_more_than_2:.4f}") # 输出: 0.8753

# 4. 从泊松分布中生成随机数
random_samples = poisson.rvs(lambda_, size=100)
print(f"生成的100个随机样本的前10个: {random_samples[:10]}")

# 5. 绘制概率质量函数图
k_values = np.arange(0, 15) # k 从 0 到 14
pmf_values = poisson.pmf(k_values, lambda_)

plt.figure(figsize=(10, 6))
plt.bar(k_values, pmf_values, color='skyblue', alpha=0.7)
plt.axvline(lambda_, color='red', linestyle='--', label=f'λ (均值) = {lambda_}')
plt.title(f'泊松分布的概率质量函数 (λ = {lambda_})')
plt.xlabel('事件发生次数 k')
plt.ylabel('概率 P(X=k)')
plt.legend()
plt.grid(axis='y', alpha=0.3)
plt.show()

输出:

一小时恰好有 3 个订单的概率: 0.1404

一小时订单数小于等于 7 的概率: 0.8666

一小时订单数大于 2 的概率: 0.8753

生成的100个随机样本的前10个: 4 5 2 6 8 4 5 5 5 4

其中:

poisson.pmf(k, lambda_): 计算 P(X = k)

poisson.cdf(k, lambda_): 计算 P(X <= k)

poisson.sf(k, lambda_): 计算 P(X > k)

poisson.rvs(lambda_, size=100): 生成100个服从 Pois(λ) 的随机数。

图表会直观地显示泊松分布的形状(总是右偏<右边的尾巴比较长>,但随着λ增大,会逐渐变得对称)。

相关推荐
笨鸟先飞,勤能补拙4 小时前
AI 赋能网络安全:技术全景、成熟度评估与实战案例
人工智能·python·安全·web安全·网络安全·sqlite·github
长和信泰光伏储能5 小时前
京津冀光伏发电:绿色能源的未来之路
python·能源
江畔柳前堤5 小时前
信号的本质——从模拟波形到AI中的数据张量
人工智能·深度学习·机器学习·计算机视觉·数据挖掘·语音识别
浦信仿真大讲堂5 小时前
从重复操作到自动化闭环:如何让 CST 与 Python 真正协同起来
python·自动化·cst·仿真软件·达索软件
Gu Gu Study6 小时前
ScoutLoop开放域深度研究引擎(agent的初步设计想法)
人工智能·python
卷无止境6 小时前
写代码这件事,到底该讲究点什么?
后端·python
卷无止境7 小时前
循环复杂度到底在算什么,Python 代码怎么才能写得让人一看就懂
后端·python
lpfasd1237 小时前
MediaCrawler 项目深度分析
chrome·python·chrome devtools
江畔柳前堤7 小时前
系统的本质——从LTI系统到神经网络
人工智能·深度学习·神经网络·机器学习·计算机视觉·数据挖掘·语音识别
Dxy12393102167 小时前
Python项目打包成EXE完整教程(PyInstaller实战避坑)
开发语言·python