扔了二十次,出了五个正面——这台计算机没坏
让程序模拟扔二十次硬币,结果五个正面、十五个反面。看着像机器坏了。可它恰恰是最诚实的一次模拟——二十次这个数,本来就不够把 0.5 看清楚。
短期波动大,长期收敛到 0.5
原书原文(英文)
As we have noted, our intuition suggests that the probability of obtaining a head on a single toss of a coin is 1/2. To have the computer toss a coin, we can ask it to pick a random real number in the interval and test to see if this number is less than 1/2. If so, we shall call the outcome heads; if not we call it tails. Another way to proceed would be to ask the computer to pick a random integer from the set . The program CoinTosses carries out the experiment of tossing a coin times.
Running this program, with , resulted in:
THTTTHTTTTHTTTTTHHTT.
Note that in 20 tosses, we obtained 5 heads and 15 tails. Let us toss a coin times, where is much larger than 20, and see if we obtain a proportion of heads closer to our intuitive guess of 1/2. The program CoinTosses keeps track of the number of heads. When we ran this program with , we obtained 494 heads. When we ran it with , we obtained 5039 heads.
We notice that when we tossed the coin 10,000 times, the proportion of heads was close to the ``true value'' .5 for obtaining a head when a coin is tossed. A mathematical model for this experiment is called Bernoulli Trials (see Chapter 3).
一行输出,一句"这机器坏了"
把一枚硬币交给计算机扔,最简单不过:让它在 里随机取一个实数,小于 算正面,否则算反面。
扔 20 次,屏幕吐出一行:
THTTTHTTTTHTTTTTHHTT
数一数正面——5 个。 反面 15 个。
这时候,几乎所有第一次看到这行输出的人都会说同一句话:"这随机数生成器有问题吧。"
五个对十五个。正面只占了四分之一。这不是明摆着偏吗?
把它改成 1000 次,得到 494 个正面——频率 。改成 10000 次,得到 5039 个正面——频率 。
越扔越像 。 可越扔也越贵:一万次要看一万个字符,二十次一眼就数完了。
于是有了这个值得全篇追问的问题:那 20 次扔出的 5 个正面,到底是"机器坏了",还是"二十次本来就会这样"?
这道题在问什么
先把"计算机怎么扔硬币"这件事说清楚,因为它比真硬币更值得追。
计算机没有硬币,它有的是伪随机数生成器:一个确定性的算法,吐出一串看起来无规律可言的数。你在 [0,1] 里取一个数,跟 比大小——这就是一次"扔硬币"。
所以本篇首先要问的是一个模仿问题:一串人造的随机数,能不能顶得上一枚真硬币?
原书的答案是能,并给了模型名字——伯努利试验(Bernoulli Trials)。独立、每次成功的概率都是 、反复做 次。这一篇是全书第一次把这个模型立起来。
但更有意思的是它附带暴露的那个坑:同样的数据,换个次数看,结论会翻。
算一下:二十次到底"应该"出几个正面
如果硬币是公平的,。扔 次,正面数 服从二项分布 。
它的期望是
扔 20 次,期望就是 10 个正面。我们只得到 5 个,差了一半。
差了一半,是不是就说明硬币不公平?
不是。因为期望只是个平均数,真实结果会在它附近晃动。晃多远?用标准差量:
20 次时,正面数的标准差约 2.24 个。 我们偏离期望 5 个,也就是
个标准差。这个距离偏大,但在"完全正常"的范围之内——按正态近似,偏离超过 2 个标准差的概率约 ;用二项分布精确算是 ,约每二十四次出现一次。
换句话说:公平硬币扔 20 次,大约每二十四次就有一次出现这么难看的正面数。 你觉得"机器坏了",其实只是撞上了一次正常波动。
再把 放大,看同一批数据:
| 次数 | 期望正面数 | 标准差 | 原书实际 | 频率 | 频率对 的偏离 |
|---|---|---|---|---|---|
| 20 | 10 | 2.236 | 5 | 0.2500 | |
| 1000 | 500 | 15.81 | 494 | 0.4940 | |
| 10000 | 5000 | 50.00 | 5039 | 0.5039 |
看最后两列:偏离从 掉到 再到 ,一路在缩。 换成"占几个标准差"看更准:
| 次数 | 实际偏离 | 该次的理论 | 偏离 |
|---|---|---|---|
| 20 | 0.2500 | 0.1118 | 2.24 |
| 1000 | 0.0060 | 0.0158 | 0.38 |
| 10000 | 0.0039 | 0.0050 | 0.78 |
第一行的 2.24 和第三行的 0.78,都在说同一件事:这是公平硬币的正常表现。 只是 20 次的"正常"恰好长得像"坏"。
为什么二十次不够——这里才是本篇的正主
把这个想透,就摸到了大数定律的门。
扔 20 次,正面频率的标准差是
也就是说,只用 20 次去估 ,你的估计值天生就在真值上下 的幅度里晃。
晃幅 是什么概念?真值是 ,晃幅 意味着你可能得到 ,也可能得到 ——区间宽到能同时容纳"这硬币偏正面"和"这硬币偏反面"两个结论。 我们这次的 ,不过是这个宽区间里比较极端的一端。
而扔 1000 次,晃幅变成 ;扔 10000 次,。
这是本篇唯一要记住的公式。 想让人信服,多做的实验次数不是线性地多,而是要按平方倒数缩。误差减半,实验次数得翻四倍。
(上一讲 de Méré 那个例子里,原书跑 1000 局得了 ——照着它下判断会反过来说 de Méré 错了;跑 10000 局得到 ,才把方向拨正。同一个模拟,样本量差了十倍,结论反了一次。
这不是模拟的毛病,这是所有用样本说话的方法的宿命。)
在课堂上怎么办
这个例子最适合让学生亲手"冤枉"一次计算机。
先让学生自己写(或用计算器)生成 20 个随机数,数正面。把全班的结果收上来,写在黑板上——几乎一定有几个组得出 5-7 个正面,甚至有更极端的。
问一句:"这些组的生成器是坏的吗?"
一定有人喊是。这时候让他们把所有组的数据合起来算总频率——比如二十组合计 400 次、正面 202 个,。
同一个班、同样的生成器,分开看每组都像坏了,合起来漂亮地贴着 。 这个反差比推导管用。
接下来让他们自己把 从 20 改成 200、2000、20000 各跑一遍,把频率连成一条线。亲眼看见那条线越往右越贴地。 讲台上一句话点透:你不是在等它"变准",你是在等抖动被摊薄。
如果还有时间,可以问一个更刁的:"那要跑多少次才算够?"——这个问题没有放之四海的答案,取决于你要多准。但这正是"做实验的人必须自己定的东西"。
学生最容易栽在哪
课堂提问
- 原书跑 20 次得 5 个正面。如果这硬币真的公平,至少要扔到多少次,你才愿意承认它公平?先给出一个你的判据,再想这个判据靠不靠谱。
- 把频率的标准差 对 求导,看它随 怎么变。为什么精度要提高十倍,实验次数要增加一百倍?
- 一颗"不公平"的硬币 。要扔多少次,才能让"频率超过 "的概率达到九成?(提示:用正态近似 。)