3.3 幾何與負二項分配#
本節目標#
- 建立「等待時間」的直覺:幾何分配 = 第一次成功前失敗了幾次
- 用條件機率證明無記憶性,並用模擬驗證
- 理解負二項分配 = 「等到第 \(r\) 次成功」的推廣
- 會用
r.dgeom/r.pgeom/r.dnbinom/r.pnbinom與g.rgeom/g.rnbinom對照模擬
問題場景:不是「幾次成功」,而是「等多久」#
前面兩節都在數「固定次數裡的成功數」。但生活裡另一大類問題問的是反過來的事:
- 業務員拜訪客戶,平均每 3 次拜訪成交 1 次——第幾次拜訪才開張?
- 網路封包每次傳輸有 1% 機率失敗——重傳幾次才成功?
- 擲骰子擲出 6 之前,會先丟出幾個非 6?
這是「直到成功為止」的等待過程。答案自然是一個隨機的次數——幾何分配(每次試驗成功機率 \(p\) 固定、互相獨立,等到第一次成功)。再往下延伸:如果等到第 2 次、第 3 次……第 \(r\) 次成功才停呢?那就是負二項分配。
歷史背景(17–18 世紀)#
等待時間的計算從賭博年代就有了:帕斯卡與費馬 1654 年的通信中已處理「多久擲出第一個 6」的問題。而「負二項」這個名字來自後來的形式分析:把二項展開式 \((q - p)^{-r}\) (負指數)的級數係數寫出來,恰好就是這個分配的 pmf,故得此名。Pascal 在 1654 年《論算術三角形》處理的骰子等待問題、de Moivre 1711 年的論文,都屬於這條脈絡。它常被用來建立多種累積等待過程的模型,例如保險理賠次數、可靠性工程的「第 \(r\) 次故障」時間等。
理論推導#
幾何分配:首次成功前的失敗次數#
約定(與 R 一致): \(X\) = 第一次成功之前的失敗次數,取值 \(0, 1, 2, \ldots\) 。「 \(X = k\) 」意味著前 \(k\) 次失敗、第 \(k+1\) 次成功:
$$ P(X = k) = (1-p)^k\, p, \qquad k = 0, 1, 2, \ldots
$$ 一條公比 \((1-p)\) 的幾何級數——名字由此而來。期望值與變異數(3.5 節推導):
\(E[X] = \dfrac{1-p}{p}\) , \(\mathrm{Var}(X) = \dfrac{1-p}{p^2}\) 。
注意約定:R 與 rstatistics 的 geom 支援從 0 開始(數失敗次數)。有些課本定義 \(X\) 為「成功發生在第幾次試驗」(支援從 1 開始),那只是本版的 \(X+1\) ,期望值變成 \(1/p\) 。讀文獻時務必先確認約定。
無記憶性:等越久不會越接近成功#
幾何分配最著名的性質:已經失敗了 \(s\) 次,對「還要再等多久」毫無影響。用條件機率證明(記 \(q = 1-p\) ):
$$ P(X \ge s + t \mid X \ge s) = \frac{P(X \ge s+t)}{P(X \ge s)} = \frac{q^{\,s+t}}{q^{\,s}} = q^{\,t} = P(X \ge t)
$$ 中間用到 \(P(X \ge k) = q^k\) (連續 \(k\) 次失敗)。「賭徒謬誤」正是違反這個性質的心理偏誤:銅板沒有記憶,連開 9 次正面之後,第 10 次的反面機率仍是 \(1/2\) 。
負二項分配:第 \(r\) 次成功前的失敗次數#
\(Y\) = 達到第 \(r\) 次成功之前的失敗次數( \(r = 1, 2, \ldots\) )。 \(Y = k\) 表示最後一試(第 \(k+r\) 次)恰好是第 \(r\) 次成功,而前 \(k+r-1\) 次中恰好成功 \(r-1\) 次:
$$ P(Y = k) = \binom{k + r - 1}{r - 1}\, p^r (1-p)^k, \qquad k = 0, 1, 2, \ldots
$$ \(r = 1\) 時退化成幾何分配。期望值與變異數:
\(E[Y] = \dfrac{r(1-p)}{p}\) , \(\mathrm{Var}(Y) = \dfrac{r(1-p)}{p^2}\) ——正好是 \(r\) 個獨立幾何等待的總和,均值與變異數都放大 \(r\) 倍。
動手做:用 rstatistics 計算與模擬#
幾何分配的 pmf 與 CDF#
業務員成交率 \(p = 0.3\) ,問開張前會白跑幾趟:
import rstatistics as r
pmf = [r.dgeom(k, 0.3) for k in range(5)]
print([round(x, 5) for x in pmf])
print(r.pgeom(2, 0.3)) # 前 3 趟之內(含)就開張:P(X <= 2)
[0.3, 0.21, 0.147, 0.1029, 0.07203]
0.657
第 1 趟就成交的機率最高(0.3),之後每趟機率乘上 0.7 遞減;三趟內開張的機率約 65.7%。
模擬對照#
g = r.set_seed(42)
n = 100000
xs = g.rgeom(n, 0.3)
cnt = {}
for x in xs:
cnt[int(x)] = cnt.get(int(x), 0) + 1
for k in range(6):
print(k, round(r.dgeom(k, 0.3), 5), round(cnt.get(k, 0) / n, 5))
fx = list(map(float, xs))
print(r.mean(fx), r.var(fx)) # 理論 (1-p)/p = 2.3333、(1-p)/p^2 = 7.7778
0 0.3 0.29846
1 0.21 0.21165
2 0.147 0.14562
3 0.1029 0.10248
4 0.07203 0.07294
5 0.05042 0.05044
2.34412 7.849439920003956
模擬均值 2.344(理論 2.333)、變異數 7.849(理論 7.778)。 \(n=10^5\) 時每格頻率的標準誤約 \(\sqrt{0.1 \times 0.9 / 10^5} \approx 0.001\) ,表中最差偏差 0.0016 在 2 個標準誤內,正常。
無記憶性的模擬驗證#
條件機率 \(P(X \ge s+t \mid X \ge s) = P(X \ge t)\) 直接用模擬檢驗:先「存活」過 3 次失敗的人,再看他們多等了幾次:
g = r.set_seed(42)
n = 1000000
big = g.rgeom(n, 0.3) # 失敗次數
surv = [x for x in big if x >= 3] # 已失敗 >= 3 次(X >= 3)
wait = [x - 3 for x in surv] # 之後又等了幾次
print(len(surv), r.mean(list(map(float, wait))))
print((1 - 0.3) ** 3) # P(X >= 3),理論存活率
342619 2.340129998628218
0.3429999999999999
存活比例 0.34262 對理論 \(0.7^3 = 0.343\) ;存活者「再等待次數」的平均 2.340 對全新一輪的期望 \((1-p)/p = 2.333\) 。撐過 3 次失敗的人,平均還要再等 2.33 次——過去的失敗完全沒有累積任何「進度」。這就是無記憶性,模擬誤差量級 \(1/\sqrt{n}\) (此處約 0.002)。
負二項:等到第 2 次成交#
成交率 \(p=0.3\) ,問「第 2 次成交前白跑幾趟」:
import rstatistics as r
pmf = [r.dnbinom(k, size=2, prob=0.3) for k in range(6)]
print([round(x, 5) for x in pmf])
print(r.pnbinom(3, size=2, prob=0.3)) # 6 趟內(失敗 <= 3)完成 2 次成交
g = r.set_seed(42)
xs = g.rnbinom(100000, size=2, prob=0.3)
cnt = {}
for x in xs:
cnt[int(x)] = cnt.get(int(x), 0) + 1
for k in range(6):
print(k, round(r.dnbinom(k, 2, 0.3), 5), round(cnt.get(k, 0) / 100000, 5))
fx = list(map(float, xs))
print(r.mean(fx), r.var(fx)) # 理論 r(1-p)/p = 4.6667、r(1-p)/p^2 = 15.5556
[0.09, 0.126, 0.1323, 0.12348, 0.10804, 0.09076]
0.4717799999999996
0 0.09 0.08988
1 0.126 0.12628
2 0.1323 0.13205
3 0.12348 0.12337
4 0.10804 0.10852
5 0.09076 0.08976
4.667820000000006 15.56841213172495
與幾何分配( \(r=1\) )相比, \(r=2\) 的 pmf 不再單調遞減——峰在 \(k=2\) 。均值 4.668、變異數 15.568 都非常接近理論值(模擬誤差:均值 \(\approx \mathrm{sd}/\sqrt{n} = 3.94/316 \approx 0.012\) ,實際偏差 0.001)。
參數命名提醒:size 就是 \(r\) (要的成功次數),prob 就是 \(p\) ,與 R 完全一致。
與 R 對照#
dgeom(0:4, 0.3)
# [1] 0.30000 0.21000 0.14700 0.10290 0.07203
pgeom(2, 0.3) # [1] 0.657
set.seed(42)
xs <- rgeom(100000, 0.3)
mean(xs); var(xs)
# [1] 2.34412
# [1] 7.84944
dnbinom(0:5, size = 2, prob = 0.3)
# [1] 0.0900000 0.1260000 0.1323000 0.1234800 0.1080450 0.0907578
pnbinom(3, 2, 0.3) # [1] 0.47178
set.seed(42)
xs2 <- rnbinom(100000, 2, 0.3)
mean(xs2); var(xs2)
# [1] 4.66279
# [1] 15.37879
(本節 R 輸出以 Rscript 實際執行驗證。)dgeom / dnbinom 的數值與 Python 版位元級一致; \(n=10^5\) 的模擬均值在 R 是 4.66279、Python 版是 4.66782,這不是哪邊算錯——兩邊 set.seed(42) 的亂數在 rgeom 與 rnbinom 底層產生方式不完全相同,屬於模擬本身的蒙特卡羅變異(差 0.005,仍在 \(3\) 個標準誤內),理論值才是比較的基準。
小結#
- 幾何分配數「首次成功前的失敗次數」,pmf \(= (1-p)^k p\) ,支援 \(0,1,2,\ldots\) (R 約定)。
- 無記憶性: \(P(X \ge s+t \mid X \ge s) = P(X \ge t)\) ,幾乎不需要計算——分子分母都是 \(q\) 的冪次。它是賭徒謬誤的解藥。
- 負二項分配數「第 \(r\) 次成功前的失敗次數」,是 \(r\) 個獨立幾何等待之和:均值與變異數都放大 \(r\) 倍。
- 模擬誤差永遠是 \(1/\sqrt{n}\) 量級:頻率的 \(\sqrt{p(1-p)/n}\) 、均值的 \(\mathrm{sd}/\sqrt{n}\) 。
練習#
- 擲公正骰子直到出現 6, \(p = 1/6\) 。求首次成功前失敗次數的期望值,以及「10 次以內(失敗 \(\le 9\) )至少擲出一次 6」的機率。提示: \(E[X] = (1-p)/p = 5\) ;後者用
1 - (5/6)**10或r.pgeom(9, 1/6, lower_tail=False)的反面。 - 用條件機率證明:幾何分配是唯一具有無記憶性的離散分配。提示:設 \(P(X \ge 1) = q\) ,由 \(P(X \ge s+1) = P(X \ge s) q\) 對 \(s\) 歸納得 \(P(X \ge k) = q^k\) 。
- 某棒球打擊率 0.25(每次打擊獨立)。模擬 100000 個球季(每季 500 打數),估計「全季首支安打前最多連續 20 個打數未安打」的比例,並與理論比較。提示:每季首安前失敗數 \(\sim \mathrm{Geom}(0.25)\) ,比例 \(= P(X \ge 20) = 0.75^{20}\) 。
- 負二項 \(r=3, p=0.4\) :用
g.rnbinom模擬並畫 pmf 對照長條圖(沿用 3.1 節的barplot+rect疊圖法)。提示:峰的位置在 \(\lfloor (r-1)(1-p)/p \rfloor = 3\) 附近。 - 證明負二項 pmf 滿足 \(\binom{k+r-1}{r-1} = \binom{k+r-1}{k}\) ,並用「 \(k+r\) 次試驗中任選 \(r\) 個成功位置、但最後一試必成功」的語言解釋為什麼這兩種寫法等價。提示:對稱恆等式 \(\binom{n}{a} = \binom{n}{n-a}\) 。