本节摘要:条件期望是"拿着部分信息对目标做最优猜测",全期望公式把它变成分层计算的工具,独立性则刻画信息之间互不提供帮助。本节从两阶段抽奖的例子入手,给出条件期望的三层理解与全期望公式的使用套路,最后说明为什么整本教程的演化类定义——马尔可夫性、鞅、滤波——全部写在这台机器上。
保险精算师估一个理赔组合的年度总赔付时,从不算一笔糊涂账。他们的做法是先分桶:小事故桶平均赔多少、大事故桶平均赔多少,再按各桶占比加权。这个"桶内平均、桶间加权"的动作,就是条件期望加上全期望公式。随机过程里每一类演化规则——下一步的分布只依赖当前状态、公平博弈的长期不偏不倚——都是这个动作在时间轴上的重演。
某平台做用户留存分析。注册用户里四成来自搜索流量,六成来自社区推荐。搜索用户的次月留存率为 0.2,社区用户的次月留存率为 0.5。问:任取一名注册用户,其次月留存率的期望是多少?
直觉立刻给出答案:0.4×0.2 + 0.6×0.5 = 0.38。把这个算式翻译成符号,就是全期望公式:
E[留存] = P(搜索)·E[留存 | 搜索] + P(社区)·E[留存 | 社区]
写成一般形式:设事件族 A₁, A₂, … 构成样本空间的一个分割,则
E[X] = Σᵢ P(Aᵢ)·E[X | Aᵢ]
这个公式看似平凡,实则是处理复杂期望的万能拆解器:凡是直接算不动的期望,先找一个合适的分割"分桶",桶内往往简单得多。第 2 章推导泊松过程的性质、第 3 章计算赌徒破产的破产概率、第 5 章的分层蒙特卡洛,用的全是这一招。选择分割的品味,就是应用概率的功力——好的分割让桶内问题变得平凡,坏的分割让每个桶都不比原问题简单。
第一层是初等版:给定事件 B,条件期望 E[X | B] 就是按条件分布重新加权。这一层够用来做大部分计算题。
第二层是随机变量版:若条件不是单个事件而是另一个随机变量 Y 的取值,则 E[X | Y=y] 随 y 变化,把 y 换成 Y 自身,得到 E[X | Y]——它是一个关于 Y 可测的随机变量,即"Y 的函数"。比如身高 X 与体重 Y,E[X | Y] 是一条随体重变化的"平均身高曲线"。这一版的关键认识:条件期望本身也是随机变量,可以对它再取期望。
第三层是信息版:条件期望 E[X | G] 中,G 是一个 σ-代数,代表"你掌握的全部信息"。E[X | G] 是在掌握 G 之后对 X 能做出的最优估计(均方误差意义下)。这一层是随机过程的标准语言:"截至时刻 t 的信息已知时,未来量的最优猜测"就写成 E[X_t+s | F_t]。
三层理解对应的操作难度递增,但思想一以贯之:信息每多一分,估计的方差就少一分。条件期望作为"用掉全部已知信息后的估计",它的方差不超过原方差——这就是全期望公式另一面的推论:Var(X) = E[Var(X | Y)] + Var(E[X | Y])。方差可以分解成"桶内平均方差"加"桶间均值方差",统计里叫方差分析,预测问题里叫"信息的解释力"。做预测模型的朋友不妨记住这条恒等式:你的模型本质就是在逼近 E[Y | 特征],模型的天花板由信息量决定,不由算法决定。
X 与 Y 独立,指其中任何一个的取值不改变另一个的分布:P(X 属于 A, Y 属于 B) = P(X 属于 A)·P(Y 属于 B) 对一切 A、B 成立。用信息语言说:知道 Y 不能改进对 X 的估计,E[X | Y] = E[X] 恒成立——这是独立性在随机过程里最常用的等价形态。
独立性的三条使用规则贯穿全册:
规则一,独立增量:若过程在不相交时间段上的增量相互独立,则一大类计算可以逐段进行。泊松过程与布朗运动的定义都建立在这条规则上,第 2 章与第 4 章会反复调用。
规则二,独立与不相关的界限:独立蕴含不相关,反之不然。做线性模型时只能用"不相关"这个弱条件;做概率推导时通常需要完整的独立性。混用两个词是审稿意见里的常客。
规则三,条件独立的瘦身:给定 Z 后 X 与 Y 条件独立,是图模型与隐马尔可夫模型的骨架。第 3 章的隐马尔可夫滤波——"观测只依赖当前状态"——就是一条条件独立假设。
⚠️ 实战中最贵的错误:把"看起来没有因果关系"当成"独立"。两个变量可能共同受第三个隐藏变量驱动而高度相关(混杂);也可能因果链条存在却因抵消表现出零相关。独立性是分布层面的严格声明,靠数据"看"不出来,需要论证或假设。
import numpy as np rng = np.random.default_rng(11) n = 400_000 # 两阶段模型:先抽渠道(40% 搜索,60% 社区),再按渠道分布抽留存 channel = rng.random(n) < 0.4 # True 表示搜索渠道 retain = np.where( channel, rng.random(n) < 0.2, # 搜索渠道留存 0.2 rng.random(n) < 0.5, # 社区渠道留存 0.5 ) print(f"模拟的总体留存期望 = {retain.mean():.4f}") print(f"全期望公式理论值 = {0.4*0.2 + 0.6*0.5:.4f}") # 典型输出:0.3801 对 0.3800 # 分桶核对:retain[channel].mean() 约 0.2,retain[~channel].mean() 约 0.5
把渠道比例、桶内留存率换成本行业的真实参数,这段十行代码就是一张可运行的精算表。全期望公式的工程价值正在于此:复杂系统的总体期望 = 各场景期望按场景概率加权,而场景往往是可以单独测算的。
第一题(分层计算):某快递分拨中心,六成包裹走自动分拣线(差错率 0.01),四成走人工(差错率 0.03)。任取一件包裹的差错概率是多少?答案:0.6×0.01 + 0.4×0.03 = 0.018。追问:抽检发现一件差错包裹,它走人工线的概率是多少?用贝叶斯:0.4×0.03 / 0.018 ≈ 0.667——差错信息把人工线的后验占比从先验的四成拉到三分之二。
第二题(方差分解):接第一题,差错数在两渠道内各自是 0-1 变量。用 Var(X) = E[Var(X|渠道)] + Var(E[X|渠道]) 验证总体方差:桶内项 0.6×0.01×0.99 + 0.4×0.03×0.97 ≈ 0.0176,桶间项 0.6×0.018² 相对可忽略,总方差应等于 0.018×0.982 ≈ 0.0177。算一遍能体会到"桶间均值差异不大时方差几乎全在桶内"。
第三题(条件独立的用处):两台服务器共用同一供电线路,各自故障率独立估计为 0.05 与 0.07。若停电事件概率为 0.02、停电时两台必同时故障,问"两台同时故障"的概率是多少? naive 相乘给 0.0035;考虑共同供电的耦合后是 0.02 + 0.98×0.05×0.07 ≈ 0.0234——相差近七倍。共同驱动源让"独立性"破产,这正是可靠性工程做冗余设计时必须先列公共故障清单的原因。
概念机器已经备齐。下一节把它们组装起来,正式给"随机过程"下定义。