3. 泊松过程的到达间隔与计数分布

在泊松过程建模中,我们通常从两个互补的视角观察事件:一是计数视角,即固定一段时间内到达了多少个事件;二是间隔视角,即相邻两次到达之间隔了多久。本节要建立的正是这两者之间的桥梁:到达间隔服从指数分布,第 n 次到达时刻服从伽马分布,而固定时间窗内的计数服从泊松分布。理解这三者的推导关系,是后续做事件到达模拟与结果校验的基础。

一、到达间隔为什么是指数分布

设泊松过程 {N(t), t≥0} 的强度为 λ,即单位时间内平均到达 λ 个事件。令 T₁ 表示第一次到达的等待时间,则事件 {T₁ > t} 等价于“在 [0, t] 内没有发生任何到达”,即 {N(t) = 0}。由泊松分布公式 P(N(t)=k) = (λt)^k e^(−λt) / k!,取 k = 0 得:

P(T₁ > t) = P(N(t) = 0) = e^(−λt),  t ≥ 0
F(t) = P(T₁ ≤ t) = 1 − e^(−λt)
f(t) = λ e^(−λt),  t ≥ 0

这正是参数为 λ 的指数分布,其均值为 1/λ,方差为 1/λ²。由于泊松过程具有独立增量与平稳增量,任意第 n 次与第 n+1 次到达之间的间隔 Xₙ = Tₙ₊₁ − Tₙ 与 T₁ 同分布,且各 Xₙ 相互独立。因此“到达间隔独立同分布于 Exp(λ)”是泊松过程的一个等价刻画——这一点在模拟中非常有用:我们既可以用“按指数分布抽样间隔、逐个累加”的方式生成到达时刻,也可以用“按泊松分布抽样计数”的方式生成事件数,两者应当一致。

二、无记忆性的推导与含义

指数分布最特殊的性质是无记忆性。对任意 s, t ≥ 0:

P(T > s + t | T > s) = P(T > s + t) / P(T > s)
                      = e^(−λ(s+t)) / e^(−λs)
                      = e^(−λt) = P(T > t)

用过程语言表述就是:已知已经等待了 s 仍未到达,那么再等待 t 的剩余时间分布与从零开始等待 t 完全相同。这意味着泊松过程“不会记住”上一次到达发生在多久以前,剩余等待时间始终是均值为 1/λ 的指数分布。工程上这解释了一个常见直觉误区:如果某服务台的请求到达是泊松过程,那么“已经空闲了很久”并不意味着“马上就会来一个请求”,空闲时间越长并不会提高下一瞬间到达的概率。反过来,这也说明泊松到达在时间上是“完全随机、无聚集倾向”的,若实际数据表现出明显的间隔记忆(例如间隔过长后到达概率上升),就应考虑非齐次泊松过程或更新过程。

三、从指数到伽马:第 n 次到达时刻

第 n 次到达时刻 Tₙ = X₁ + X₂ + … + Xₙ,是 n 个独立同分布 Exp(λ) 随机变量之和。其分布为形状参数 n、速率参数 λ 的伽马分布(当 n 为整数时也称爱尔朗分布):

Tₙ ~ Gamma(n, λ)
f_{Tₙ}(t) = λ^n t^(n−1) e^(−λt) / (n−1)!,  t ≥ 0
E[Tₙ] = n/λ,  Var(Tₙ) = n/λ²

它与泊松分布的关系可由“第 n 次到达发生在 t 之前”这一事件的双重描述得到:{Tₙ ≤ t} 等价于 {N(t) ≥ n},于是

P(Tₙ ≤ t) = P(N(t) ≥ n) = Σ_{k=n}^{∞} (λt)^k e^(−λt) / k!

对 t 求导即可还原伽马密度,这体现了泊松计数分布与伽马到达时刻分布是同一随机机制的两种“对偶”描述:一个是“给定时间看个数”,一个是“给定个数看时间”。在可靠性、排队论中,这一对偶关系常用于把“第 n 个故障发生时间的概率”转化为“某时段内故障数不少于 n 的概率”来计算。

