📝 到达过程黑话
- arrival process (到达过程): 事件在时间轴上一个个冒出来的随机过程
- N(t): 到时刻 t 为止发生了多少次事件 (计数视角)
- Tk: 第 k 次事件发生的时刻 (等待视角)
- λ: rate, 单位时间平均发生几次
- survival function S(t)=P(T>t): “撑到 t 还没出事” 的概率
- hazard rate h(t): 风险率, 已经活到 t 了, 下一瞬间出事的密度
- shape parameter k: Weibull 里控制 hazard 走势的那个形状参数
1 2 3 4 5 6 7 8 9
| Binomial (n 次独立试验, 每次概率 p) ↓ n → ∞, p → 0, np = λt 固定 Poisson(λt) "固定一段时间 t, 数一数发生了几次" ↓ 反过来问: 等第 1 次要多久 Exponential(λ) "间隔时间, 无记忆" ↓ 把 k 个间隔加起来 Gamma(k, λ) "等到第 k 次要多久" ↓ 放弃 λ 恒定的假设, 让风险率随时间变 Weibull(k, λ) "会老化 / 会磨合的那种失效"
|
Poisson: 把二项分布拉到极限
先讲怎么来的; 我们把一段长度为 t 的时间切成 n 个极小的格子, 每个格子里最多发生一次事件, 发生的概率是 p; 既然平均下来这段时间要发生 λt 次, 那么每格的概率就是
p=nλt
然后让 n→∞, 格子无限细, 每格概率无限小, 但两者乘积保持 λt 不变:
P(X=k)=n→∞lim(kn)pk(1−p)n−k=n→∞lim(n−k)!k!n!(nλt)k(1−nλt)n−k
k 固定而 n→∞, 所以 (n−k)!n!=n(n−1)⋯(n−k+1)∼nk, 前面那坨阶乘直接塌成 k!nk:
=n→∞limk!nk⋅nk(λt)k(1−nλt)n−k=k!(λt)k⋅n→∞lim(1−nλt)n⋅n→∞lim(1−nλt)−k
右边两个极限, 第二个因为指数 −k 是常数而底数趋于 1, 直接是 1; 第一个就是整篇笔记里 e 唯一的出处, 值得单独拎出来说;
那个 e−λt 到底是哪来的
很多讲义到这一步直接写"由重要极限得 e−λt"就过去了, 但是这一步其实才是 Poisson 里最有意思的地方: 一个纯组合的计数问题, 凭什么会长出一个超越数;
先把 e 本身摆出来; 它有两种等价定义, 一种是极限式, 一种是级数式:
ex:=n→∞lim(1+nx)nex:=j=0∑∞j!xj
这两个为什么是同一个东西? 把左边那个用二项式定理展开就看见了:
(1+nx)n=j=0∑n(jn)njxj=j=0∑nn→∞ 时→1njn(n−1)⋯(n−j+1)⋅j!xj⟶j=0∑∞j!xj
也就是说, 二项分布拉到极限会冒出 e, 跟"二项式展开拉到极限就是 ex 的级数"是同一件事; 我们在 Poisson 推导里做的那个 (n−j)!n!∼nj 的塌缩, 跟这里那个下括号是一模一样的操作, 只不过一次用在了单项 k 上, 一次用在了求和的每一项上;
如果不想展开二项式, 直接用等价无穷小也能一句话打完; 取对数, 令 x=−λt/n→0, 用 ln(1+x) 的级数:
nln(1−nλt)=n(−nλt−21n2(λt)2−31n3(λt)3−⋯)=−λt−n→∞ 时→02n(λt)2−⋯
高阶项全都带着 1/n 被扔掉, 只剩线性那一项活下来, 所以
n→∞lim(1−nλt)n=e−λt
这也顺带解释了为什么"每格概率 →0 而格子数 →∞"这种设定不会退化成 0 或者 1: 一阶项 n⋅(−λt/n) 是个不随 n 变的常数, 恰好被保留, 二阶以上的全被 n 稀释掉了; λt 固定这个约束就是为了让这个一阶项活下来;
于是最终
P(X=k)=k!(λt)ke−λt
顺手做个自洽性检查
既然 ex=∑jj!xj, 那把所有 k 的概率加起来:
k=0∑∞k!(λt)ke−λt=e−λtk=0∑∞k!(λt)k=e−λt⋅eλt=1
归一化白送; 换句话说 Poisson 的那个 k!(λt)k 本来就是 eλt 级数的第 k 项, 前面那个 e−λt 就是把整条级数除掉当归一化常数用的; 这么一看这个分布简直是硬凑出来的 从这个角度看, Poisson 根本就是"把 eλt 的泰勒级数按项拆成概率";
三个因子分别在干嘛
光有推导还是记不住, 我们把这三块拆开看看各自的角色:
- e−λt — 什么都不发生的基础概率, 也就是后面要反复用的 survival probability; 这是整个式子的"单位概率", 剩下两项都是在它上面做修正
- (λt)k — 权重; 想让它发生 k 次, 就要付出 k 份 λt 的代价
- k! — 去掉排列重复; 这 k 次事件谁先谁后我们并不关心, 所以要把 k 个位置的全排列除掉
CDF 就是老老实实往上累:
P(X≤N)=k=0∑Nk!(λt)ke−λt
Exponential: 换个方向问同一件事
上面问的是"给定时间 t, 发生了几次"; 现在反过来问, 服务器视角更常见的那个问题: 下一个请求多久来?
答案其实已经在手里了; “等待时间 T 超过 t" 这件事, 翻译过来就是"前 t 段时间里一次都没发生”, 也就是 N(t)=0, 代进 Poisson 令 k=0:
S(t)=P(T>t)=e−λt
这就是 survival function 的本体; 取补集拿到 CDF, 求导拿到 PDF:
P(T≤t)=1−e−λt⟹f(t)=λe−λt
所以 Poisson 和 Exponential 根本就是同一个过程的两种问法, 一个数次数, 一个量间隔;
Gamma: 把 k 个间隔叠起来
Exponential 管的是"等第 1 个", 那"等到第 k 个"要多久? 直觉上就是 k 段独立间隔加起来:
Gamma(k,λ)=i=1∑kExp(λ)
独立随机变量求和, 密度做卷积, 这是逃不掉的; 我们定义 fT2(t) 为"两个事件一共花了 t"的密度, 那就要对第一个事件落在哪一刻的所有可能积一遍:
fT2(t)=∫0tfT1(x)fT1(t−x)dx
代进去算, 会发现指数项里的 x 直接抵消掉了, 剩下一个跟 x 无关的常数在那躺着:
fT2(t)=∫0tλe−λx⋅λe−λ(t−x)dx=λ2e−λt∫0tdx=λ2te−λt
再往上递推一层, 用"二阶 ∗ 一阶"而不是从头再卷:
fT3(t)=∫0tfT2(x)fT1(t−x)dx=∫0tλ2xe−λx⋅λe−λ(t−x)dx=λ3e−λt∫0txdx=2λ3t2e−λt
规律已经很明显了, 每递推一层, e−λt 岿然不动, λ 多一次方, 积分把 t 的幂次抬高一级同时留下一个阶乘分母:
fTk(t)=(k−1)!λktk−1e−λt
Gamma 和 Poisson 是一枚硬币的两面
这两个分布互为反函数关系, 写出来非常干净:
P(Tk≤t)=P(N(t)≥k)
左边是"第 k 次事件在 t 之前就发生了", 右边是"到 t 为止至少发生了 k 次", 这俩描述的是同一个事件, 只是一个从时间轴问, 一个从计数问;
顺便也解释了那个让人别扭的 tk−1: Poisson 的 (λt)k 里 t 是 k 次方, 而 Gamma 是 k−1 次方; 可以理解成总时长固定的情况下自由度少了一个, 因为 Gamma 要求第 k 个事件恰好卡在 t 这一瞬间, 这一次的位置被钉死了, 只剩前 k−1 个可以自由安排;
Weibull: 当 λ 不再是个常数
到这里为止所有推导都建立在一个很强的假设上: λ 恒定; 也就是说不管这台机器已经跑了一天还是跑了十年, 它下一秒挂掉的概率都一样; 这就是 Exponential 那个著名的无记忆性;
现实里显然不是这样; 新机器有磨合期容易早夭, 老机器有磨损期容易报废, 中间那段反而最太平; 所以我们需要让风险随时间变化, 用 λ=ctk−1 这种形式来建模;
要说清楚"随时间变化的风险", 先得把 hazard rate 定义出来; 从 survival function 出发:
h(t)=−dtdlnS(t)
拿 Exponential 试一下, S(t)=e−λt, 求出来 h(t)=λ, 果然是个常数, 跟无记忆性对上了;
现在反过来玩: 我们不先定 S(t), 而是先定 h(t) 再倒推 S(t); 人为规定
h(u)=λk(λu)k−1
这个形式看起来很刻意, 那是因为它确实很刻意, 前面那个 k/λ 纯粹是为了积分出来好看凑的; k 就是 shape parameter;
把定义式反解, 两边积分:
lnS(t)=−∫0th(u)du=−∫0tλk(λu)k−1du
令 x:=λu, 则 dx=λdu, 上限跟着换成 t/λ, 那个碍眼的 1/λ 正好被吃掉:
=−∫0t/λkxk−1dx=−xk∣∣∣∣0t/λ=−(λt)k
于是
S(t)=e−(λt)k
这就是 Weibull 的 survival function; 所谓"凑得好看"就体现在这: 积分完连个多余的系数都不剩, 直接把 Exponential 的 λt 换成了 (t/λ)k;
k 决定了这是哪种失效
k 一个参数就把三种完全不同的物理图景装进了同一个式子里:
| k 取值 |
hazard rate 走势 |
对应场景 |
| k=1 |
常数, 退化成 Exponential |
纯随机失效, 无记忆 |
| k>1 |
单调递增 |
磨损老化, 用得越久越容易挂 |
| 0<k<1 |
单调递减 |
早夭期, 熬过磨合就稳了 |
把三段拼起来就是可靠性工程里那条经典的浴缸曲线, 不过那个得靠分段或者混合模型, 单个 Weibull 一次只能演一段;
收个尾
回头看这一路, 其实全程只做了两件事:
- 同一个到达过程, 换个角度提问就换一个分布: 数次数得 Poisson, 量首个间隔得 Exponential, 量第 k 个间隔得 Gamma;
- 松开 λ 恒定这个假设, 改成先设计 hazard rate 再倒推 survival function, 就得到 Weibull;
S(t)=e−∫0th(u)du 这个式子是整篇的枢纽, Exponential 和 Weibull 都是往里面塞不同的 h 塞出来的; 记住这一条比记住四个 PDF 有用得多;