之前在介绍 DeepAR 等时间序列预测模型时,为了简单起见,我们使用了大家比较熟悉的正态分布作为示例。在实际应用中,需要根据数据本身的特点选择合适的分布。泊松分布、二项分布、以及负二项分布都可以用来刻画计数类数据。其中,泊松分布的 μ=σ2,二项分布的 μ≥σ2,负二项分布的 μ≤σ2。在我日常接触的业务场景中,μ≤σ2 较为常见,为此免不了要跟负二项分布打交道。
虽然没什么必要,但是本着「有困难要上,没困难创造困难也要上」的精神,我们还是来推导一下负二项分布的相关公式。
1. 定义
一个成功概率为 p 的伯努利试验,不断重复,直至失败 r 次。此时成功的次数为一个随机变量,用 X 表示。称 X 服从负二项分布,记作 X∼NB(r,p)。
需要注意的是,负二项分布的定义并不唯一。例如 tensorflow_probability
使用的定义与本文一致,而 scipy
则将 X 定义为伯努利试验成功 r 次时的失败次数。使用前一定要先看清楚,别问我怎么知道的。此外,Wikipedia 词条不同段落使用的定义竟然也不完全一致,或许是由不同的人编辑的。
2. 概率质量函数
X=k 时总共进行了 k+r 次试验,最后一次为失败,故前 k+r−1 次试验总共成功了 k 次,失败了 r−1 次。因此
f(k;r,p)≡Pr(X=k)=(kk+r−1)pk(1−p)r
3. 期望
根据定义
EX=k=0∑∞kf(k;r,p)=k=1∑∞kf(k;r,p)=k=1∑∞kk!(r−1)!(k+r−1)!pk(1−p)r=1−prpk=1∑∞(k−1)![(r+1)−1]![(k−1)+(r+1)−1]!pk−1(1−p)r+1=1−prpk=1∑∞f(k−1;r+1,p)
令 k′=k−1、r′=r+1,显然
k=1∑∞f(k−1;r+1,p)=k′=0∑∞f(k′;r′,p)=1
故
EX=1−prp
4. 方差
首先计算
EX2=k=0∑∞k2f(k;r,p)=1−prpk=1∑∞kf(k−1;r+1,p)
令 k′=k−1、r′=r+1,考虑服从负二项分布的随机变量 Y∼NB(r′,p),其概率质量函数为 f(k′;r′,p),显然
k=1∑∞kf(k−1;r+1,p)=k′=0∑∞(k′+1)f(k′;r′,p)=E(Y+1)=EY+1=1−pr′p+1=1−p(r+1)p+1=1−prp+1
故
EX2=1−prp⋅1−prp+1=(1−p)2r2p2+rp
而根据定义
VarX=E(X−EX)2=E[X2−2XEX+(EX)2]=EX2−(EX)2=(1−p)2r2p2+rp−(1−p)2r2p2=(1−p)2rp
我们在文章开头提到,负二项分布的 σ2≥μ。由于 0≤p≤1,这个结论是显而易见的。
5. 累积分布函数
负二项分布的累积分布函数可以表示为正则不完全 Beta 函数:
F(k;r,p)=I1−p(r,k+1)
证明如下:
F(k;r,p)≡P(X≤k)=x=0∑kf(x;r,p)=x=0∑k(xx+r−1)px(1−p)r
令 q=1−p,有
F(k;r,p)=F(k;r,1−q)=x=0∑k(xx+r−1)(1−q)xqr
对 q 求偏导,得
∂q∂F=x=0∑k(xx+r−1)[−x(1−q)x−1qr+r(1−q)xqr−1]=x=0∑k(xx+r−1)[−x(1−q)x−1qr+r(1−q)xqr−1]=x=0∑k(xx+r−1)[x[(1−q)−1](1−q)x−1qr−1+r(1−q)xqr−1]=x=0∑k(xx+r−1)[−x(1−q)x−1qr−1+(x+r)(1−q)xqr−1]=−x=0∑kx(xx+r−1)(1−q)x−1qr−1+x=0∑k(x+r)(xx+r−1)(1−q)xqr−1=−x=1∑kx(xx+r−1)(1−q)x−1qr−1+x=0∑k(x+r)(xx+r−1)(1−q)xqr−1=−x=1∑k(x−1)!(r−1)!(x+r−1)!(1−q)x−1qr−1+x=0∑kx!(r−1)!(x+r)!(1−q)xqr−1=−q2rx=1∑k(x−1)!r!(x+r−1)!(1−q)x−1qr+1+q2rx=0∑kx!r!(x+r)!(1−q)xqr+1=−q2rx′=0∑k−1x′!r!(x′+r)!(1−q)x′qr+1+q2rx=0∑kx!r!(x+r)!(1−q)xqr+1=−q2rF(k−1;r+1,1−q)+q2rF(k;r+1,1−q)=q2rf(k;r+1,1−q)
而根据正则不完全 Beta 函数的定义,有
I1−p(r,k+1)=Iq(r,k+1)=B(r,k+1)B(q;r,k+1)=B(r,k+1)∫0qtr−1(1−t)kdt
同样对 q 求偏导,得
∂q∂Iq=B(r,k+1)qr−1(1−q)k=Γ(r)Γ(k+1)Γ(r+k+1)qr−1(1−q)k=(r−1)!k!(r+k)!qr−1(1−q)k=q2rr!k!(r+k)!qr+1(1−q)k=q2rf(k;r+1,1−q)
也就是说
∂q∂F(k;r;1−q)=∂q∂Iq(r,k+1)
亦即
F(k;r;1−q)=Iq(r,k+1)+C
注意到 q=0 时有
{F(k;r,1)=0I0(r,k+1)=0
解得常数 C=0。
证毕。
6. 在时间序列预测模型中的使用
DeepAR 等模型中,网络的输出目标是概率分布的参数。例如正态分布的 μ 和 σ。但对于负二项分布而言,让网络直接输出 μ 和 σ 是不合适的,因为在训练过程中很难保证输出的值满足 σ2≥μ。那么让网络输出 r 和 p 呢?似乎是可以的,只要保证 r>0,0≤p≤1 即可。前者可以使用 softplus 激活函数,后者可以使用 sigmoid 激活函数。有没有办法避免使用 sigmoid 呢?通常的做法是让网络输出 μ 和 α=1/r,只要使用 softplus 激活函数确保二者均为正数即可。
参考文献
- Negative binomial distribution - Wikipedia
- Beta function - Wikipedia
- Patil G P. On the evaluation of the negative binomial distribution with examples[J]. Technometrics, 1960, 2(4): 501-505.