python-介紹泊松分佈(poisson分佈)

一、泊松分佈問題:

假設我每天接到騷擾電話的次數服從泊松分佈,並且經統計平均每天我會接到20個騷擾電話。
請問:
1、我明天接到15個騷擾電話的概率?
2、我明天接到24個騷擾電話以下的概率(包含24)?

二、泊松分佈公式:

首先要清楚,泊松分佈是離散的,也就是說我接到騷擾電話次數必須是整數,要麼就是15次,要麼就是16次...,而不會是15.5次。

泊松分佈的概率函數爲:

P(X=k)=\frac{\lambda ^{k}}{k!}e^{-\lambda },k=0,1,2,....

累積概率分佈函數爲:

P(X\leq x)=\sum_{k=0}^{x}\frac{\lambda ^{k}e^{-\lambda }}{k!}    

其實就是概率函數的累加。

均值方差:泊松分佈的均值和方差都是\lambda

針對上面的問1這裏\lambda就是20,k就是15。

 

三、解決問題

方法一:根據公式編寫代碼

import math

def p_possion(k, m):
    kjie = 1  #k!
    for i in range(1, k+1):
        kjie*=i
    pk = math.pow(m, k)/kjie*math.e**(-m)
    return pk

p = p_possion(15, 20)
print("接到15個騷擾電話的概率:",p)

p=0
for i in range(0,25):
    p+=p_possion(i, 20)
print("接到24個騷擾電話以下的概率:",p)

結果:

接到15個騷擾電話的概率: 0.0516488535317584
接到24個騷擾電話以下的概率: 0.8432273781737633

方法二:用scipy包中的scipy.stats.poisson

注:15次的概率=15次以下的概率-14次以下的概率

from scipy import stats

p = stats.poisson.cdf(15, 20)-stats.poisson.cdf(15-1, 20)
print("接到15個騷擾電話的概率:",p)

p = stats.poisson.cdf(24, 20)
print("接到24個騷擾電話以下的概率:",p)

四、泊松概率及累積概率分佈

仍以騷擾電話爲例,計算接到電話0~50次的概率:

from scipy import stats
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']#用來正常顯示中文標籤
plt.rcParams['axes.unicode_minus']=False#用來正常顯示負號

X=range(0,51)
Y=[]
for k in X:
    p = stats.poisson.cdf(k, 20)-stats.poisson.cdf(k-1, 20)
    Y.append(p)

plt.bar(X, Y, color="red")
plt.xlabel("次數")
plt.ylabel("概率")
plt.title("接到騷擾電話次數及概率")
plt.show()

結果:

首先可以看出,在均值20附近,概率最大,均值兩邊概率呈遞減狀態。再者可以看到這結果很像二項分佈,也像正態分佈,關於兩者三個分佈的相似,這裏不做討論。

五、查表

查表前面代碼中有涉及,其實就是查累積概率。查詢\lambda=100,發生次數小於等於120的概率:

from scipy import stats

p = stats.poisson.cdf(120, 100)
print(p)

結果:0.9773306709216473

 

author:藍何忠

email:[email protected]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章