几何分布全解析:从定义版本到无记忆性,量化等待次数

发布时间:2026/10/4 4:26:29
几何分布全解析:从定义版本到无记忆性,量化等待次数 1. 我们先把它回答的问题说透到底什么情况下会用到几何分布很多人第一次接触几何分布是在概率论课上看到“重复试验直到首次成功”这个定义。当时觉得公式简单考完试就忘了。但我在做数据分析的这些年里反而越来越觉得这个分布被低估了——它回答的问题太常见了一件事第一次发生时我们得等多久随便举几个真实场景系统每天自动重试一个外部接口调用每次成功率只有30%那“第几次调用才成功”就是一个几何分布问题一个新注册用户在生命周期里每次进店下单概率是15%那“第几次访问才产生首单”也可以用几何分布作基准模型质检流水线上每件产品不合格的概率固定且彼此独立那“检查到第几件才发现第一件次品”同样是几何分布。你会发现这些场景都有一个共同结构多次独立重复的伯努利试验每次结果只有成功和失败两种成功概率 p 固定不变然后我们记录“第一次成功发生在哪一次”。这个随机变量就是几何分布。名字里的“几何”跟图形没有任何关系它指的是概率质量函数是一个等比数列。等比数列在英文里叫 geometric progression所以这个分布就叫 geometric distribution。有些初学者误以为它跟画图、长度面积有关完全是误会。如果你把 P(Xk) 的取值列出来P(X1)p P(X2)(1-p)p P(X3)(1-p)²p P(X4)(1-p)³p……写成一行每一项都是前一项乘以固定比例 (1-p)这和等比数列的定义完全对应。这也是为什么它有个很有趣的性质概率质量从 k1 开始一直递减且递减速度完全由失败概率决定。适合学几何分布的人我总结下来有两类。一类是刚学概率统计需要把离散分布的基础概念吃透因为几何分布接口简单、推导直观是理解期望、方差、矩生成函数非常好的练习载体。另一类是做数据、做算法、做工程的实践者他们真正需要的是用几何分布去估算等待时间、重试次数、转化周期这类业务指标。坦白讲很多教材都把几何分布当成了一个“过渡章节”两三页讲完就跳到负二项分布了这恰恰导致实战里不少人把它的定义搞混还把期望公式记串。这篇文章想做的就是把容易翻车的地方都摊开讲清楚。2. 先别急着套公式几何分布的两个“版本”能坑死人几何分布最大的坑不在计算而在定义不统一。我在指导实习生时经常遇到这种情况同一个问题两个人按不同的教材或代码库来做算出来的期望一个多一个少对不上账。问题就出在几何分布有两种主流定义互为平移关系。版本一记录“第一次成功所需的试验次数”这个版本里随机变量 X 的最小取值是 1。比如掷硬币掷到正面为止掷了3次才出正面那 X3。它的概率质量函数是P(Xk)(1-p)^(k-1) · p其中 k1,2,3,...期望和方差E[X]1/p Var[X](1-p)/p²版本二记录“第一次成功之前失败的次数”这个版本里随机变量 Y 的最小取值是 0。同样掷硬币掷到正面为止如果第一次就正面那 Y0如果前2次都是反面、第3次才正面那 Y2。它的概率质量函数是P(Ym)(1-p)^m · p其中 m0,1,2,...期望和方差E[Y](1-p)/p Var[Y](1-p)/p²两组公式只差了一个“少一次”XY1。但就是这1的偏移足以让业务计算差出一个人均周期。用表格对照一下一眼就能分清描述版本一试验次数 X版本二失败次数 Y最小值10取值1,2,3,...0,1,2,...概率质量函数(1-p)^(k-1) · p(1-p)^k · p期望1/p(1-p)/p方差(1-p)/p²(1-p)/p²有个小规律可以帮你记忆版本一的期望之所以比分母“多了1”是因为你已经把最后那次成功也算进去了版本二只统计成功前面的失败自然就少1。更麻烦的是不同的编程库默认版本不同。R 里模拟几何分布用的rgeom(n, prob)默认返回的是版本二也就是失败次数SciPy 的geom.pmf(k, p)则采用版本一从1开始计算。如果你不做验证就直接套库拿到手的数据基准差1后面所有预估都会偏移。我在实际项目中已经养成了一个习惯拿到任何几何分布相关的库函数先用一个最小的 case 验证一下比如 p0.5算一下样本均值到底是接近2还是接近1再决定要不要在代码里加1或减1。所以读任何资料、用任何工具前第一件事是确认它用的是哪个“坐标”。这听上去是小事但确实是几何分布应用里翻车率最高的一环。3. 期望、方差、分位数的推导这一节把公式从“背”变“懂”很多教材直接给公式导致大家只能硬记。其实几何分布的推导是离散分布里最友好的一批等比数列求和就能搞定。我们把底层逻辑走一遍以后再遇到 p 很小的场景你能自己算而不是查表。先设 q1-p方便书写。概率质量函数求和为1Σ_{k1}^∞ P(Xk) p Σ_{k1}^∞ q^(k-1) p · 1/(1-q) 1这一步是兜底验证确保我们写的概率分布合法。只要 |q|1等号关系就成立。期望 E[X]1/p用“尾部概率求和”的方法最优雅对非负整数随机变量期望可以写成E[X]Σ_{k0}^∞ P(Xk) Σ_{k0}^∞ q^k 1/(1-q) 1/p这里 P(Xk) 的含义是“前 k 次都没成功”也就是连续失败 k 次概率自然是 q^k。尾部求和的好处是思路简单不用背 Σ k q^(k-1) 的公式。方差 Var[X](1-p)/p²我们还需要 E[X²]。如果对任意非负随机变量有公式E[X²]Σ_{k0}^∞ (2k1)P(Xk)这个式子也是从部分和的累加得到的。代入 P(Xk)q^kE[X²]Σ (2k1)q^k 2Σ kq^k Σ q^k 2q/(1-q)² 1/(1-q)再算方差Var[X]E[X²]-(E[X])² [2q/p² 1/p] - 1/p² (1q)/p² - 1/p² q/p²这里 q1-p所以最终方差就是 (1-p)/p²。如果用的是版本二也就是统计失败次数方差不变因为平移一个单位不会改变离散程度期望则等于版本一减1也就是 (1-p)/p。矩生成函数矩生成函数在做分布叠加、求高阶矩时很有用。对版本一M_X(t)E[e^{tX}]Σ e^{tk} q^(k-1)p p e^t / (1-q e^t)收敛条件是 q e^t1。对版本二因为 YX-1所以 M_Y(t)M_X(t)e^{-t}p/(1-q e^t)。矩生成函数还有一个很实用的用途多个独立几何分布求和之后能得到负二项分布的矩生成函数这在第5节会用到。分位数工程上最实用的一族公式我经常跟做质量的同事说几何分布的期望往往不是团队真正关心的大家真正关心的是“试多少次成功的把握能到多少”。这里有两个尾概率公式P(X≤k)1-q^k P(Xk)q^k很好记失败 k 次还没成功概率是 q^k所以 k 次内至少成功一次的概率就是 1-q^k。反过来解 k可以得到分位数P(X≤k)≥1-ε ⇒ q^k≤ε ⇒ k≥ln ε / ln q举个具体例子某台设备启动后正常工作的单次概率是 30%我们希望“启动至少成功一次”的整体概率达到 95%需要尝试几次这里 p0.3q0.7取 ε0.05k≥ln(0.05)/ln(0.7)≈ 8.4所以至少要尝试9次。这个计算在重试机制、库存准备、测试用例重复执行里非常常见。期望1/0.3≈3.33次但要达到95%的把握则要9次。两者差距很大这正是几何分布以及所有“等待型分布”的一个共同特点右偏尾部比直觉厚得多。只看期望你会低估极端等待。4. “已经等了这么久是不是该来了”——无记忆性的残酷真相几何分布有一个非常颠覆直觉的性质无记忆性。它说的是只要 p 不变、试验独立那么“已经失败了很多次”这个事实并不能让你后续的等待时间变短。用数学表达很简单。设已连续失败 a 次想再等 b 次以上才看到第一次成功的概率P(Xab | Xa) (1-p)^(ab) / (1-p)^a (1-p)^b结果和 P(Xb) 完全一样。也就是说前 a 次失败的信息对未来的等待不产生任何影响。这个性质在日常中表现为一种典型的概率幻觉。我见过很多业务同事在产品转化率不理想时会说“这个用户都点击了七八次了应该快转化了。”如果每次触达转化概率固定且独立这句话就是错的。无论已经等了多久平均还要再等 1/p 次。连续失败8次并不能让第9次更可能成功。丢硬币的例子更容易理解连续出了6次正面第7次出反面的概率并不会变成大于50%只要硬币是公平的它仍然是50%。只不过在人的直觉里前面“欠的债”似乎应该被还掉这就是赌徒谬误的核心来源。无记忆性还有一个工程推论**如果你用一个纯几何分布模型去描述等待时间那么“老用户比新用户更容易成功”这种经验在你的模型里是不存在的。**很多业务模型正是因为忽视了这一点才做出了过于乐观的预测。比如客服等待队列假设每个服务窗口在任意时刻“完成服务”的概率固定那一个已经等了30分钟的客户平均还得再等同样长的时间。这听起来反直觉但在指数分布、几何分布这类无记忆分布里就是如此。当然现实世界充满干扰。p 可能不是常数比如系统刚崩完基础设施正在恢复每次重试的成功概率其实是慢慢回升的用户的每次访问也可能不是独立事件第一次失败会带来负面反馈降低下一次的购买概率。所以几何分布更适合作为“独立等概率”假设下的基准模型。当你发现真实数据和几何分布的差距很大时不要急着骂模型那恰恰说明系统里存在记忆、相关性或者动态变化的 p这些信息值得深挖。无记忆性也和连续世界里的指数分布一脉相承。指数分布是无记忆性的连续版几何分布是无记忆性的离散版。两者都描述等待时间一个按次数计数一个按时间计量。这也是为什么很多可靠性工程里系统无故障运行时间可以直接用指数分布建模而运维重试次数用几何分布建模。5. 几何分布不是孤岛它和伯努利、负二项、指数分布的真实关联几何分布表面上很“小”但它在离散分布族里处于一个承上启下的位置。理解了它和几个邻居的关系很多问题会豁然开朗。5.1 伯努利分布是它的积木伯努利分布描述一次试验的结果只有 0 和 1 两种取值。几何分布相当于把若干次独立的伯努利试验串起来直到遇到第一个1为止。所以几何分布的基础是伯努利如果n次试验里成功次数固定为k那是二项分布成功次数不固定为1而是直到第k次成功为止那是负二项分布。几何分布恰好是负二项分布在 k1 时的特例。5.2 负二项分布是几何分布的卷积负二项分布描述“第 r 次成功发生所需要的总试验次数”。你可以把它想象成先等第1次成功再等第2次成功再等第3次成功……因为每次等待独立同分布所以负二项分布就是 r 个独立几何分布之和。在模拟里与其专门去写负二项函数你完全可以循环 r 次生成几何变量再相加结果一致。矩生成函数也一样r 个独立几何变量的 M(t) 相乘得到 [p e^t/(1-q e^t)]^r这正是负二项分布的矩生成函数。5.3 指数分布是几何分布的“连续极限”把等待次数换成等待时间就会出现这个联系。假设每次试验间隔 δ 时间单次成功概率 pλδ当 δ 越来越小、p 越来越小时几何分布的生存函数会趋近指数分布P(等待时间T) P(X⌈T/δ⌉) (1-p)^⌈T/δ⌉ ≈ e^(-λT)期望也自然从 1/p 趋近于 1/λ。这个极限关系解释了为什么很多现象既可以用离散几何分布建模也可以用连续指数分布建模两者在概念上是可以互相转化的。实际工作中如果你采集到的数据是按“次”记录的用几何分布按“秒”记录的用指数分布。底层逻辑一致只是坐标不同。5.4 和泊松分布的区别一个管“多少次”一个管“等多久”经常有人把几何分布和泊松分布搞混因为都涉及“事件律”。其实它们的角色完全互补泊松分布回答“一段时间内事件发生多少次”几何分布回答“第一次事件出现前需要等几次”。比如呼叫中心和队列计算接下来5分钟来3个电话的概率用泊松计算“下一个电话什么时候来”或“等到第一个电话要打多少次”用几何/指数。一个是计数一个是等待方向刚好相反。这个区分对面试和业务建模都很重要。6. 从数据分析现场总结的三个落地案例你会知道怎么用它拍板几何分布最好的学习方式是把它用到真实决策里。下面三个案例都来自我实际参与过的项目细节做了脱敏但计算路径完整保留。案例一自动化测试的执行轮次规划某个存储系统的自动化测试单次执行有约20%的概率因为环境干扰失败且每次执行互相独立。团队想在正式的发布流水线里设置“失败后重跑”逻辑要求整个流程有99%的概率至少跑通一次问至少预留几轮执行窗口。按版本一模型每次成功概率是0.8失败概率0.2。设预留 k 轮则 k 轮内至少成功一次的概率是1-0.2^k ≥ 0.99解得 k≥ln(0.01)/ln(0.2)≈2.86所以至少预留3轮。注意看单次成功率已经高达80%期望只要1.25轮但想逼近99%的整体成功率仍然要留3轮。测试平台繁忙时多出来的两轮直接影响排期。这就是典型的分位数决策不应该拍脑袋说“成功率高所以跑一次就行”而是按目标置信度反推轮次。案例二新用户“首购周期”指标的反向推导某电商项目组想评估新注册用户从注册到第一次下单的行为。运营定义“每个访问会话内下首单的概率为15%”暂用几何分布作基准。那么用户在8次会话内至少完成一次下单的比例1-0.85^8≈0.7275也就说按这个15%的单次转化率大约72.7%的用户会在8次会话内完成首购。如果目标是“八次会话内累计90%用户完成首购”可以反向求出需要的单次转化率1-(1-p)^80.9 ⇒ 1-p≈0.7499 ⇒ p≈0.25也就是说单次会话转化率要提高到25%左右才能达到“八次内90%”的目标。这个反推过程可以直接拿来做团队指标的对齐与其拍一个“把首购周期缩短一半”的空口号不如先算清楚单次转化率需要从15%提到多少。这种从结果倒推参数的思路几何分布用得很顺手。案例三API重试次数与95%成功率之间的成本权衡一个外部支付接口的成功率大约是35%网络波动期间还更低。我们想设计重试逻辑使得最终整体成功率不低于95%。如果单次成功概率p0.35重试总次数 k 的整体成功率是1-0.65^k令其等于0.95解得 k≈6.95所以至少重试7次。这时系统对同一请求最多会发起7次调用调用成本放大到原来的7倍左右。这里真正要权衡的不是“越多次越好”而是7次重试带来的整体成功率是否值得它的资源开销。如果提高重试的首次成功率 p 到0.5重试次数会显著下降1-0.5^k≥0.95 ⇒ k≥4.32约5次。所以工程优化方向往往是提升首调成功率而不是无限堆重试次数。这个案例在故障排查里经常被拿来当作“盲目重试反而拖垮系统”的反面教材。7. 避坑列表测试分布假设之前先确认这几件小事几何分布形式简单但它隐含的假设很严格。我把自己踩过的坑和评审代码时见过的问题汇总成一份自查列表用几何分布建模之前先过一遍。坑一版本选错这是最基础、最常见的错误。先问自己我关心的变量是“到第一次成功一共试了几次”还是“第一次成功前失败了几次”两者期望相差1。特别是在看Scipy、R语言文档时务必用模拟或简单案例验证库的默认坐标。坑二把“无放回抽样”当“有放回”几何分布假设每次试验的成功概率独立且不变。只有有放回抽样、外部状态不变的场景才满足这个条件。如果一箱产品里次品率固定但抽查数量不返还那就是超几何分布的问题不能用几何分布近似只有当样本量相对于总体很小抽取几乎不影响比例时近似才成立。坑三p 在实际中经常是动态的现实中的“成功概率”很少是一成不变的。用户被触达8次后可能已经产生厌烦情绪每一次的下单概率反而在下降系统重试期间底层服务可能正在恢复成功率逐渐回升。这时候单纯套几何分布估计出来的期望和分位数都会失真。我在项目里遇到这种情况时会把数据按“触达次数段”拆开分别估计 p 看看趋势如果 p 有明显上升或下降就改用分段模型而不是强行用一个常数 p。坑四只报期望不报分位数p0.2 的几何分布期望 E[X]5但中位数其实是4有约13.4%的概率需要尝试到第10次以上。如果业务上只盯着“平均5次”很容易低估尾部风险。正确做法是把 P(X≤k)1-q^k 一起摆出来例如“90%的情况下会在11次以内成功95%的情况下会在14次以内成功”这样决策者才能真正理解等待的不确定性。坑五不验证分布假设就硬套拿到一组等待次数数据别直接把它当几何分布。我的习惯是先画直方图看它是不是从某一端开始单调递减、递减比例是否大致稳定。如果直方图出现了先升后降的形态说明“第一段尝试的成功率低于后面的成功率”这种数据用几何分布拟合效果会很差。想要快速验证还可以用几何分布的均值估计 p̂ n / Σx_i再用这个 p̂ 重新生成模拟样本和真实数据对比分位数。最后分享一个我个人的小习惯每当我需要向同事解释某个“等待时间”指标时我都会同时给出期望、中位数和90%分位数。期望在汇总时最直观但中位数更能代表典型用户体验90%分位数则能提醒大家关注尾部。多报这几个数往往比一句“平均30分钟”更能阻止团队把波动当灾难也更能暴露真实的问题。这个习惯说到底也是被几何分布逼出来的——右偏分布的均值真的太有迷惑性了。