4. 泊松过程的叠加与稀疏

前几节我们讨论的都是单一泊松流:事件以某个速率 λ 独立、无记忆地到达。但在真实系统里,事件往往来自多个源头,或者到达后还要被进一步分类。呼叫中心同时接到中文、英文、西班牙语来电;电商平台同时收到普通订单、预售订单、退货申请。这一节要解决两个方向相反的问题:多个流合并成一个流(叠加),以及一个流按概率拆成多个子流(稀疏/标记)。这两个定理是泊松过程最实用的性质之一,也是后续排队建模和仿真实现的基础。

叠加定理:独立泊松流相加仍是泊松流

设 K 个相互独立的泊松过程 N₁(t), N₂(t), …, N_K(t),速率分别为 λ₁, λ₂, …, λ_K。把它们的事件放在一起,得到合并过程 N(t) = N₁(t) + … + N_K(t)。叠加定理告诉我们:N(t) 仍然是泊松过程,速率等于各分速率之和 λ = λ₁ + λ₂ + … + λ_K。

这个结论的直观解释是:泊松过程的“无记忆性”在合并后依然成立——无论当前时刻距离上一个事件多久,下一个事件来自哪个流、何时到达,都不受历史影响。合并后任意长度 t 的时间区间内事件数服从 Poisson(λt),且区间内事件到达时刻的条件分布与单一泊松过程完全一致。

一个常被忽略但很重要的推论是:合并流中每个事件来自哪个源,其归属是独立同分布的,第 i 个源所占比例为 p_i = λ_i / λ。也就是说,叠加之后我们不仅能知道总速率,还能按比例“反推”来源构成。这一点在后面的案例里会直接用到。

稀疏(标记)定理:按概率拆分仍是泊松流

反方向的操作是稀疏。设 N(t) 是速率为 λ 的泊松过程,每个事件独立地以概率 p 被标记为“类型 A”,以概率 1−p 被标记为“类型 B”。稀疏定理指出:类型 A 的事件构成一个速率为 λp 的泊松过程,类型 B 的事件构成一个速率为 λ(1−p) 的泊松过程,且两者相互独立。

这里的关键词是“独立”和“每个事件独立标记”。如果标记不是逐事件独立进行的(例如按时间窗口批量分类、或存在相关性),结论就不再成立。实际建模时,只要分类决策对每个事件单独做出、且不依赖到达时刻,就可以放心使用稀疏定理。

叠加与稀疏互为逆操作,可以组合使用:先把多个流叠加成一个总流,再按类型稀疏成若干子流;或者先把一个流稀疏成子流,再分别与其它流叠加。这种“先合后分”或“先分后合”的结构,是构建复杂到达模型的基本积木。

叠加与稀疏:呼叫中心多语言来电建模 独立到达流(叠加前) 中文来电 λ₁ = 6 次/分钟 英文来电 λ₂ = 3 次/分钟 西班牙语来电 λ₃ = 1 次/分钟 叠加 Σλ 合并总流 λ = 6+3+1 = 10 次/分钟 稀疏 p_i 按类型拆分(稀疏后) 中文 λp₁ = 6 英文 λp₂ = 3 西班牙语 λp₃ = 1 关键关系 叠加:λ = λ₁ + λ₂ + λ₃ = 10,合并流仍为泊松过程,事件来源比例 p_i = λ_i / λ 稀疏:每个事件独立以概率 p_i 标记类型,子流速率 λp_i,且各子流相互独立 组合:先叠加后稀疏 = 先稀疏后叠加(速率一致),可灵活拆分建模 注意:标记必须逐事件独立;若分类依赖时间或批量决策,稀疏定理不成立

案例建模:呼叫中心的多语言来电与订单类型拆分

假设某呼叫中心有三条独立来电线路:中文来电速率 λ₁ = 6 次/分钟,英文来电 λ₂ = 3 次/分钟,西班牙语来电 λ₃ = 1 次/分钟。三条线路的到达相互独立,且各自服从泊松过程。

