1 开头的数字为什么占三成:本福特定律,和它抓假账的本事

先做个游戏。

给你 60 秒,在纸上写 100 个"随机数"。别用计算器,就凭感觉写。

写完之后数一下每个数的第一位。你大概会写出 11 个 1、11 个 2、11 个 3……九个数字平分,各约 11.1%。这是绝大多数人对"随机"的直觉。

但真实世界的数字不是这么长的。

一本翻旧的账簿

我扫了自己硬盘上 40 万个文件的字节数,数它们的首位:

1: 29.3%   2: 17.5%   3: 12.3%   4: 10.7%   5: 8.1%
6:  6.5%   7:  6.5%   8:  4.8%   9:  4.4%

1 开头的接近三成,9 开头的不到二十分之一。

这不只是文件大小。河流长度、股票收盘价、城市人口、地震能量、物理常数表、你手机上每个 App 的流量——只要不是人为规定的编号,几乎都是这个形状。它叫本福特定律(Benford's Law),而且它精确到小数点后三位:

P(d) = log₁₀(1 + 1/d)        d = 1, 2, ..., 9

d=1: log₁₀(2/1) = 0.30103
d=9: log₁₀(10/9) = 0.04576

我把这件事从头跑了一遍,下面是我真正觉得有意思的部分——包括一个我完全没预料到的例外。


# 一、那张表

首位 本福特 均匀分布
1 30.103% 11.1%
2 17.609% 11.1%
3 12.494% 11.1%
4 9.691% 11.1%
5 7.918% 11.1%
6 6.695% 11.1%
7 5.799% 11.1%
8 5.115% 11.1%
9 4.576% 11.1%

九个概率精确加起来等于 1(实测 1.000000000000)——因为 Σ log₁₀(1+1/d) = log₁₀(2×3/2×4/3×…×10/9) = log₁₀10 = 1,中间的项全部约掉了。第一次看到这个约简的时候我愣了一下:这条定律的"归一化"是望远镜积,不是什么拟合出来的常数。

它还有个二阶版本:第二位数字是 0 的概率 11.968%,是 9 的概率只有 8.500%。所以"第一位是 1"的账目里,第二位也不太平。

历史上有两个时间点:

  • 1881 年,天文学家 Simon Newcomb 注意到一件小事:图书馆里对数表的前几页,被翻得比后面脏得多。前几页是 1.0~1.9 的对数。他写了篇两页的短文,给出了那张表,然后没人理。
  • 1938 年,通用电气的工程师 Frank Benford 收集了 20229 个数字——河流面积、人口、死亡率、棒球统计、杂志文章里的数字、物理常数——发现它们都服从同一条曲线。这次定律有了名字(虽然 Newcomb 早了 57 年,这就是典型的 Stigler 定律)。

Benford 当时的直觉是"大自然偏爱小的首位数字"。这个解释是错的。真正的原因要到 1961 年才被说清楚。


# 二、为什么偏偏是 log₁₀(1+1/d)

把任何一个正数 x 写成科学计数法:x = m × 10ᵏ,其中 m ∈ [1, 10)。那么:

x 的首位是 d ⟺ m ∈ [d, d+1) ⟺ log₁₀x 的小数部分落在 [log₁₀d, log₁₀(d+1))

那个区间的长度是 log₁₀(d+1) − log₁₀d = log₁₀(1 + 1/d)。

所以问题变成了:log₁₀x 的小数部分是不是均匀的?

  • 首位是 1 的区间是 [0, 0.301),长度 0.301 → 30.1%
  • 首位是 9 的区间是 [0.954, 1),长度 0.046 → 4.6%

如果 log₁₀x 的小数部分在 [0,1) 上均匀分布,本福特定律就是恒等式,不需要任何"大自然的偏好"。而"小数部分均匀"换一种说法就是:x 的密度正比于 1/x。

为什么真实数据会是这样?1961 年 Roger Pinkham 给了一个漂亮得多的答案,1995 年 Ted Hill 把它推广成"基底不变性":

在"首位分布不随单位换算而变"这个要求下,本福特分布是唯一解。

这句话很值得停下来想。你有一堆以米为单位的河流长度,它的首位分布是某个形状;现在全部换算成英尺(乘 3.28),首位分布必须还是那个形状——因为河流没变,只是尺子变了。要求是:把一个数据集整体乘上任意常数,首位分布不变。满足这个条件的分布,只可能是对数均匀的,也就是本福特。

我实测了一下。拿一个本福特型的数据集和一个均匀分布的数据集,分别乘 1、2、3、7、1.7、0.37,看偏离度(MAD,越小越合本福特):

乘数 ×1 ×2 ×3 ×7 ×1.7 ×0.37
本福特型数据 0.0015 0.0013 0.0011 0.0012 0.0009 0.0012
均匀分布数据 0.0604 0.0604 0.0593 0.0598 0.0487 0.0491

均匀数据集乘完之后还是那个样子(MAD 恒在 0.05~0.06),本福特数据集换任何单位都纹丝不动。本福特定律就是"和单位无关"这件事本身的数学后果。

计算尺:在对数刻度上,乘法变成了加法


# 三、乘法造出来的随机

那么"对数均匀"又是从哪儿来的?答案是乘法。

中心极限定理说的是:很多独立的东西相加,结果是正态分布(钟形)。但真实世界大量的量是相乘出来的——人口是"上年人口 × 增长率",复利是"本金 × (1+r)ⁿ",公司营收是"员工数 × 客单价 × 转化率 × …"。

一堆正数相乘,取对数就变成相加。所以:很多独立因子相乘 ⟹ log x 近似正态 ⟹ 当这个正态足够宽时,它对 1 取模后趋于均匀 ⟹ 本福特。

"足够宽"是多少?我让一个数从 1 出发,每一步乘一个 [1, 3) 之间的随机数,跑 k 步,看首位分布怎么长出来:

步数 k σ(log₁₀x)(数量级) 首位分布 1→9 (%) MAD
1 0.134 49.9 / 50.1 / 0 / 0 / 0 / 0 / 0 / 0 / 0 0.1162
2 0.190 9.7 / 22.6 / 23.7 / 17.4 / 12.5 / 8.1 / 4.7 / 1.4 / 0 0.0662
5 0.298 27.8 / 22.7 / 15.5 / 10.5 / 7.4 / 5.3 / 4.2 / 3.5 / 3.2 0.0196
10 0.423 30.0 / 16.9 / 12.2 / 9.8 / 8.2 / 7.0 / 6.0 / 5.3 / 4.6 0.0024
25 0.667 30.3 / 17.4 / 12.5 / 9.9 / 7.8 / 6.7 / 5.9 / 5.0 / 4.5 0.0012
50 0.949 30.1 / 17.6 / 12.5 / 9.7 / 7.8 / 6.7 / 5.8 / 5.1 / 4.6 0.0004
100 1.333 30.0 / 17.6 / 12.5 / 9.8 / 7.9 / 6.7 / 5.8 / 5.2 / 4.5 0.0004

十步就够了。 到第 10 步,σ(log₁₀x) ≈ 0.42 个数量级,首位分布已经和理论值重合到小数点后一位。再往后它就只是越来越准。

用对数正态分布直接扫 σ 也是同样的结论(σ 以数量级计):

σ(log₁₀x) 0.087 0.217 0.434 0.869 1.737
MAD 0.1125 0.0528 0.0023 0.0006 0.0006

门槛就卡在 0.4 个数量级附近:低于它,数据还挤在一起,首位分布是歪的;过了它,就基本是本福特。

指数增长也一样,但有个反直觉的细节——增长率太小反而不符合:

增长率 r(跑 2000 步) 覆盖数量级 MAD 结论
0.001 0.87 0.0284 不合格
0.01 8.7 0.0054 通过
0.03 26 0.0021 通过
0.07 60 0.0008 通过
0.2 172 0.0004 通过

r = 0.001 时 2000 步只跨了 0.87 个数量级,数据还是挤着的,首位分布是 34.6/20.3/14.3/11.2/9.1/7.7/2.7/0/0——连 8 和 9 都没出现。所以"指数增长一定符合本福特"这话得加个前提:得长得够久。


# 四、天生就符合的那几个数列

有些数列一个随机因子都没有,却完美符合。原因是指数增长换了个皮:

数列 n MAD χ² (df=8) 首位分布 1→9 (%)
2ⁿ 4000 0.00027 0.07 30.1 / 17.6 / 12.5 / 9.7 / 7.9 / 6.7 / 5.8 / 5.2 / 4.5
斐波那契数列 4000 0.00025 0.03 30.1 / 17.6 / 12.5 / 9.7 / 8.0 / 6.7 / 5.8 / 5.1 / 4.6
n! 800 0.0084 11.0 30.1 / 18.3 / 13.0 / 8.3 / 6.5 / 8.9 / 5.0 / 5.0 / 5.0
nⁿ 5000 0.0046 11.9 29.2 / 19.3 / 12.8 / 9.2 / 7.7 / 6.7 / 5.6 / 4.9 / 4.4

2ⁿ 的 χ² 只有 0.07(临界值 15.507),也就是说 4000 个数字,偏离理论值的程度比随机波动该有的还小——因为它根本不是随机的。首位是 d 当且仅当 frac(n·log₁₀2) ∈ [log₁₀d, log₁₀(d+1)),而 log₁₀2 是无理数,所以 n·log₁₀2 的小数部分在 [0,1) 上等分布(Weyl 定理)。这是一个确定性的序列在做一件看起来很随机的事。

斐波那契同理:Binet 公式里 Fₙ ≈ φⁿ/√5,log₁₀φ 也是无理数。

(顺带一提:这也解释了为什么计算尺能用。对数刻度上,乘法就是加法,而"等分布"就是"这把尺子每个位置被用到的机会差不多"。)

1912 年的 Burroughs 打印式加法机


# 五、素数:一个漂亮的例外

写到这里我本来以为"凡是自然增长的东西都符合"。然后我筛了 1 亿以内的素数,数了一下它们的首位:

范围 素数个数 1 开头的比例 首位分布 1→9 (%) MAD
≤ 10³ 168 14.88% 14.9 / 11.3 / 11.3 / 11.9 / 10.1 / 10.7 / 10.7 / 10.1 / 8.9 0.0505
≤ 10⁴ 1 229 13.02% 13.0 / 11.9 / 11.3 / 11.3 / 10.7 / 11.0 / 10.2 / 10.3 / 10.3 0.0533
≤ 10⁵ 9 592 12.44% 12.4 / 11.8 / 11.4 / 11.1 / 11.0 / 10.6 / 10.7 / 10.5 / 10.5 0.0546
≤ 10⁶ 78 498 12.21% 12.2 / 11.6 / 11.4 / 11.1 / 11.0 / 10.8 / 10.7 / 10.6 / 10.5 0.0554
≤ 10⁷ 664 579 12.04% 12.0 / 11.6 / 11.3 / 11.2 / 11.0 / 10.9 / 10.8 / 10.7 / 10.6 0.0561
≤ 10⁸ 5 761 455 11.91% 11.9 / 11.5 / 11.3 / 11.1 / 11.0 / 10.9 / 10.8 / 10.7 / 10.7 0.0566

1 开头的素数只有 11.9%,不是 30.1%——几乎就是均匀分布的 11.1%。

更怪的是趋势:范围每扩大十倍,1 开头的比例是 14.88 → 13.02 → 12.44 → 12.21 → 12.04 → 11.91,一路下降。它没有在向本福特收敛,它在向均匀收敛。MAD 也在变大(0.0505 → 0.0566),也就是说离本福特越来越远。

为什么会这样?

素数定理说 x 附近的素数密度约是 1/ln x。在一个数量级内部,1/ln x 几乎是常数——从 10⁷ 到 10⁸,ln x 只从 16.1 变到 18.4,密度只差 12%。而在单个数量级 [10ᵏ, 10ᵏ⁺¹) 里,九个首位区间 [10ᵏ, 2·10ᵏ)、[2·10ᵏ, 3·10ᵏ)……[9·10ᵏ, 10ᵏ⁺¹) 的长度完全相等,都是 10ᵏ。密度近似均匀 + 区间长度相等 ⟹ 首位近似均匀。

那为什么整个数据集不由"所有数量级加起来"决定?因为最大的那个数量级主导了总数:每上一个数量级,素数个数大约乘 9。所以 ≤10⁸ 的素数里,[10⁷, 10⁸) 这一段就占了 5 096 876 / 5 761 455 = 88.5%。

我把那一段单独拿出来数了一遍:1 开头占 11.89%,和整体的 11.91% 几乎一样。整个数据集的首位分布,基本上就是最后一个数量级的首位分布。

所以本福特定律在这里失效的机制很清楚:本福特需要"每个数量级贡献相当"才能叠出 1/x 的形状(这正是第二节那个尺度不变性要求的实质)。素数偏偏是几何式增长的,最大的那一层把其他全盖住了,而单层内部是均匀的。

Ulam 螺旋:把自然数按方形螺旋排布,素数会自己连成对角线


# 六、什么时候它根本不成立

这条定律有个硬前提:数据得跨足够多数量级,且密度大致正比于 1/x。违反它的例子比符合它的更有教育意义:

数据 首位分布 1→9 (%) MAD
身高(150–199 cm) 100 / 0 / 0 / 0 / 0 / 0 / 0 / 0 / 0 0.1553
身高(4.0–6.9 ft) 0 / 0 / 0 / 34.4 / 34.7 / 30.9 / 0 / 0 / 0 0.1682
发票号(100–999) 11.1 × 9 0.0596
整数 1…99999 11.1 × 9 0.0597
硬盘上 40 万个文件的字节数 29.3 / 17.5 / 12.3 / 10.7 / 8.1 / 6.5 / 6.5 / 4.8 / 4.4 0.0040
我这个仓库的 git 增删行数(5 661 条) 47.6 / 18.8 / 10.0 / 7.3 / 4.7 / 4.0 / 3.4 / 2.2 / 2.0 0.0416

身高用厘米记,100% 是 1。 换成英尺,就变成 4、5、6 三分天下。这就是尺度不变性反过来用:一个只跨 0.12 个数量级的数据集,首位分布完全由量纲决定,跟"自然规律"一点关系没有。

最后一行是我最喜欢的一条负面结果。git 的增删行数是如假包换的真实数据,但它不合格——47.6% 的改动是 1 行,绝大多数提交都很小,分布挤在 1~9 这个区间里。所以"真实数据就一定符合本福特"是句错话。


# 七、一个会冤枉好人的坑

现在假设你是个审计,拿到了一份数据,想用本福特查它是不是编的。这里有个陷阱。

我生成了"对数均匀、跨 r 个数量级"的数据——这是最规整、最无辜的一族分布——然后用 χ² 检验(df=8,α=0.05,临界值 15.507)判它合不合格,每个 n=1000 跑 3000 次:

跨越 r 个数量级 MAD n=1000 时被判"不合格"的比例
0.3 0.1553 100.0%
0.5 0.1059 100.0%
0.8 0.0432 100.0%
1 0.0005 4.4%
1.2 0.0255 100.0%
1.5 0.0357 100.0%
2 0.0004 4.5%
3 0.0005 4.8%
5 0.0004 4.7%

注意那个 r = 1.2:一份完全诚实、只是刚好跨了 1.2 个数量级的数据,会被 100% 判为造假。而跨整整 1 个、2 个、3 个数量级的数据,误报率就是 4~5%(这正是 α=0.05 该有的水平)。

原因和素数那节是同一个:只有横跨完整的数量级,每个数量级才能等权叠加出 1/x 的形状。跨了 1.2 个,多出来的那 0.2 个数量级把 1、2、3 这几位抬高了(实测 41.6/14.8/10.5/…),于是全盘崩掉。

还有一条更容易踩的:我试着把"跨很多数量级"单独拿出来救场——在每个数量级内部均匀取值,然后混合 1、2、3、5、8 个数量级。结果 MAD 全都落在 0.0595~0.0601,始终是均匀的,一点没变好。

所以关键不是"跨得多",是密度必须正比于 1/x。 这句话值得单独抄一遍。


# 八、抓假账,到底要多少条记录

好,现在回到最实际的问题。

假设一份账目本来是干净的本福特数据,有人往里掺了比例 f 的假数字(造假者让首位均匀分布)。用 χ² 检验,α=0.05,每个格子跑 1000 次,检出率是这样:

记录数 n \ 掺假比例 1% 2% 5% 10% 20% 50% 100%
50 4.2 5.4 4.6 9.6 13.1 38.0 94.9
100 5.0 4.8 6.0 7.1 15.9 65.5 100.0
250 5.7 6.6 8.2 12.0 25.9 97.2 100.0
500 5.6 5.5 7.6 15.3 50.4 100.0 100.0
1 000 4.8 6.1 11.9 24.7 84.9 100.0 100.0
5 000 5.8 8.1 31.0 93.0 100.0 100.0 100.0
20 000 8.7 18.2 91.2 100.0 100.0 100.0 100.0

(对照:完全干净的数据,各个 n 下的误报率都稳定在 4.7%~5.5%,正好是 α=0.05。这一点很重要——这个检验的"无辜者误判率"是可控的。)

反过来问"要有九成把握,最少需要多少条记录":

掺假比例 检出率 ≥ 90% 所需的最小 n
5% 20 000
10% 5 000
20% 2 000
30% 1 000

这就是这条定律真正的分量,也是它的边界:它是个统计检验,不是测谎仪。 1000 条记录里掺了 10% 的假,你只有 24.7% 的概率抓到——和瞎猜强不了多少。掺到 20%,才升到 84.9%。想抓 5% 的猫腻,得有上万条记录。

钞票:本福特定律最著名的应用场景是查账


# 九、两个统计陷阱

写这篇之前我以为"算个 χ²,大于 15.5 就是有问题"。跑完发现两个问题。

陷阱一:χ² 会随样本量膨胀,MAD 不会。

我那 40 万个文件大小的数据,MAD = 0.00398(按 Nigrini 的标准,≤0.006 属于"高度吻合")。但它的 χ² = 944.6,p < 0.001,铁板钉钉"拒绝"。

为什么?因为 χ² 统计量的期望大致正比于 n·(真实偏离量)²。样本一大,哪怕偏差小到实务上完全无所谓,χ² 也会冲到天上去。同一个数据集,n 从 100 涨到 100000,MAD 均值从 0.0232 一路降到 0.00079(越来越"吻合"),而 χ² 均值从 7.8 涨到 9.0、检出率从 4.0% 涨到 9.5%(越来越"可疑")。

所以实务上两条路:样本小(几千条以内)用 χ²,样本大了必须改用 MAD,或者干脆看单个数字的 Z 统计量。

陷阱二:MAD 的阈值在小样本下是废的。

Nigrini 给的经验阈值是 MAD ≤ 0.006 高度吻合、0.006~0.012 可接受、0.012~0.015 勉强、> 0.015 不合格。但这个阈值是给大样本定的。我拿完全干净的本福特数据去测,看它被 MAD > 0.015 误杀的比例:

n 50 100 250 500 1 000 5 000 20 000
误报率 98.6% 91.0% 44.9% 7.5% 0.1% 0.0% 0.0%

n = 50 的时候,一份绝对清白的数据有 98.6% 的概率被判"不合格"。原因很简单:50 个样本本身抖得就比 0.015 大。

所以这两条得配套记:MAD 只在 n ≳ 1000 时可读,χ² 只在 n 不太大时可读。 用反了就会得出荒谬结论——一边是"我的硬盘有 40 万个文件,所以文件系统在造假",一边是"这份 50 条的账目一定是假的"。


# 最后

写完这篇,我记住的是三个数字:

  • 30.1% —— 1 开头的比例。它不是什么经验拟合,是 log₁₀2,是"首位分布不该随单位而变"这件事的唯一解。
  • 11.9% —— 1 开头的素数只占 11.9%,而且范围越大越接近均匀的 11.1%。这是我跑之前完全没想到的:素数增长得太快,最大的那个数量级吃掉了 88.5% 的样本,而单个数量级内部九个首位区间长度相等,所以是均匀的。它提醒我,"自然的东西"和"符合本福特的东西"是两回事。
  • 5 000 —— 账目里掺 10% 的假数字,要有九成把握抓到,需要五千条记录。一千条只有 24.7%。

这条定律最迷人的地方在于:它描述的是随机性本身的形状,而不是任何一个具体系统的规律。它不在乎你数的是河流、股票还是硬盘上的字节;它只在乎一件事——这个数是不是被很多独立的东西乘出来的。

而人凭感觉写出来的数字,是被"加"出来的:先想到一个大概的量级,再在这个量级里挑一个看着顺眼的数。于是 1 不会占三成,9 也不会只有 4.6%。

所以下次有人让你"随便写几个随机数",你至少知道,随便写出来的那些数,一眼就会被看穿。

附注:文中所有数字都由本机脚本跑出(素数用奇筛筛到 10⁸,其余为 BigInt 精确计算 + 蒙特卡洛)。判别标准:χ² 自由度 8,临界值 13.362(α=0.10) / 15.507(α=0.05) / 20.090(α=0.01);MAD 为九个 |实测比例 − 本福特比例| 的算术平均。想自己验的话,最短的路径是:拿你硬盘上所有文件的字节数,数第一位,应该得到 30/18/12/10/8/7/6/5/4。


# 图片版权