公交车总迟到?你大概掉进了“等待时间悖论”
作者:CQITer小编 时间:2018-11-27 09:47

大数据文摘出品
编译:李雷、小蒋、钱天培
如果你经常坐公交车,相信下面这一场景对你绝不陌生。
你到了车站,准备搭乘声称每10分钟一班的公交车。你盯着你的手表留意着时间,结果公交车终于在11分钟后到来。
这时你不由得感叹:为什么今天运气这么差!
想想也是。如果公交车每10分钟一班,而你到达的时间是随机的,那么你的平均等待时间难道不是5分钟嘛?
但实际上,等待公交车的时间似乎永远要比你预估的久。
究竟是你错了?还是公交运营系统出了问题?
事实证明,在一些合理的假设下,你可以得出一个惊人的结论:
在等待平均10分钟一班的公交车时,你的平均等待时间将为10分钟。
这就叫等待时间悖论。
等待时间悖论
如果公交车精确每10分钟来一辆,那么你的平均等待时间就是这个间隔的一半:5分钟。
可是,如果我们给这个10分钟加上一点随机成分呢?
这时,等待时间悖论就出现了。
等待时间悖是检验悖论的一种。那么,什么是检验悖论呢?
简言之,只要观察量的概率与观察量有关,就会出现检验悖论。比如说,我们做了一个调查大学生班级平均人数的调查。虽然学校确实保证每班平均有30名学生,但实际调查下来的平均班级规模通常会大得多。
原因是,较大的班级中就有更多的学生,因此在计算学生的平均体验时,你会对大班进行过度地抽样。极端得讲,如果有一个班一个学生也没有,那你压根不会抽样到这个班级的学生。
对于通常10分钟一班的公交线路,有时两班车的间隔会超过10分钟,有时则短点。如果你在随机时间到达,那你会有更多机会遇到更长的等待间隔,而不是较短的。
因此,乘客所经历的平均等待时间间隔将比公交车之间的平均到达时间间隔更长,因为较长的间隔是被过度采样了的。
但等待时间悖论提出了一个比这更震撼的主张。
当两班车的平均间隔是N分钟时,搭乘者所经历的平均等待时间也是N分钟,而非N/2分钟。
这是真的吗?
模拟等待时间
为了证明等待时间悖论的合理性,让我们首先模拟平均每10分钟到达一班的公交车流。
我们将模拟大量的公交车到达的情况:100万辆(或大约19年中全天不间断的10分钟来一辆车的间隔),以保证实验的准确性。
import numpy as np
N = 1000000 # number of buses
tau = 10 # average minutes between arrivals
rand = np.random.RandomState(42) # universal random seed
bus_arrival_times = N * tau * np.sort(rand.rand(N))
为了确认我们做的是对的,让我们检查一下平均间隔是否接近τ= 10:
intervals = np.diff(bus_arrival_times)
intervals.mean()
输出:
9.9999879601518398
通过模拟这些公交车到达,我们现在可以模拟大量乘客在此期间到达公交车站,并计算他们每个人经历的等待时间。让我们将它封装在一个函数中供以后使用:
def simulate_wait_times(arrival_times,
rseed=8675309, # Jenny's random seed
n_passengers=1000000):
rand = np.random.RandomState(rseed)
arrival_times = np.asarray(arrival_times)
passenger_times = arrival_times.max() * rand.rand(n_passengers)
# find the index of the next bus for each simulated passenger




