scipy.stats.poisson 的 pmf 和 cdf 在算什麼?
考慮某生產線每小時出現瑕疵品的個數符合卜瓦松分佈(Poisson Distribution),已知平均每小時產生 5 個瑕疵品,附圖程式碼展示資料處理,請問下列敘述何者正確? import numpy as np from scipy.stats import poisson lambda_poisson = 5 print(poisson.pmf(5, lambda_poisson))
生產線每小時平均出現 5 個瑕疵品,這個事件的次數分佈符合卜瓦松分佈。程式碼用 scipy.stats.poisson 計算 pmf(5, 5),並搭配四個關於 lambda、pmf、適用條件和 cdf 的敘述,要你判斷哪一個描述是正確的。
問你:對於這段程式碼和卜瓦松分佈的性質,哪一個敘述正確?
一句話總結
正確答案是 C:卜瓦松分佈的適用條件是事件彼此獨立,且平均發生率(λ)固定不變。lambda 是平均發生次數(不是上限)、pmf 算的是「恰好等於 k」的機率、cdf 算的是「小於等於 k」的機率。
先感受問題:工廠品管要預測瑕疵品個數的機率
「精準製造」工廠的品管工程師小嘉需要分析生產線,每小時平均出現 5 個瑕疵品。她想回答幾個問題:
「某一小時內瑕疵品不超過 10 個的機率?」→ cdf
「這個分佈模型的使用前提是什麼?」→ 適用條件
小嘉用 scipy.stats.poisson 計算。關鍵是要搞清楚:lambda 代表什麼意義、pmf 和 cdf 各算哪一段機率。
卜瓦松分佈能用的前提是:每次瑕疵品出現的事件互相獨立(一個瑕疵品不會影響下一個),而且平均發生率(每小時 5 個)在觀察期間保持穩定,不會忽多忽少。這就是選項 C 描述的內容。
三個常見對卜瓦松分佈的誤解
- 把 λ 誤解為「上限」:lambda(λ)是「平均發生次數」,不是「最多幾次」。lambda = 5 表示長期觀察下平均每小時 5 個,某小時可能是 3 個、也可能是 9 個,理論上可以到無限大(只是機率越來越小)。
- 把 pmf 誤解為「小於 k」的機率:pmf(probability mass function,機率質量函數)算的是「恰好等於 k」的機率,例如 pmf(5, 5) = P(X = 5),不是 P(X < 5)。「小於等於 k」要用 cdf(cumulative distribution function)。
- 把 cdf 誤解為「大於等於 k」的機率:cdf(10, 5) = P(X ≤ 10),算的是「10 個以內(含 10 個)」的累積機率。「大於等於 10」的機率要用 1 - cdf(9, 5),不是直接呼叫 cdf(10, 5)。
- 忽略適用條件:卜瓦松分佈有三個適用前提:事件獨立、時間段內平均率固定、單位時間內事件發生次數為整數(計數型資料)。如果瑕疵品之間有關聯(例如某個機器故障導致連續產生瑕疵品),就不符合獨立性條件,不能直接套用。
- 把卜瓦松分佈的 λ 和高斯分佈的參數混淆:高斯分佈(正態分佈)有兩個參數 μ(均值)和 σ(標準差),卜瓦松只有一個 λ,而且 λ 同時等於均值和變異數,這是卜瓦松分佈的特殊性質。
逐一驗證四個選項
小嘉對每個選項做驗證:
→ 錯。lambda 是均值,不是上限。卜瓦松分佈的取值範圍是 0, 1, 2, 3... 無上限。
選項 B:pmf(5, 5) 表示「小於 5 個」的機率?
→ 錯。pmf 是點機率 P(X = k),pmf(5, 5) = P(X = 5) ≈ 0.1755,不是 P(X < 5)。
選項 C:適用條件是事件獨立且平均發生率固定?
→ 正確。這是卜瓦松分佈的核心假設,也是最重要的適用前提。
選項 D:cdf(10, 5) 表示「大於等於 10 個」?
→ 錯。cdf 是累積分佈函數 P(X ≤ k),cdf(10, 5) = P(X ≤ 10),不是 P(X ≥ 10)。
這就是選項 C 講的:卜瓦松分佈的適用條件為事件彼此獨立,且平均發生率固定。
技術版:scipy.stats.poisson 的 API 精讀與公式
中級考試大概率會考程式碼跟公式,所以這部分你還是要學。但如果現在學起來很痛苦,可以先跳過,等讀完其他題目回頭再來。
想像投擲一顆骰子。「pmf」是問「恰好出現 5 點的機率是多少?」是一個點的機率。「cdf」是問「出現 1 到 5 點(含)的機率是多少?」是把 1、2、3、4、5 的機率都加起來。lambda 是說「長期平均丟出幾點」,不是說「最多幾點」。
| 白話說法 | 程式碼 |
|---|---|
| 平均每小時 5 個瑕疵品 | lambda_poisson = 5 |
| 恰好 5 個瑕疵品的機率 | poisson.pmf(5, lambda_poisson) |
| 不超過 10 個(含 10)的機率 | poisson.cdf(10, lambda_poisson) |
| 超過 10 個(含 11+)的機率 | 1 - poisson.cdf(10, lambda_poisson) |
| 恰好大於等於 10 個的機率 | 1 - poisson.cdf(9, lambda_poisson) |
- λ(lambda)
- 卜瓦松分佈的唯一參數,等於均值也等於變異數:E(X) = Var(X) = λ。
- pmf(k, λ)
- 機率質量函數,計算 P(X = k):在觀察期間內恰好發生 k 次事件的機率。
- cdf(k, λ)
- 累積分佈函數,計算 P(X ≤ k):發生次數不超過 k 次的累積機率。
- 獨立性(independence)
- 每次事件的發生不受其他事件影響,是卜瓦松分佈的必要假設。
- 固定發生率(stationary rate)
- 觀察期間內 λ 不隨時間改變,是卜瓦松分佈的另一必要假設。
| 意義 | 公式 |
|---|---|
| pmf:P(X = k) | P(X=k) = (λᵏ · e⁻λ) / k! |
| cdf:P(X ≤ k) | P(X≤k) = Σᵢ₌₀ᵏ (λⁱ · e⁻λ) / i! |
| pmf(5, 5) 的實際計算 | P(X=5) = (5⁵ · e⁻⁵) / 5! = 3125 × 0.0067 / 120 ≈ 0.1755 |
- lambda = 5 代表什麼?為什麼不是「最多 5 個」?
- pmf(k, λ) 和 cdf(k, λ) 各算什麼範圍的機率?怎麼用 cdf 算「超過 k」的機率?
- 卜瓦松分佈的兩個必要假設是什麼?違反其中一個會怎樣?
- 卜瓦松分佈的均值和變異數各是什麼?和高斯分佈有何不同?
- 什麼時候用卜瓦松分佈而不用二項分佈?兩者的關係是什麼?
為什麼其他選項是錯的
字面在說什麼:lambda_poisson = 5 代表每小時最多只會出現 5 個瑕疵品。
為什麼不對:lambda(λ)是卜瓦松分佈的「平均發生次數」,是期望值(mean),不是上限(maximum)。卜瓦松分佈的取值範圍是 0, 1, 2, 3, ...,理論上可以到無限大。某小時可能只有 0 個瑕疵品,也可能有 15 個,只是機率越偏離 λ=5 就越低。
誰會選錯:把 lambda 當成「容量上限」或「閾值」的人,混淆了機率分佈的「參數」和「取值範圍」。
字面在說什麼:poisson.pmf(5, 5) 計算的是出現小於 5 個瑕疵品的機率。
為什麼不對:pmf 是 probability mass function(機率質量函數),pmf(k, λ) 計算的是「恰好等於 k 次」的機率,即 P(X = k)。pmf(5, 5) 計算 P(X = 5) ≈ 0.1755。「小於 5 個」的機率是 P(X < 5) = cdf(4, 5),不是 pmf。
誰會選錯:不確定 pmf 和 cdf 差異的人,或誤把 pmf 當成「累積機率」的人。
字面在說什麼:poisson.cdf(10, 5) 計算的是出現大於等於 10 個瑕疵品的機率。
為什麼不對:cdf 是 cumulative distribution function(累積分佈函數),cdf(k, λ) 計算的是 P(X ≤ k),也就是「不超過 k 次(含 k)」的累積機率。cdf(10, 5) = P(X ≤ 10),是 0 到 10 個瑕疵品的機率總和(約 0.9863)。「大於等於 10 個」的機率是 P(X ≥ 10) = 1 - cdf(9, 5),需要用補數計算。
誰會選錯:記得 cdf 和「累積」有關,但搞混了是「累積到 k」還是「k 之後」的人。
同個考點下次怎麼變形
直覺:lambda = 5 時,P(X = 0) 是多少?有瑕疵品都沒出現的可能嗎?
答案:有可能。P(X = 0) = e⁻⁵ ≈ 0.0067,大約 0.67%,機率很小但不為零。這反映卜瓦松分佈的特性:即使平均值是 5,還是存在某小時一個瑕疵品都沒有的可能性,只是機率非常低。
直覺:如果瑕疵品的出現有「群聚效應」(一個壞掉後面幾個也壞),還能用卜瓦松分佈嗎?
答案:不能。群聚效應破壞了「事件獨立」這個假設。前一個瑕疵品的出現增加了後面出現瑕疵品的機率,不再獨立。這種情況下卜瓦松分佈低估了「多個瑕疵品聚在一起」的機率,實際分佈的尾部會更厚。應改用負二項分佈(Negative Binomial Distribution)來描述這種過度離散(overdispersion)的情況。
直覺:怎麼用 scipy.stats.poisson 計算「至少 8 個瑕疵品」的機率?
答案:P(X ≥ 8) = 1 - P(X ≤ 7) = 1 - poisson.cdf(7, 5)。不能直接用 poisson.cdf(8, 5),因為那是 P(X ≤ 8),包含了 X=8 的情況。「至少 8 個」意思是 X=8, 9, 10, ...,要用 1 減掉「7 個以內(含 7)」的累積機率。
直覺:除了工廠瑕疵品,還有哪些現實場景符合卜瓦松分佈?
答案:網站每分鐘的請求數(流量分析)、電話客服每分鐘接到的來電數(排隊理論)、每平方公里的閃電次數(氣象統計)、每單位時間的 DNA 突變次數(生物統計)。共同特徵是:計算「稀有事件在固定時間/空間內的發生次數」,且事件彼此獨立、平均率固定。
直覺:怎麼驗證一組資料是否真的符合卜瓦松分佈?
答案:卜瓦松分佈有一個獨特性質:均值等於變異數(E(X) = Var(X) = λ)。如果計算出樣本的均值和變異數,看它們是否接近,是最快的初步檢驗。更嚴格的方法是用卡方適合度檢定(Chi-squared goodness-of-fit test),比較實際頻次分佈和理論卜瓦松分佈的差異。scipy 可以用 scipy.stats.chisquare 做這個檢定。
想再往下看,這 5 個
- 卜瓦松分佈(Poisson Distribution)本題核心:描述固定時間或空間內獨立事件發生次數的機率分佈,唯一參數 λ 同時等於均值和變異數。
- 機率分佈(Probability Distribution)卜瓦松分佈是離散機率分佈的一種,理解機率分佈的類型是區分 pmf 和 pdf 的基礎。
- 假設檢定(Hypothesis Testing)驗證資料是否符合卜瓦松分佈,可以用卡方適合度檢定,是假設檢定在分佈驗證上的應用。
- 常態分佈(Normal Distribution)當 λ 很大時,卜瓦松分佈可以用常態分佈近似(中央極限定理),是兩種分佈之間的重要聯繫。
- 異常偵測(Anomaly Detection)工廠品管場景中,卜瓦松分佈常用於建立異常基準線,某小時瑕疵品數遠超期望值時觸發警報。