ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

二项分布与负二项分布速查:转化预测与参数估计

二项分布与负二项分布速查:转化预测与参数估计 上周帮一个做投放的朋友看数据他要回答的问题很具体某个落地页曝光 100 次大概能带来几次转化以及我想凑够 5 次转化大概要买多少曝光。第一个问题我用二项分布两分钟就给了答案第二个问题他坚持用二项分布去反推结果算出来的量级偏小了一大截。这就是我后来动手做这套二项分布与负二项分布卡片的直接原因——这两个分布在教科书里往往连着出现公式长得也有点像但在实际建模时它们回答的是两个完全不同的问题一个数的是给定次数里的成功数另一个数的是凑够成功数所需的代价。卡片一共六组正面写业务场景背面写分布名称、支撑集、概率质量函数、期望方差和一个记忆钩子。下面把整套卡片的内容、推导思路和踩过的坑完整摊开方便你直接抄成自己的速查卡。1. 为什么这两个分布必须放在一起对照着记1.1 单看任何一个都会记串我先说结论二项分布和负二项分布最容易出错的不是公式本身而是哪个量是固定的、哪个量是随机的。二项分布里试验次数 n 是你事先定好的随机的是成功次数 k负二项分布里成功次数 r 是你事先定好的随机的是你要跑多少次试验才能攒够。这两句话听起来像文字游戏但它决定了你写代码时该把哪个参数传进去、该期望得到多大的数。我见过太多人把负二项当成二项分布的反函数来用。严格讲它确实和二项分布有对偶关系但它不是反函数。二项分布问的是n 次里成几次负二项问的是为了成 r 次还得再失败几次。前者定义域是 $0$ 到 $n$ 的有限整数后者定义域是 $0$ 到正无穷——只要一直失败试验就永远不结束。这个支撑集上的差别是区分两者的第一道关卡。1.2 为什么我放弃了从头推公式的笔记早些年我的笔记是按教材顺序抄的先写伯努利试验再写组合数再推概率质量函数最后写期望方差。结果复习的时候每次都要从头看二十分钟才能确认自己没记错效率极低。卡片的做法反过来——先把什么时候用写死再让公式自己长出来。比如背面第一行永远是判断题试验次数固定还是成功次数固定固定次数选二项固定成功次数选负二项。答完这一句公式的形式基本就已经确定了剩下的只是核对参数。1.3 这套卡片每一面的固定结构每张卡背面我固定写五样东西缺一不可场景切片一句业务语言描述不含数学符号支撑集随机变量能取哪些值有没有上界概率质量函数写成分数形式组合数单独标注期望与方差不写推导只写结果附一个数量级校验记忆钩子一句人话比如负二项的方差永远比均值大第五项是整套卡片的精髓。因为期望方差这两个量在参数估计时用得最多而它们恰好是判断该不该上负二项的最快依据。2. 第一组卡片从试验结构反推分布名称2.1 伯努利试验的四个前提条件不能省很多人一上来就套公式忽略了分布成立的前提。二项分布成立需要四个条件同时满足每次试验只有两种结果每次成功的概率 p 恒定各次试验相互独立试验次数 n 固定。这四条里最容易翻车的是第二条p 恒定。同一批用户在不同时段的转化率往往不一样这时候强行套二项分布会低估方差后面做区间估计就会偏窄。负二项分布继承同样的四条前提只是把第四条改成成功次数 r 固定试验次数不固定。所以判断该用哪个分布本质上就是看你在实验设计阶段控制的到底是样本量还是成功数。2.2 二项分布n 固定k 随机二项分布的概率质量函数是$$P(Xk)\binom{n}{k}p^k(1-p)^{n-k},\quad k0,1,\dots,n$$期望 $E[X]np$方差 $\mathrm{Var}[X]np(1-p)$。用卡片语言复述一遍你投了 n 次硬币正面概率是 p问正面出现 k 次的概率。这里的 $\binom{n}{k}$ 是组合数作用是给哪几次成功了这件事计数——因为成功的位置可以任意分布每一种位置组合都对应同一个概率值所以要把它们加起来。2.3 负二项分布r 固定总次数随机按成功之前失败多少次这个定义负二项分布写作$$P(Yk)\binom{kr-1}{k}p^r(1-p)^k,\quad k0,1,2,\dots$$期望和方差分别是$$E[Y]\frac{r(1-p)}{p},\qquad \mathrm{Var}[Y]\frac{r(1-p)}{p^2}$$组合数变成 $\binom{kr-1}{k}$理由是最后一次必须是成功前面 kr-1 个位置里恰好有 r-1 次成功剩下 k 次失败。这个组合数也叫隔板法式计数它的定义域天然从 k 开始向上无限延展。换一种写法如果你关心的是总共做了多少次试验而不是失败了多少次令 $NYr$那么$$P(Nn)\binom{n-1}{r-1}p^r(1-p)^{n-r},\quad nr,r1,\dots$$期望变成 $E[N]r/p$方差不变还是 $r(1-p)/p^2$。这两种写法在教材里都常见写代码时必须先确认库函数用的是哪一种否则结果会整体差一个 r。2.4 一张对照表把固定量和随机量钉死对比项二项分布负二项分布失败次数口径固定的是什么试验次数 n成功次数 r随机的是什么成功次数 k失败次数 k取值上界有就是 n无上界概率里的幂次$p^k(1-p)^{n-k}$$p^r(1-p)^k$期望$np$$r(1-p)/p$方差$np(1-p)$$r(1-p)/p^2$典型问题100 次曝光能成几次凑够 5 次转化还要跑多少这张表我贴在显示器边上参数估计写代码之前扫一眼能避免八成的参数传错。3. 第二组卡片期望方差的推导要点与校验方法3.1 二项期望为什么不推也能记住期望 $E[X]np$ 用指示变量推最干净把第 i 次试验的结果记成 $X_i$成功取 1、失败取 0那么 $X\sum X_i$。由于期望的线性性不受独立性影响$E[X]\sum E[X_i]np$。这个推法的好处是不用碰组合恒等式一句就完了。方差要麻烦一点因为它依赖独立性$\mathrm{Var}[X]\sum \mathrm{Var}[X_i]np(1-p)$。这里单独强调一次如果各次试验不独立比如同一用户连续曝光方差就不是这个值了实际数据里通常比它大。3.2 负二项期望里那个减掉 r的直觉很多人第一次看到 $E[Y]r(1-p)/p$ 会愣一下为什么不是 $r/p$因为 $Y$ 数的是失败次数不是总次数。成功一次平均需要 $1/p$ 次试验凑够 r 次成功平均需要 $r/p$ 次试验其中成功的有 r 次剩下的自然就是 $r/p-rr(1-p)/p$ 次失败。这个心算过程我写在卡片上比记公式可靠得多。方差 $r(1-p)/p^2$ 没有这么漂亮的直觉解释但可以用另一个角度理解把总次数 N 看成 r 个独立的几何等待时间之和每个几何变量的方差是 $(1-p)/p^2$加起来就是 $r(1-p)/p^2$。这个分解思路在后面估计参数时也会用到。3.3 方差总是大于均值这是负二项的立身之本把两个分布的方差和均值比一下二项分布$\mathrm{Var}/\mathrm{Mean}(1-p)$永远小于 1负二项分布$\mathrm{Var}/\mathrm{Mean}1/p$永远大于 1这个比值叫离散指数。当你在真实计数数据上算出样本方差明显大于样本均值时二项分布就已经出局了——它的方差被 n 和 p 锁死在上界里根本没有多余的自由度去贴合这种波动。这也是负二项在计数型数据建模里出场率远高于二项的原因我在第 5 组卡片里会详细展开。提示样本方差小于样本均值时不要硬上负二项矩估计会直接算出负的 r报错比结果更诚实。3.4 数值校验的三个快捷公式写完模型之后我习惯做三个心算校验任何一个对不上就回去查参数二项分布的期望不能超过 n方差不能超过 $n/4$负二项的期望理论上是有限值取 p 很小时会迅速膨胀这时要警惕数据里混进了极端值负二项总次数口径下的期望 $r/p$一定大于等于 r 本身第三点看起来是废话但我在一次代码评审里真的见过 $r/p$ 算出比 r 还小的结果原因是把失败次数口径的均值 $r(1-p)/p$ 直接当成了总次数均值p 很小时这两个数差得非常远。4. 第三组卡片同一分布的多种写法与彼此之间的桥梁4.1 组合数的对称性带来的参数互换二项分布有 $\binom{n}{k}\binom{n}{n-k}$所以把成功和失败的定义对调分布形状只是镜像翻转。这看起来无关紧要但在解释模型系数时很关键如果你的模型预测的是失败率公式里的 p 和 $1-p$ 就要整体换位系数符号也跟着翻。负二项也有类似的对称写法只是形式稍复杂$\binom{kr-1}{k}\binom{kr-1}{r-1}$。写成右边这个形式正好对应最后一个位置固定为成功的计数解释。4.2 两种参数口径的换算必须写死在卡片上这是我最想强调的一张卡。负二项在实际工具里有三套常见口径口径随机变量含义期望失败次数成功 r 次之前的失败数$r(1-p)/p$总试验次数做到第 r 次成功时的总次数$r/p$均值参数化分散参数 $\theta$直接用均值 $\mu$ 和分散度 $\theta$$\mu$第三套在统计建模软件里最常见好处是均值直接就是 $\mu$不用绕。三套口径之间的换算关系是$\mur(1-p)/p$$\thetar$。写代码前一定先看一眼文档里 p 的定义是成功概率还是别的一个符号搞反结果就完全不可用。4.3 几何分布是 r1 的退化情形令 r1负二项退化成几何分布$P(Yk)p(1-p)^k$期望 $(1-p)/p$方差 $(1-p)/p^2$。几何分布是无记忆性的离散版本也就是说前面失败了多少次都不影响接下来还要等多久。我在卡片上专门加了一条几何分布的无记忆性只在 p 恒定且试验独立时成立。现实里的用户行为往往有疲劳效应第一次没转化第二次更不可能转化这时候几何分布会低估长尾。4.4 与泊松分布、伽马分布的连接二项分布在 n 很大、p 很小、np 趋于常数 $\lambda$ 时收敛到泊松分布。这条极限在稀有事件建模里用得极多比如单日某个小概率事件的发生次数。负二项和泊松的关系更有意思如果泊松分布的强度 $\lambda$ 本身也是随机的、服从伽马分布那么混合之后得到的就是负二项分布。这个伽马-泊松混合的视角解释了一件事负二项的额外方差不是凭空冒出来的它来自强度本身的不确定性。同一条业务线上不同渠道的转化率本来就不一样这种异质性在数据里表现为过度离散负二项正好能吃掉它。顺带一提负二项里的 r 不必须是整数。当成混合分布看的时候r 是伽马分布的形状参数可以是任意正实数。很多建模库允许 r 取小数这是正常的不要以为是精度问题。5. 第四组卡片参数估计与模型诊断的实操流程5.1 二项分布的参数估计基本没有悬念二项分布只有一个未知参数 p极大似然估计就是样本成功比例 $\hat{p}k/n$。矩估计给出的结果完全一样。真正要小心的是两个特殊情况k0 时 $\hat{p}0$对数似然里会出现 $0\cdot\log 0$ 的项实现时要单独处理n 很小时估计量的方差很大别急着下结论。5.2 负二项的矩估计手算流程负二项有两个参数r 和 p用前两阶矩就能解出来。设样本均值为 $m$、样本方差为 $s^2$联立下面两式$$m\frac{r(1-p)}{p},\qquad s^2\frac{r(1-p)}{p^2}$$两式相除直接消掉 r$s^2/m1/p$于是$$\hat{p}\frac{m}{s^2},\qquad \hat{r}\frac{m\hat{p}}{1-\hat{p}}\frac{m^2}{s^2-m}$$这两个式子在卡片上我用红框标出来因为它是判断数据到底该不该用负二项的入口分母 $s^2-m$ 为负说明方差小于均值负二项在这里没有立足之地应该回头考虑二项或者泊松。import numpy as np def nb_moments(y): 负二项矩估计返回 (r, p)按失败次数口径 y np.asarray(y, dtypefloat) m y.mean() s2 y.var(ddof1) if s2 m: raise ValueError(样本方差不超过均值负二项在这里不合适) p m / s2 r m * p / (1.0 - p) return r, p5.3 极大似然需要数值优化初始值别乱给矩估计的解析解正好可以当极大似然的初始值这是标准做法。如果直接用默认初值跑优化器在 r 很小时经常跑偏或者报收敛警告。我一般先用矩估计拿一组 (r, p)再交给优化器细化收敛速度会快很多也能避免落到边界上。对 r 取对数参数化优化 $\log r$ 而不是 r是另一个实用技巧可以自动保证 r 为正省掉一堆边界判断。5.4 概率质量函数的对数空间实现组合数在 n 大的时候会溢出。阶乘到 21 左右就超出 64 位整数了而实际数据里 n 动辄上千。正确做法是全程在对数空间算最后再取指数from scipy.special import gammaln import numpy as np def log_binom_pmf(k, n, p): log_c gammaln(n 1) - gammaln(k 1) - gammaln(n - k 1) return log_c k * np.log(p) (n - k) * np.log1p(-p) def log_nbinom_pmf(k, r, p): log_c gammaln(k r) - gammaln(k 1) - gammaln(r) return log_c r * np.log(p) k * np.log1p(-p)log1p(-p)在 p 很小时比np.log(1-p)精度高这个细节在处理小概率事件时能省掉不少麻烦。5.5 拟合之后的诊断看什么模型跑完不能直接下结论至少看三样残差的离散程度、预测概率与实际频率的对比、以及极值点的拟合情况。负二项对尾部通常拟合得比泊松好但如果数据里存在明显的零膨胀零的数量远超分布能解释的范围负二项也救不了那需要考虑零膨胀模型。6. 这套卡片帮我躲过的几个坑6.1 参数口径搞错导致结果整体偏移最早一次踩坑是在 R 和 Python 之间来回切R 里的负二项回归默认输出的是均值参数化下的系数Python 里另一些库用的是失败次数口径。同一个数据集两边跑出来的期望差了整整一个 r。后来我在卡片上强制加了一行先写口径再写公式问题就再没出现过。6.2 p 接近 1 时负二项的方差会退化p 趋近 1 时 $1-p$ 趋近 0负二项的期望和方差都趋近 0分布退化成一个集中在 0 附近的尖峰。这时候数据基本没有波动用不用负二项意义不大。反过来p 很小时期望和方差都很大数值上容易出问题特别是用矩估计时 $s^2-m$ 会非常小一点采样噪声就能让 r 的估计值剧烈跳动。我的处理办法是给 r 加一个下限约束或者改用带正则的估计。6.3 正态近似不是万能挡箭牌二项分布在 np 和 $n(1-p)$ 都大于 5 到 10 时可以用正态近似这条经验规则被引用得很广。但 p 接近 0 或 1 时即使 n 很大近似的尾部也偏得很厉害做置信区间会明显失真。我现在的习惯是只要涉及尾部分位数一律用精确分布或者对数空间计算不用近似。6.4 独立同分布假设失效的情况最后一条是原则性的。这两个分布都建立在独立同分布之上而真实数据几乎总是不满足。同一用户的多条记录天然相关同一时段的流量有共同的外部冲击。这时候哪怕公式用对了算出来的标准差也会偏小。我的做法是在卡片背面补一行检查相关性的提醒真要做严格推断就上分层模型或者广义估计方程而不是硬套单个分布。6.5 我个人的一点用法心得这套卡片做了大概半年现在基本不用翻公式了遇到问题先问三句话固定的是次数还是成功数方差比均值大还是小参数口径是哪一套三句话答完分布形式、参数估计算法、代码里该调哪个函数基本就都定了。真要说还有个什么小技巧就是每次写完一段分布相关的代码随手拿期望和方差的两个理论值跟模拟结果对一遍。跑一千次模拟均值应该落在理论值附近方差也应该对得上。这个两分钟的校验习惯帮我省下的排查时间远超它本身的成本。
返回列表