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

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

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

  • 顾客购买水果罐头是小概率事件;(注意泊松分布刻画的是 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,概率质量函数
            # cdf:cumulative 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)0e−3×20!≈0.00248

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


P(N(2)≥2)=1−P(N(2)<2)=1−P(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 泊松glm python 泊松分布 检验_Python 泊松glm



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

>>> [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] 泊松分布与美国枪击案