你等的车,总比时刻表说的久
这一章讲一个偏差,它不属于排队论,但它解释了排队论里最反直觉的那些数字,也解释了为什么你觉得「隔壁那条队总是更快」。它的名字叫检查悖论,一旦看见就再也看不见了。
一条公交线路,平均每 10 分钟一班。这个数字是准确的:一小时确实来 6 班。
但班次不准时——间隔是完全随机的(有时候两分钟连来两班,有时候二十分钟没有)。
你在一个随机时刻走到站台。平均要等多久?
一个数错了的地方
「平均间隔 10 分钟,随机到达,所以平均等 5 分钟」——这个推理错在哪?
错在它假设你等可能地落进每一段间隔。你不会。
看这条时间轴:
# 一小时里的 6 班车,平均间隔 10 分钟
0 3 6 28 31 40 60
│────────│─────│──────────────────────────────│────│─────────│───────────────│
3 分钟 3分 22 分钟 3分 9 分钟 20 分钟
# 六段间隔:3, 3, 22, 3, 9, 20 —— 平均正好 10 分钟 ✓
# 但你随机站到这条轴上的某一点,落进哪一段?
# 落进那段 22 分钟的概率 = 22/60 = 36.7%
# 落进某一段 3 分钟的概率 = 3/60 = 5%
# ★ 长的间隔占的时间多,所以它更容易接住你。
这就是检查悖论(inspection paradox),也叫长度偏倚抽样(length-biased sampling):当你按时间随机取样时,长的那些区间被过度代表了。
而一旦你更可能落进长间隔,你要等的时间自然就变长了。
拖那根滑杆。班次的不齐程度从 0 拧上去,看三个数字怎么分开:
| 班次的 c² | 你落进的那段有多长 | 你要等多久 |
|---|---|---|
| 0(完全准时) | 10.00 分 | 5.00 分 |
| 0.25 | 12.50 分 | 6.25 分 |
| 1(纯随机) | 20.00 分 | 10.00 分 |
| 4(很不准) | 50.00 分 | 25.00 分 |
「真实的平均间隔」这一列在哪儿?它永远是 10.00 分钟,四行都一样。车站的排班表没变,一小时还是 6 班。变的只是你看到的世界。
# 你落进的那段间隔(长度偏倚后的期望) E[你看到的间隔] = E[X²] ÷ E[X] = E[X] × (1 + c²) # 你要等的时间(落进后再等一半) E[你要等] = E[X²] ÷ (2 E[X]) = E[X] × (1 + c²) ÷ 2 # c² = 0 时:等 E[X]/2,天真答案正确 # c² = 1 时:等 E[X] ★ 整整一个平均间隔 # c² = 4 时:等 2.5 × E[X]
注意 E[X²]——第 5 章说过,方差是平方加权的,所以长间隔在这里被平方级地放大。这也是为什么答案能超过平均间隔本身。
顺带一提:c²=1 时那个「等待时间恰好等于平均间隔」的巧合,就是指数分布的无记忆性——不管车刚走还是等了很久,你的期望等待永远是一个完整间隔。第 5 章那条性质,在这里露出了它的实际后果。
它到处都是
检查悖论一旦认出来,就会在到处冒出来。它的通用形式是:
只要你的取样方式让大的东西更容易被选中,你看到的平均值就会系统性地大于真实平均值。
几个例子,每一个都真实到有点烦人:
- 「我的班级平均 30 人,为什么我上的课总是 60 人?」因为你被大班「接住」的概率更大。学校统计的是班级的平均规模,学生体验到的是人数加权的平均规模。
- 「为什么我朋友的朋友总是比我朋友多?」(友谊悖论)因为社交网络里,好友多的人出现在更多人的好友列表里。你随机认识的人,更可能是个社交达人。
- 「电梯为什么总是先往反方向走?」如果你在中间楼层,电梯在你上方或下方的时间占比不同,你按下按钮那一刻更可能落进较长的那一段行程里。
- 「为什么隔壁那条队总是更快?」三条队,你随机挑一条。你在最快那条的概率只有 1/3,也就是说有 2/3 的概率你会看到别人比你快。这不是错觉,是算术。
最后一个例子在第 13 章还会以更狠的形式回来。
检查悖论不只是一个有趣的类比,它字面上是排队公式里那一项的来源。
想一下:一个请求到达时,服务台正在处理某个请求。它得等那个请求做完才能开始。它要等多久?
这就是检查悖论——它在随机时刻「插入」到正在进行的服务里,所以它更可能撞上一个长的服务。
# 「正在被服务的那位还剩多久」的期望(叫剩余服务时间) E[剩余] = E[S²] ÷ (2 E[S]) = E[S] × (1 + cs²) ÷ 2 # 这一项在排队论里有名字,叫 W₀。第 19 章会再见到它。 # 而 Pollaczek–Khinchine 公式(第 11 章)本质上就是: # Wq = W₀ ÷ (1 − ρ) # ↑ 你要等的 = 「撞上的那位还剩多久」 ÷ 余量
把这一行读两遍。排队公式里那个 (1+c²)/2 的因子,不是什么数学技巧,它就是检查悖论。你的请求之所以要为「不齐」付费,正是因为它更容易撞上一个长的服务。
这一章逼出了一个问题:说「平均」的时候,是按什么加权的平均?
- 按事件加权:每一班车算一次 → 平均间隔 10 分钟。这是排班表的视角。
- 按时间加权:每一秒钟算一次 → 平均间隔 20 分钟。这是乘客的视角。
两个都是「平均」,都没算错,回答的是不同的问题。而绝大多数争论(「我们的服务明明很快啊」vs「我用起来很卡」)就藏在这个差别里:你按请求算,用户按时间感受。
排队论里有一条定理专门处理这件事,叫 PASTA(Poisson Arrivals See Time Averages,泊松到达者看到时间平均):如果到达是泊松的,那么到达者看到的系统状态,恰好等于时间平均的系统状态。这条定理之所以有名,正是因为它在别的到达模式下不成立——泊松是那个幸运的例外。
为什么用户觉得你的服务比监控显示的慢。你的监控按请求算平均延迟。但用户是在时间里体验系统的,而系统慢的时段恰好是请求最多的时段——更多用户经历了糟糕的时段。按用户体验加权的平均延迟,永远比按请求加权的高。这不是监控在撒谎,是加权方式不同。
「我们服务器的平均负载只有 40%」。如果这是把所有机器所有时刻平均出来的,那它几乎没有意义。用户体验到的是他那台机器在他那一刻的负载,而繁忙的机器在繁忙的时刻服务了最多的用户。
抽样调查里的自选择。「用户满意度调查显示 85% 满意」——填问卷的人不是随机的。这是检查悖论的近亲:取样方式和被测量本身相关时,你得到的永远是偏的。
为什么等红灯感觉那么久。你在随机时刻到路口,更容易撞上长的那个红灯周期。同一个信号灯,「平均红灯 40 秒」和「你平均等 40 秒以上」可以同时成立。
这个认知有两个实际用处。
第一,不要根据自己的体验去推系统的平均值。你的体验是长度偏倚的,会系统性地高估。要推平均值,得去看按事件加权的统计。
第二,反过来,做 SLA 的时候要按时间/用户加权,而不是按请求加权。因为用户体验的确就是那个偏倚后的量。用户的「不公平」感受,恰恰是对系统更准确的度量。
还有第三点,这一章最值钱的一条:既然等待时间正比于 1 + c²,那么让班次准时的收益,和加开班次的收益是同一个量级的。把 c² 从 1 压到 0,等待从 10 分钟降到 5 分钟——等价于把班次密度翻倍,而后者要多买一倍的车。
C10 分钟——整整一个平均间隔。不是一半。
公式:E[等待] = E[X](1 + c²)/2 = 10 × (1+1)/2 = 10.00。六万次模拟到站量出来是 9.97 分钟。
选 A 的人偏了 2 倍。而如果这条线路的 c² 是 4(在现实的公交系统里完全正常,因为堵车会让班次挤成一团),答案是 25.00 分钟——偏了 5 倍。
A 「等一半」——这个答案在班次完全准时时精确正确。它的问题不是算错了,是用错了模型:它假设你等可能落进每一段间隔。 B 「比一半略多」——方向对,量级不对。这个选项对应 c² ≈ 0.3 的世界,比真实的公交系统整齐得多。 D 「取决于运气」——这正是这一章要破的那个直觉。它是可以精确计算的,而且答案里没有「运气」这一项。这一章的一句话
在随机时刻取样,你看到的世界系统性地比真实世界糟——而糟多少,恰好由「不齐」的程度决定。
下一章是这本书的骨架。前七章说的所有事——满、不齐、检查悖论、指数尾——会被压成一个只有三个因子的乘式。你会看到那三个因子分别是什么、哪一个是「速度」(只有一个)、以及这个近似公式在哪里精确、在哪里能偏到 96.1%。