第一步,叠加。总来电流是三者之和,速率 λ = 6 + 3 + 1 = 10 次/分钟。根据叠加定理,总流仍是泊松过程。这意味着我们可以用单一泊松过程来模拟总来电,而不必分别模拟三条线路再合并——在仿真实现上这能显著简化代码。同时,任意一通来电属于中文的概率是 p₁ = 6/10 = 0.6,英文 0.3,西班牙语 0.1。

第二步,稀疏。现在考虑业务分类:每通来电在接入后,坐席会将其标记为“咨询”“投诉”“办理”三类之一。假设标记是逐通独立做出的,比例为 0.5、0.3、0.2。根据稀疏定理,三类来电各自构成泊松过程,速率分别为 10×0.5 = 5、10×0.3 = 3、10×0.2 = 2 次/分钟,且三者相互独立。

这里有一个容易混淆的点:语言维度和业务类型维度是两个不同的标记维度。我们可以先按语言稀疏、再按业务类型稀疏,也可以反过来,结果一致——因为每次标记都是逐事件独立的。但如果业务类型的分布依赖于语言(例如中文来电中“咨询”占比更高),那么两个维度就不再独立,需要按条件概率分层处理:先按语言稀疏,再在每个语言子流内按各自的业务比例二次稀疏。这仍然是合法的,因为每一层内部都满足逐事件独立标记。

仿真实现要点

在代码层面,叠加与稀疏可以极大简化模拟。与其分别生成三条线路的到达时刻再排序合并,不如直接以 λ = 10 生成总流的到达间隔(指数分布,均值 1/10 分钟),然后对每个到达时刻独立抽取一个类型标签。下面是一个可运行的 Python 片段(示例参数,非实测结果):

import numpy as np

rng = np.random.default_rng(42)
lam_total = 10.0          # 次/分钟
T = 60.0                  # 模拟 60 分钟
n = rng.poisson(lam_total * T)          # 总事件数
arrivals = np.sort(rng.uniform(0, T, n))  # 条件分布:均匀

# 按语言稀疏(逐事件独立)
lang_p = [0.6, 0.3, 0.1]
lang = rng.choice(['中文','英文','西语'], size=n, p=lang_p)

# 按业务类型稀疏
biz_p = [0.5, 0.3, 0.2]
biz = rng.choice(['咨询','投诉','办理'], size=n, p=biz_p)

for name in ['中文','英文','西语']:
    print(name, (lang == name).sum())

注意这里用“先定总数、再均匀撒点”的方式生成到达时刻,依据是泊松过程在固定区间内给定事件数后,到达时刻的条件分布是均匀分布。这与逐次抽取指数间隔在分布上等价,但向量化后更快。运行后各类型的计数应围绕 λ_i×T 波动,例如中文约 360 次、英文约 180 次、西语约 60 次(60 分钟示例)。判断模型是否正确,可以看两点:各类型计数的均值是否接近理论值,以及类型之间是否存在相关性——独立稀疏下应无相关。

叠加定理让“多源合并”可以用单一泊松流建模;稀疏定理让“到达后分类”可以用独立子流建模。两者组合时,只要每一层的标记是逐事件独立的,就可以自由选择先合后分或先分后合,速率按乘积累加即可。
稀疏定理的独立性条件不可省略。如果分类是按时间段批量决定的(例如每小时切换一次主推业务),或者标记与到达时刻相关(例如高峰期投诉更多),子流就不再是泊松过程,速率也可能随时间变化,此时应改用非齐次泊松过程或带相关性的标记模型。

把这两个定理用熟,后续建立多类顾客、多服务台的排队模型时,就可以把复杂的到达结构拆解成若干个标准泊松流分别处理,再通过叠加汇总系统负载。这是泊松过程建模中最常用的“分而治之”手法。