一、泊松分佈問題:
假設我每天接到騷擾電話的次數服從泊松分佈,並且經統計平均每天我會接到20個騷擾電話。
請問:
1、我明天接到15個騷擾電話的概率?
2、我明天接到24個騷擾電話以下的概率(包含24)?
二、泊松分佈公式:
首先要清楚,泊松分佈是離散的,也就是說我接到騷擾電話次數必須是整數,要麼就是15次,要麼就是16次...,而不會是15.5次。
泊松分佈的概率函數爲:
累積概率分佈函數爲:
其實就是概率函數的累加。
均值方差:泊松分佈的均值和方差都是。
針對上面的問1這裏就是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附近,概率最大,均值兩邊概率呈遞減狀態。再者可以看到這結果很像二項分佈,也像正態分佈,關於兩者三個分佈的相似,這裏不做討論。
五、查表
查表前面代碼中有涉及,其實就是查累積概率。查詢=100,發生次數小於等於120的概率:
from scipy import stats
p = stats.poisson.cdf(120, 100)
print(p)
結果:0.9773306709216473