t 0 T₁ T₂ T₃ T₄ T₅ X₁~Exp(λ) X₂~Exp(λ) X₃ X₄ X₅ 窗口 [0, t] 内计数 N(t)=3 计数分布 N(t) ~ Poisson(λt) P(N=k)=(λt)^k e^(−λt)/k! 均值 λt,方差 λt 固定时间,看个数 到达间隔 Xₙ ~ Exp(λ) f(x)=λe^(−λx), x≥0 均值 1/λ,无记忆性 相邻到达,看间隔 第 n 次到达时刻 Tₙ ~ Gamma(n, λ) Tₙ = X₁+…+Xₙ 均值 n/λ,方差 n/λ² 固定个数,看时间 独立增量 ⇒ 间隔独立同分布 求和 ⇒ 伽马 对偶关系:P(Tₙ ≤ t) = P(N(t) ≥ n) = Σ_{k=n}^{∞} (λt)^k e^(−λt)/k!

四、用模拟验证到达间隔的指数性

理论推导之后,最直接的检验方式是用模拟生成到达序列,再对间隔样本做分布检验。下面给出一个可运行的 Python 示例(示例参数为 λ = 0.5 次/分钟,模拟 20000 个间隔,属于教学假设数据,非实测结果):

import numpy as np
from scipy import stats

rng = np.random.default_rng(2024)
lam = 0.5
n = 20000

# 方式一:按指数分布抽样间隔,累加得到到达时刻
intervals = rng.exponential(scale=1/lam, size=n)
arrivals = np.cumsum(intervals)

# 方式二:在固定时间窗内按泊松分布抽样计数
T = 1000.0
count = rng.poisson(lam * T)

# 检验间隔是否服从 Exp(lam)
ks = stats.kstest(intervals, 'expon', args=(0, 1/lam))
print("间隔均值:", intervals.mean(), "理论值:", 1/lam)
print("KS 统计量:", ks.statistic, "p 值:", ks.pvalue)

# 检验第 5 次到达时刻是否服从 Gamma(5, lam)
t5 = arrivals[4::5][:5000]
ks5 = stats.kstest(t5, 'gamma', args=(5, 0, 1/lam))
print("T5 均值:", t5.mean(), "理论值:", 5/lam)
print("T5 KS p 值:", ks5.pvalue)

运行后应观察到:间隔样本均值接近 1/λ = 2.0;KS 检验的 p 值通常大于 0.05,不能拒绝“间隔服从 Exp(0.5)”的原假设;T₅ 的样本均值接近 5/λ = 10.0,且与 Gamma(5, 0.5) 拟合良好。若把抽样方式改为“先按泊松分布生成每个单位时间窗内的计数,再展开成到达时刻”,得到的间隔经验分布也应与指数分布吻合——这正是两种生成路径一致性的验证。

做 KS 检验时注意:指数分布的参数若由样本估计而非事先给定,标准 KS 的 p 值会偏大(偏于不拒绝),严谨做法是使用参数估计后的修正检验或改用 Anderson–Darling 检验并查对应临界值。教学演示中固定 λ 已知即可。

五、结果判读与常见偏差

模拟验证不只是“看 p 值是否大于 0.05”,还应结合图形与矩进行交叉判断。建议同时输出间隔的经验分布函数与理论指数曲线对比图,并检查样本均值与标准差是否都接近 1/λ(指数分布均值等于标准差,这是一个易用的快速检查)。若均值明显偏离 1/λ,多半是抽样尺度参数写错(例如把 scale 写成 λ 而非 1/λ);若均值正确但方差显著偏小,则样本可能存在间隔下界或被人为截断。对于计数视角,可进一步用卡方拟合优度检验比较各时间窗内计数的频数与 Poisson(λt) 理论频数,若出现方差远大于均值(过离散),说明实际到达存在聚集,应考虑负二项或非齐次泊松模型。

把三个分布放在同一框架下记忆:计数看个数用泊松,间隔看时间用指数,累计到第 n 个用伽马;而无记忆性则是指数分布区别于其他寿命分布的关键特征,也是泊松过程“无后效”假设在间隔层面的直接体现。掌握这一组关系后,无论采用“生成间隔再累加”还是“生成计数再展开”的模拟策略,都能保证事件序列在统计上与泊松过程一致。