一個故事:你已經做了10年的自由職業者了。到目前為止,你的平均年收入約為8萬美元。今年,你覺得自己陷入了困境,決定要達到6位數。要做到這一點,你需要先計算這一令人興奮的成就發生的概率,但你不知道怎麼做。
在世界上有許多場景,其中存在某個随機事件的已知概率,企業希望發現該事件在未來發生的概率大于或小于這個概率。例如,已經知道自己平均銷售額的零售商所有者會試圖猜測他們在黑色星期五或雙十一等特殊日子能多賺多少錢。這将幫助他們儲存更多的産品,并相應地管理他們的員工。
在這篇文章中,我們将讨論用于模拟上述情況的泊松分布背後的理論,如何理解和使用它的公式,以及如何使用Python代碼來模拟它。
離散型概率分布這篇文章假設你對概率有一個基本的了解。在我們開始真正的文章之前,我們将建立一些對離散概率分布的理解。
首先,讓我們定義離散的含義。在描述統計學中,離散數據是通過計數記錄或收集的任何數據,即整數。例如考試分數、停車場裡的汽車數量、醫院裡的分娩數量等。
然後,有一些随機實驗會産生離散的結果。例如,抛硬币有兩種結果:正面和反面(1和0),擲骰子有6種離散結果,以此類推。如果用一個随機變量X來存儲離散實驗的可能結果,那麼它将具有離散概率分布。
概率分布記錄了随機實驗的所有可能結果。
作為一個簡單的例子,讓我們來構建一次抛硬币的分布:
這很容易。如果我們想以編程的方式記錄這個分布,它應該是Python列表或Numpy數組的形式:
然而,你可以想象,對于有許多可能結果的大型實驗,用這種方法建立分布并找到概率是不可能的。值得慶幸的是,每個概率分布都有自己的公式來計算任何結果的概率。對于離散概率分布,這些函數稱為概率質量函數(PMF)。
泊松分布我們将通過一個案例來開始理解泊松分布。假如你真的很喜歡在醫院裡看新生兒。根據你的觀察和報告,你知道醫院平均每小時出生6個新生兒。
你發現你明天要出差,所以在去機場之前,你想最後一次去醫院。因為你要離開好幾個月,你想看到盡可能多的新生兒,所以你想知道在起飛前一小時是否有機會見到10個或更多的嬰兒。
如果我們把觀察新生兒作為一個随機實驗,結果将遵循經典的泊松分布。原因是它滿足泊松分布的所有條件:
有一個已知的事件速率:平均每小時有6個新生兒
事件是獨立發生的:1嬰兒的出生并不影響下一個嬰兒的出生時間
已知的出生率随時間是不變的:平均每小時嬰兒的數量不随時間變化
兩件事不會在同一時刻發生(每個結果都是離散的)
泊松分布具有許多重要的業務含義。企業通常使用他來預測某一天的銷售額或客戶數量,因為他們知道每天的平均價格。做出這樣的預測有助于企業在生産、調度或人員配備方面做出更好的決策。例如,庫存過多意味着銷售活動減少,或者沒有足夠的商品意味着失去商機。
簡而言之,泊松分布有助于發現事件在固定時間間隔内發生的概率大于或小于已經記錄的速率(通常表示為λ(lambda))。
其概率質量函數為:
這個公式的字母含義如下:
1. k是成功的次數(期望發生的次數)
1. λ是給定的速率
1. e為歐拉數,e = 2.71828…
1. k !是k的階乘嗎
使用這個公式,我們可以求出看到10個新生兒知道平均出生率為6的概率:
不幸的是,隻有大約4%的幾率能看到10個孩子。
我們不會詳細講解這個公式是如何推導出來的,但如果你感興趣,請觀看可汗學院的視頻。
還有一些要點你必須記住。即使有一個已知的速率,它隻是一個平均值,所以事件的時間可能是完全随機的。例如,你可以觀察兩個背靠背出生的嬰兒,或者你可能會為下一個嬰兒等待半個小時。
而且,在實踐中,λ的速率可能不總是恒定的。這甚至适用于我們的新生兒實驗。即使這個條件不成立,我們仍然可以認為分布是泊松分布,因為泊松分布足夠接近,可以模拟情況的行為。
模拟泊松分布利用numpy從泊松分布中模拟或抽取樣本非常容易。我們首先導入它,并使用它的随機模塊進行模拟:
import numpy as np
從泊松分布中提取樣本,我們隻需要速率參數λ。我們把它插入np,随機的。泊松函數,并指定樣本個數:
poisson = np.random.poisson(lam=10, size=10000)
這裡,我們模拟了一個速率為10的分布,有10k個數據點。為了看到這個分布,我們将繪制其PMF的結果。雖然我們可以手工完成,但已經有一個非常好的包叫empiricaldist,由艾倫·b·唐尼(Allen B. Downey)撰寫,他是《ThinkPython》(ThinkPython)和《ThinkStats》(ThinkStats)等著名著作的作者。我們将安裝并導入其Pmf函數到我們的環境中:
from empiricaldist import Pmf # pip install empiricaldist
Pmf有一個名為from_seq的函數,它接受任何分布并計算Pmf:
poisson = np.random.poisson(lam=10, size=10000)
pmf_poisson = Pmf.from_seq(poisson)
pmf_poisson
回想一下,PMF顯示了每個唯一結果的概率,所以在上面的結果中,結果被作為指數和概率下的概率給出。讓我們使用matplotlib來繪制它:
# Create figure and axes objects
fig, ax = plt.subplots(figsize=(20, 10))
# Plot the PMF
ax.plot(pmf_poisson, marker='.') # label each data point with a dot
# Labelling
ax.set(title='Probability Mass Function of Poisson Distribution',
ylabel='P (X = x)', xlabel='Number of events')
plt.show();
正如預期的那樣,最高的概率是均值(速率參數,λ)。
現在,讓我們假設我們忘記了泊松分布的PMF公式。如果我們做觀察新生兒的實驗,我們如何求出看到10個新生兒而比率為6的概率呢?
首先,我們用給定的速率作為參數來模拟完美泊松分布。同時,為了獲得更好的精度,我們會繪制大量的樣本:
child_births = np.random.poisson(lam=6, size=1000000)
我們對一個速率為6,長度為100萬的分布進行抽樣。接下來,我們看看他們中有多少人有10個孩子:
births_10 = np.sum(child_births == 10)
>>> births_10
41114
所以,我們在41114個試驗中觀察了10個嬰兒(每個小時可以考慮有一個試驗)。然後,我們用這個數除以樣本總數:
>>> births_10 / 1e6
0.041114
如果您回想一下,使用PMF公式,結果是0.0413,我們可以看到我們手工編寫的解決方案非常接近。
結論關于泊松分布仍有許多值得探讨的地方。我們讨論了這個詞的基本用法及其在商業世界中的含義。泊松分布還有一些有趣的地方比如它和二項分布的關系。
作者:Bex T.
deephub翻譯組
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!