泊松分布的理解与Python仿真

我们首先从一个实例出发,来分析缘何泊松分布在经济社会生活中如此频繁地出现和使用。

已知某家小杂货店,平均每周售出两个水果罐头,请问该水果店的最佳库存量是多少?(或者这么问,如果你是商家,你该如何储备货物?)

假定不存在季节因素,可以近似认为,该问题满足以下三个条件:

  • 顾客购买水果罐头是小概率事件;(注意泊松分布刻画的是 rare events
  • 购买水果罐头的顾客之间是独立的,也即不会互相依赖或者影响;
  • 顾客购买水果罐头的概率是稳定的;

在统计学上,如果某类事件满足上述三个条件,就称它服从泊松分布(poisson distribution),泊松分布的概率质量函数(pmf,probability mass function):

p(X=k)=eλλkk!

各个参数的现实意义如下:

  • X :该问题关注的离散型随机变量(random variable),每周销售的罐头数量

  • P(X=k) ,每周销售 k 个罐头的概率

  • k :取值为全体自然数 (0,1,2,3,)

  • λ :每周水果罐头的平均销售量,是一个常数,本例为2

我们用Python中的Scipy库中的相关类与函数实现对这一问题的仿真:

>>> import scipy.stats as st
>>> rv = st.poisson(2)
>>> [(rv.pmf(i), rv.cdf(i)) for i in range(7)]
            # pmf: probability mass function,概率质量函数
            # cdfcumulative distribution function,累积分布函数                   
[(0.1353352832366127, 0.1353352832366127),
 (0.2706705664732254, 0.406005849709838),
 (0.2706705664732254, 0.67667641618306362),
 (0.18044704431548356, 0.85712346049854704),
 (0.090223522157741778, 0.94734698265628892),
 (0.036089408863096722, 0.98343639151938556),
 (0.012029802954365565, 0.99546619447375118)]

上述数据可见,如果存货4个罐头,94.7%的概率不会缺货(缺货的概率为5.3%, 15.3%19 ,平均19周发生一次缺货),如果存货5个罐头,98.3%的概率不会缺货(发生缺货的概率为1.7%, 11.7%59 ,平均59周(一年零2个月)发生一次缺货)。

从泊松分布到泊松过程

P(N(t)=n)=(λt)neλtn!

已知平均每个小时出生三个婴儿, λ=3
一个小时内出生3个婴儿的概率,就表示为 P(N(1)=3) ,接下来两个小时,一个婴儿都不出生的概率为:

P(N(2)=0)=(3×2)0e3×20!0.00248

接下来两个小时,至少出生俩个婴儿的概率:

P(N(2)2)=1P(N(2)<2)=1P(N(2)=1)P(N(2)=0)

泊松分布与美国枪击案

我们首先来判断”美国枪击案发生的次数”是否满足”泊松分布”的三个条件:

  • 枪击案是小概率事件

  • 枪击案之间彼此独立,不会互相影响

  • 枪击案的发生概率是稳定的

显然,第三个条件是关键,如果成立,说明美国的治安没有恶化;如果不成立,说明枪击案的发生概率不稳定。根据资料1982-2012的31年间枪击案的分布情况为:

一年中发生枪击案的数量 年数
0 4
1 10
2 7
3 5
4 4
5 0
6 0
7 1

经过简单计算,平均每年发生枪击案的次数为:

>>> num_years = [4, 10, 7, 5, 4, 0, 0, 1]
>>> lmbda = sum(x*y for x, y in zip(range(8), num_years))/sum(num_years)
                    # lmbda = 2.0                   

接下来,我么通过泊松分布来仿真”美国每年发生枪击案的次数”:

import numpy as np
import scipy.stats as st
import matplotlib.pyplot as plt

rv = st.poisson(2)
num_years = [4, 10, 7, 5, 4, 0, 0, 1]
x = range(8)
plt.bar(np.array(x)-.4, num_years, label='Observed instances')
plt.plot(x, sum(num_years)*rv.pmf(x), ls='dashed', 
        lw=2, c='r', label='Poisson distribution\n$(\lambda=2.0)$')
plt.xlim([-1, 8])       
plt.ylim([0, 11])
plt.xlabel('# of mass shootings in a year')
plt.ylabel('# of years')
plt.legend(loc='best')
plt.show()


泊松分布的理解与Python仿真_第1张图片

上图中,蓝色的条形柱是实际的观察值,红色的虚线是理论的预期值,可以看到,观察值和预期值之间还是很接近的:

>>> [31*rv.pmf(i) for i in range(8)]
[4.1953937803349941,
 8.3907875606699882,
 8.3907875606699882,
 5.5938583737799901,
 2.796929186889995,
 1.1187716747559984,
 0.37292389158533251,
 0.10654968331009501]
一年中发生枪击案的数量 观察值 预期值(理论值)
0 4 4.2
1 10 8.39
2 7 8.39
3 5 5.59
4 4 2.8
5 0 1.12
6 0 0.37
7 1 0.11

我们用”卡方检验”(chi-square test),来检验观察值与期望值之间是否存在显著差异。

References

[1] 泊松分布与美国枪击案

你可能感兴趣的:(math,趣味数学)