一款诚实的崩盘游戏,倍数会照着一种特定的分布出现:一种带庄家优势、有上限截断的幂律分布。大部分局爆得很低,只有一小部分升到很高的倍数。这篇解释这种分布是什么形状、在大量局里应该是什么样子,以及怎样看出一款游戏的分布和它该有的样子对不上。
倍数分布应该是什么形状?
在一款庄家优势为 h 的公平崩盘游戏里,爆点至少是 x 的机会是:
P(multiplier ≥ x) = (1 - h) / x,其中 x ≥ 1
这是一种反比关系:x 翻倍,机会就减半。结果是一个大量集中在低数值、右边拖着一条长尾巴(很少见的高数值)的分布。
庄家优势 3%(返还率 97%)的游戏,累积的机会是:
| 倍数 | 升到这个倍数的机会 | 意思 |
|---|---|---|
| 1.01× | 96% | 大约 4% 的局低于 1.01× 就结束,显示为 1.00× |
| 1.50× | 64.7% | 大约每 3 局有 2 局升到 1.5× |
| 2.00× | 48.5% | 大约一半的局升到 2× |
| 3.00× | 32.3% | 大约每 3 局有 1 局 |
| 5.00× | 19.4% | 大约每 5 局有 1 局 |
| 10.0× | 9.7% | 大约每 10 局有 1 局 |
| 20.0× | 4.85% | 大约每 20 局有 1 局 |
| 50.0× | 1.94% | 大约每 50 局有 1 局 |
| 100× | 0.97% | 大约每 100 局有 1 局 |
| 1000× | 0.097% | 大约每 1,000 局有 1 局 |
这张表描述的,就是「正常」的样子。在一款公平、返还率 97% 的游戏上玩 1,000 局,你应该会看到大约 40 局停在 1.00×、大约 485 局升到 2 倍或以上、大约 97 局升到 10 倍或以上,以及大约 10 局升到 100 倍或以上。
这些数字不是保证,是统计上的预期。在任何一组 1,000 局里,实际的数目都会有出入。但出入不应该大得离谱,而且「很多低、很少高」的模式,应该一眼就看得出来。
幂律的形状是从哪里来的?
这个形状不是随便定的。它直接来自爆点怎么产生的数学。
大部分崩盘游戏的做法,是把一个均匀分布的随机数(哈希的输出),经过一个反比的转换,变成爆点。如果 U 在 0 到 1 之间均匀分布,爆点就是:
multiplier = (1 - h) / U
U 接近 1(哈希值高)时,倍数接近 1,就是爆得很低。U 接近 0(哈希值低)时,倍数非常高,就是少见的高倍数局。U 的均匀分布,就这样对应到倍数的反比分布。
所以分布才会是这个样子:
- 大部分的机会集中在低倍数,因为均匀范围里的一大段(比如 0.5 到 1.0),对应的都是 1 倍到 2 倍之间的倍数。
- 高倍数少见,但可能出现,因为均匀范围里的一小片(比如 0.001 到 0.01),对应的是 97 倍到 970 倍之间的倍数。
- 庄家优势在最底部最看得出来。结果往下取到两位小数,所以每一次低于 1.01× 的抽取,都显示为 1.00×。一开局就结束的局,占比大约是 h + (1 − h)/101:设计返还 97% 的游戏大约是 4%,99% 的大约是 2%。
这种做法妙在简单:一条公式、一个参数(庄家优势),整个分布就从数学里算出来了。里面没有事先设定的「连输时段」,没有「好运周期」,也没有「放松」或「收紧」。只有这条公式,设计上对每一局的随机输入分别套用。
想深入了解随机输入是怎么产生的,见讲随机数生成器的文章。至于可自行验证的机制怎样确保这条公式被诚实地套用,见我们讲可自行验证的文章。
在真实数据上,「正常」的分布是什么样子?
把一款公平游戏 1 万局以上的倍数画成直方图,应该会看到:
- 在 1.00× 有一根很高的柱子(一开局就结束的局,大约占 h + (1 − h)/101)
- 从 1.00× 到大约 3.00× 急剧往下降(所有局的大部分都在这个范围里)
- 一条又长又细、往右延伸的尾巴(偶尔出现的高倍数)
- 分布里没有缺口、没有扎堆,也没有周期性
公平的分布里,不应该看到的:
- 在高于 1× 的任何倍数上,出现第二个高峰(代表公式可能有不止一个峰)
- 在某个特定倍数突然断掉(代表可能有一个低于理论最高值的倍数上限)
- 和随机起伏对不上的周期性扎堆(比如每 10× 或 50× 就有一根高柱子)
- 服务器种子更换前后,分布看起来不一样
把观察到的分布和理论分布做正式比较,用的是拟合优度检验,比如对分组计数做卡方检验,或者对整条曲线做 Kolmogorov-Smirnov 检验。这些检验算出:如果游戏照它说的运作,观察到这样的数据,有多大可能。
在每个游戏页面上,一款游戏记录超过 1 万局之后,实验室会按这几组显示分布:低于 1.01x、1.01x 到 1.5x、1.5x 到 2x、2x 到 3x、3x 到 5x、5x 到 10x、10x 到 30x,以及 30x 以上,还附上一条到达率曲线,和在固定收手目标的返还率。每个数字都附上样本量、时间和 95% 误差范围。从游戏列表开始,或者看单独一款,比如 Aviator 或 Spaceman。
| 游戏 | 局数,截至 | 低于 1.01x(95% 误差范围) | 如果官方说的属实(低于 1.01x) | 升到 10x(95% 误差范围) | 如果官方说的属实(10x) | 问答 |
|---|---|---|---|---|---|---|
| Aviator | 43,938 · 10月17日 11:05 UTC | 4.1%(3.9% 至 4.3%) | 4.0% | 9.4%(9.1% 至 9.7%) | 9.7% | 问答 |
| Big Bass Crash | 33,239 · 10月17日 11:06 UTC | 5.5%(5.3% 至 5.8%) | 5.4% | 9.4%(9.1% 至 9.7%) | 9.6% | 问答 |
| Crash X | 50,820 · 10月17日 11:06 UTC | 6.3%(6.1% 至 6.5%) | 5.0%(不在实测的 95% 误差范围里) | 9.6%(9.3% 至 9.9%) | 9.6% | 问答 |
| High Flyer | 38,709 · 10月17日 11:06 UTC | 4.0%(3.8% 至 4.2%) | 4.0% | 9.7%(9.4% 至 10.0%) | 9.7% | 问答 |
| JetX | 45,156 · 10月17日 11:07 UTC | 1.9%(1.8% 至 2.0%) | 官方公布的是一个范围,标准公式算不出单一数字 | 9.6%(9.4% 至 9.9%) | 官方公布的是一个范围,标准公式算不出单一数字 | 问答 |
| Lucky Jet | 46,089 · 10月17日 11:06 UTC | 4.0%(3.9% 至 4.2%) | 官方没公布返还率,没有公式数字 | 9.7%(9.4% 至 9.9%) | 官方没公布返还率,没有公式数字 | 问答 |
| Space XY | 49,481 · 10月17日 11:06 UTC | 2.0%(1.9% 至 2.2%) | 官方公布的是一个范围,标准公式算不出单一数字 | 9.8%(9.6% 至 10.1%) | 官方公布的是一个范围,标准公式算不出单一数字 | 问答 |
| Spaceman | 33,518 · 10月17日 11:06 UTC | 4.6%(4.4% 至 4.9%) | 5.4%(不在实测的 95% 误差范围里) | 9.8%(9.5% 至 10.1%) | 9.6% | 问答 |
按字母顺序排列,不是排名。两个 95% 误差范围有重叠时,这两款游戏在这个数字上没法排名。
如果官方说的属实:用标准崩盘公式算出来的数字(升到 x 倍的机会=官方返还率 ÷ x)。只在官方公布单一数字、游戏也照这个公式时才显示;官方公布的是范围或没有公布时显示短横。
* 不在实测的 95% 误差范围里:在这些局里,这个比例和标准公式算的不一样。这是测量结果,不是对公平性的结论:官方说的返还率,要看每款游戏页面上 2 倍收手的实测返还率。
过去的局说明游戏的表现,不能预测下一局。
由实验室自己的记录算出来,不是手填的;每一行都标明计数的时间。每款游戏的页面上有全部数字,附样本量、时间和误差范围。
不正常的分布是什么样子?
不正常的分布,是观察到的数据和理论预测之间,有统计上显著的偏离。有几种模式代表可能有问题:
秒崩(一开局就爆,低于 1.01 倍)太多。如果一款游戏说返还 99%,但停在 1.00× 的局,明显比公式允许的(大约 2%)多,这款游戏留下的就比它说的多。这是最简单的一种改参数作弊:平台把秒崩的比例,调得比公布的高。
中段倍数太少。如果分布里 5× 到 20× 的结果比预期少,游戏可能用了一条改过的公式,把中段压缩了。这样会把价值从玩家(他们常常把收手目标定在中段)转到平台那边,却不会明显影响两头的极端值。
尾巴被截断。如果分布在某个特定倍数(比如 500×)突然大幅下降,游戏可能设了一个没有公开的倍数上限。这会从尾巴偷走一部分机会,再重新分配,实际上就是压低了返还率。
分布随时间变。如果分布在人多的时段和人少的时段看起来不一样,或者在种子更换前后不一样,游戏可能在动态调整参数。在一款公平的游戏里,分布应该是稳定的。不管你什么时候量,它都应该看起来一样。
这些模式都能用统计检验发现,但每一种需要不同的检验和不同的样本量。《证据分级》解释了样本量怎样决定能看出什么。
返还率和分布的形状有什么关系?
返还率和分布,是从两个角度看同一个数学对象。
一款游戏的返还率,是每下注 1,在所有可能结果上的期望值。分布告诉你每个可能结果的机会。返还率就是分布的积分,也就是所有倍数按机会加权后的平均。
改变返还率,会以一种特定的方式改变分布:返还率越低,分布就越往低数值压。具体来说:
- 设计返还 99% 的游戏,大约 2% 的局停在 1.00×,升到 10× 的时候大约是 9.9%。
- 设计返还 97% 的游戏,大约 4% 的局停在 1.00×,升到 10× 的时候大约是 9.7%。
- 设计返还 90% 的游戏,大约 11% 的局停在 1.00×,升到 10× 的时候大约是 9.0%。
按百分比看,差距很小,但几百局累积下来就多了。按相对比例看,每个倍数上的改变都一样,因为升到每个倍数的机会,都跟着返还率缩放。最看得出来的是在底部:返还率越低,一开局就结束的局,占比会翻好几倍。
所以就算是把收手目标定得低(比如 1.5×)的玩家,返还率也很重要。返还率低,不只是让少见的高倍数回报变少,也让秒崩更常发生,在你来得及做什么之前,就把你的下注吃掉。秒崩占 11% 和占 2% 的差别,就是每 100 局一开局就输掉大约两注,还是输掉大约十一注。
分布的异常怎么发现?
三种标准的统计检验,各自抓一种不同的异常:
卡方拟合优度检验。我们把倍数范围分成几组(1.00-1.50、1.50-2.00、2.00-3.00 等等),拿每组观察到的数目和预期的数目对比。卡方统计量把总的偏差算成一个数字。卡方值大(p 值低),代表观察到的分布不太可能来自理论分布。
Kolmogorov-Smirnov(KS)检验。我们拿整条累积分布函数,而不只是分组的数目,去和理论的累积分布函数(CDF)对比。KS 检验对分布任何一点的偏离都很敏感,包括尾巴。它特别擅长发现整体偏移(分布不在它该在的位置)和压缩(分布比它该有的窄)。
对分组残差做游程检验。算出每组观察值和预期值的差之后,我们检验正的和负的差是随机分布的,还是扎堆的。扎堆代表有系统性的偏离(比如游戏在 5× 到 10× 这一段一直给得少),而不是随机的噪音。
这三种检验加在一起,涵盖了常见的出错形状。一款游戏在大样本上三种都通过,它产生的分布就和它公布的设计对得上。一款游戏有一种没通过,就值得用新的局再仔细看看,因为做很多次检验,有一次没通过也可能纯属运气。
样本量决定了灵敏度。几千局可以看出很离谱的偏离;要看出不到一个百分点的差距,需要几十万局。实验室怎么算出它的数字,见我们怎么算。
分布能帮你预测下一局吗?
不能。分布描述的是一款游戏在很多局里的表现:多常爆得很低、多常升到 10 倍。它说明不了哪一局会是哪一种。历史记录说明的是过去的表现,它预测不了下一局。说能从最近的结果读出下一局的工具,我们在预测软件和机器人的检查里讲过;某些时段或某些顺序拿回得比较多的想法,见规律和好运时段。
这一页对你有用吗?
匿名:不用账号,也不设 cookie。