泊松分布
我們回到泊松分布。先來看一個生活場景。
宋朝慶曆年間,劉姥姥由於生活壓力,不得不根據祖傳秘方發明總結並始創了一種名叫十二香的調料,並開始在市場上叫賣。劉姥姥在街上賣了半年,由於本小利薄,味道贊絕,一直供不應求,但由於製作周期長,原料準備流程複雜,而且保存時間較短,一直無法提高產量。
這一天,劉姥姥終於決定要弄清楚她每天剛製作的調料究竟是如何被火速買光的,以便提高進貨量來增加銷量。
劉姥姥首先買了絕對充足的原料,熬夜製作了足份的十二香。賣了一周,每天開張五個時辰,結果沒賣光剩下的調料全部變質了只能丟掉,心疼的她難受了小半天。不過她總算是記錄下了寶貴的數據:這七天內每天調料的銷售情況。
劉姥姥看著這用浪費的調料換來的寶貴數據,想了想,打算以後每天都按照日出貨平均數:即10份來進原材料,製作,保存。
劉姥姥的兒子劉大耳不同意。他認為:如果按照10份準備,那七天裡有四天都不夠賣的,這可能會使王縣令的老婆買不到調料,將來一定會鬧事。
劉大耳說:我們應該保證有90%以上的把握準備最少的調料每日的份數,使來咱這購買十二香的客人需求全都滿足。我們可以如此如此,這般這般……
於是劉姥姥就聽從了大耳兒的建議,從此之後,生意更加興隆,至於王縣令後來入夥加盟,生意不斷做大,後來更是推陳出新創立了十三香舉世聞名,當然這都是後話了。
那麼當時劉大耳的方案是什麼呢?接下來將一一道來。
劉姥姥每天賣五個時辰,也就是600分鐘,如果每分鐘最多只能賣出一份調料,且在這一分鐘賣出調料的概率是P,那麼這一天賣出10份調料的概率可以通過二項分布計算:
但是王縣令家裡人丁興旺,他老婆有時候會一次買幾十份調料,那每分鐘可能就賣出去不止一份調料。於是劉大耳將分割六個時辰的時間間隔進一步縮小,分割成,再利用極限的思想:
再抽象一些,那麼在某天能賣出份調料的概率應該是:
那麼P如何計算呢?還記得二項分布的期望嗎:假設
而我們可以使用當比較小的時候計算平均值得到的來近似。
另外,需要注意的是,在如上假設下,當越來越大時,值也會越來越小。
我們來進一步計算一下這個概率:
至此,我們就得到了教科書中泊松分布的概率密度函數!劉大耳用近似替代這裡的。於是我們可以利用python中的scipy庫快速畫出劉姥姥每天賣出份十二香的概率密度曲線和累計分布函數。
import numpy as npfrom scipy import statsfrom matplotlib import pyplot as plt mu = 10x = np.arange(0,101,1) plist = stats.poisson.pmf(x,mu) clist = stats.poisson.cdf(x,mu) plt.plot(x,plist,label='poisson distribution pmf') # plt.plot(x,cdflist,label='poisson distribution cdf') plt.xlim((-1,15))plt.grid() plt.legend() plt.title(r'Poisson Distribution $\mu$:10') plt.show()如圖1。近似從圖中得出:每天準備14份十二香,就有超過90%的把握不讓顧客乘興而來空手而去。
從上面的例子可以看出,泊松分布可以近似模擬一個離散事件在連續時間內發生的次數的概率分布。真實世界中有很多場景都和泊松分布有關,比如某網站在某段時間內的點擊率;客服中心在某段時間內接到電話的次數;醫院在某段時間內接生的嬰兒;放射性元素在某段時間內衰變的粒子個數……
事實上我們通過上面的推導過程也能看出:當很小(或很大)時的二項分布就近似等於泊松分布,此時我們也可以用泊松分布來快速近似計算起來更麻煩的二項分布。不信的話我們把代碼和圖撂在這,請看圖2。
import numpy as np from scipy import stats from matplotlib import pyplot as plt mu = 10 x = np.arange(0,101,1) plist = stats.poisson.pmf(x,mu)blist1 = stats.binom.pmf(x,20,0.5) blist2 = stats.binom.pmf(x,40,0.25) blist3 = stats.binom.pmf(x,100,0.1) plt.plot(x,plist,label=r'poisson $/mu:10$',color='k') plt.plot(x,blist1,'-.',label=r'binomial $n:20, p:0.5$',alpha=0.5) plt.plot(x,blist2,'-.',label=r'binomial $n:40, p:0.25$',alpha=0.5) plt.plot(x,blist3,'-.',label=r'binomial $n:100, p:0.1$',alpha=0.5)plt.xlim((-1,20)) plt.title(r'Poisson and Binomial Distribution') plt.grid() plt.legend() plt.show()
指數分布
我們繼續劉姥姥的故事。
話說這劉姥姥還有個孫子劉小笨,隨著劉姥姥和劉大耳的買賣日益紅火,劉小笨的夥食也越來越好,飽暖思學術,開始成天開始研究算術。劉小笨天天看劉姥姥賣調料,發現賣出一份調料所需要的時間間隔符合某種分布。經過思考,他決定把這種分布稱為指數分布。
經過後人對劉小笨的著作進行解讀,我們發現了他的思考過程。
這裡我們先考慮簡單的量,比如賣出一份調料所需要的時間大於1個時辰(2個小時,120分鐘)的概率,其實和1個時辰內一份調料也沒有賣出的概率,之和為1。
另外,假設每個時辰平均賣出的調料數為(根據劉姥姥的記錄,我們知道這個數近似為2)。記隨機變量為兩次賣出調料之間的時間間隔。根據之前劉大耳的假設,立刻有:
至此,劉小笨可以估算任意時刻他姥姥賣出一份調料的概率。比如,任何1個時辰內,會有調料賣出的概率是:
個時辰
而在接下來的30分鐘到60分鐘內,會有調料賣出的概率是:事實上,到這裡我們已經得到了的累計分布函數了:對其求導就可以得到其概率密度函數:
至此,我們就得到了劉姥姥連續兩次賣出調料的時間間隔的概率密度函數,隨機變量就符合指數分布,其中的指的是每個時辰平均賣出調料的份數(這裡是2) 。import numpy as np from scipy import stats from matplotlib import pyplot as plt x = np.arange(0,10,0.1) elist1 = stats.expon.pdf(x,scale=1/2) elist2 = stats.expon.pdf(x,scale=1/3) elist3 = stats.expon.pdf(x,scale=1/5)plt.plot(x,elist1,label=r'$\lambda:2$') plt.plot(x,elist2,label=r'$\lambda:3$') plt.plot(x,elist3,label=r'$\lambda:5$') plt.xlim((0,3)) plt.grid() plt.legend() plt.title(r'Exponential Distribution PDF') plt.show()
可以從圖中看出,當每個時辰賣出更多的調料份數時,更小的連續兩次賣出調料時間間隔發生的概率更高,這很合理。用一句話來概括,每天賣出的調料份數服從的是泊松分布,而賣出兩份調料的時間間隔服從指數分布,它們的期望分別代表了平均每天賣出的調料份數和每份調料賣出的平均時間間隔。真實世界中同樣有很多場景也和指數分布有關,比如某網站被訪問的時間間隔;客服中心連續接到電話中間的休息時間間隔;電子產品的壽命(出現故障的時間間隔即正常使用壽命)……話說劉姥姥去世之後,劉小笨和王縣令合作開店。這個時候生意更好了,王縣令粗略統計了一下,發現平均每個時辰能賣出100份調料。他於是問劉小笨:昨天剛做好的那300份調料都賣光的時間滿足什麼概率分布?劉小笨沉吟片刻,感覺這種分布和之前的泊松分布指數分布都不一樣,於是他把這種分布稱作:伽馬分布。假設每份調料賣出都是相互獨立的,而單位時間賣出調料份數均值為。則在這裡,從開張到賣出到當日第X份調料所需要的時間隨機變量就是我們應該關注的量。我們假設該隨機變量分布的概率密度函數為。進一步的,我們根據概率密度函數定義有:而我們同樣可以使用處理泊松分布時的方法,將均分為份,計算當趨近於無窮大時的。需要注意的是,時間後,我們應該賣出了第份,也就是說,在將這一時間段分為份後,前份中我們肯定已經賣出了份調料。假設每一小份時間段內我們賣出調料的概率為,那麼這麼問題又退化成了二項分布相關的問題。根據期望的定義,我們有, 將帶入上式。至此,我們得到了伽馬分布的概率密度函數。更一般,當我們允許為小數時,可以對階乘做適當的解析延拓,也就是伽馬函數了。別看這式子如此複雜,實際上伽馬分布就是要解決計算從此時到後次隨機事件都發生,需要等多長時間的問題。 顯然,當時,退化為了指數分布,即要解決的問題退化為了計算下一次發生該隨機事件的時間間隔 問題。import numpy as np from scipy import stats from matplotlib import pyplot as plt x = np.arange(0,10,0.1) glist1 = stats.gamma.pdf(x,1) glist2 = stats.gamma.pdf(x,2) glist3 = stats.gamma.pdf(x,3)plt.plot(x,glist1,label=r'$x:1$') plt.plot(x,glist2,label=r'$x:2$') plt.plot(x,glist3,label=r'$x:3$') plt.grid() plt.legend() plt.title(r'Gamma Distribution PDF: $\lambda:1$') plt.show()
總結一下,泊松分布解決的是離散事件發生在連續的時間內的次數概率分布的問題 ;指數分布解決的是獨立離散事件發生一次所需連續時間長度分布的問題 ;伽馬分布解決的是多次離散事件發生所需連續時間長度分布 的問題。 其中,指數分布是伽馬分布的特例。作者:賈恩東
編輯:於騰凱
校對:林亦霖
數據派研究部成立於2017年初,以興趣為核心 劃分多個組別,各組既遵循研究部整體的知識分享 和實踐項目規劃 ,又各具特色:
算法模型組: 積極組隊參加kaggle等比賽,原創手把手教系列文章;
調研分析組: 通過專訪等方式調研大數據的應用,探索數據產品之美;
系統平臺組: 追蹤大數據&人工智慧系統平臺技術前沿,對話專家;
自然語言處理組: 重於實踐,積極參加比賽及策劃各類文本分析項目;
製造業大數據組: 秉工業強國之夢,產學研政結合,挖掘數據價值;
數據可視化組: 將信息與藝術融合,探索數據之美,學用可視化講故事;
網絡爬蟲組: 爬取網絡信息,配合其他各組開發創意項目。
點擊文末「閱讀原文」,報名數據派研究部志願者,總有一組適合你~
轉載須知
如需轉載,請在開篇顯著位置註明作者和出處(轉自:數據派THUID:DatapiTHU),並在文章結尾放置數據派醒目二維碼。有原創標識文章,請發送【文章名稱-待授權公眾號名稱及ID】至聯繫郵箱,申請白名單授權並按要求編輯。
未經許可的轉載以及改編者,我們將依法追究其法律責任。
點擊「閱讀原文 」加入組織~