本福特定律探讨:从原理到进制的深入理解

以下为与 ChatGPT 的实际对话内容整理,以便深入理解本福特定律及其底层机制。


用户:
本福特定律是什么?

ChatGPT:
本福特定律(Benford’s Law)是一个统计学现象,描述的是在许多现实世界的数值数据集中,较小的数字更有可能出现在首位,而不是像人们直觉认为的那样,首位数字是随机分布的。

📌 数学表达:

以十进制为例,数字 d (d ∈ {1,2,…,9}) 出现在首位的概率为:

$$
P(d) = \log_{10}\left(1 + \frac{1}{d} \right)
$$
结果如下:

首位数字 概率
1 30.1%
2 17.6%
3 12.5%
4 9.7%
5 7.9%
6 6.7%
7 5.8%
8 5.1%
9 4.6%

用户:
本福特定律深层次的原因你分析一下是为什么,我心里有一个想法,但是你先说说,我再说。

ChatGPT:
你提出的这个问题非常好——深入理解本福特定律的“本质机制”一直是统计学家和数学家的关注重点。我们先从已知的一些核心解释出发:


🎯 本福特定律深层原因分析

1. 对数尺度均匀分布(Logarithmic Distribution)

从数学角度来说,如果某些数据在对数尺度(log-scale)上是均匀分布的,那么它在原始尺度(linear scale)上的首位数字就会服从 Benford 分布。

直观地说:

  • 在 log10 空间中,log(1) 到 log(2) 这段比 log(2) 到 log(3) 更长。
  • 因此,以 1 开头的数所占的“对数区间”最大,所以概率最高。

2. 尺度不变性(Scale Invariance)

本福特定律具有一个独特的数学性质:

如果一个分布满足本福特定律,那么把数据乘以任意常数(比如单位换算)之后,仍然服从本福特定律。

这说明它并不是依赖具体数值的某种“人为模式”,而是内在的数学结构


3. 跨数量级数据更容易出现本福特分布

当数据分布跨越多个数量级(如从几元到几百万),例如城市人口、公司收入、股票价格,它们首位数字的分布往往就会趋近于 Benford 分布。


4. 由多个分布叠加形成的混合分布

研究还发现,即使一组数据本身不服从 Benford 分布,如果你把多个不同分布的数据组合起来(比如几个不同国家的人口数据),结果也会接近 Benford 分布。

这说明 Benford 分布是一个稳定吸引子(statistical attractor),就像中心极限定理中的正态分布那样。


✅ 总结:

本福特定律背后的核心是:

  • 对数分布
  • 跨数量级
  • 缩放不变性
  • 混合性

这就解释了为什么它在自然界和经济社会中如此普遍。


用户:
现实世界中大量数据(如收入、城市人口、股票价格)遵循乘法增长(指数增长)或比例变动,而不是线性增长。看起来这个才是本福特定律的本质原因,但是好像没法解释超市商品价格也符合这个定律。

ChatGPT:
你观察得非常敏锐,指出了一个关键的张力点

如果本福特定律源于“指数增长”,那为什么像超市商品价格这种没有明显“乘法增长”的数据,也符合本福特定律?

这个问题其实是本福特定律研究中一个长期讨论的核心点,也正是它“神秘感”最强的地方之一


🧠 回应你的疑问:超市价格为什么也符合本福特定律?

✅ 关键:并不是数据本身必须“指数增长”,而是其来源过程是“跨数量级且多样性足够高”的。

超市商品价格不是单一机制驱动的,而是:

  • 有的几毛钱(泡面)
  • 有的几块钱(牛奶)
  • 有的几十块(米、油)
  • 有的上百(酒、保健品)

也就是说:

商品价格分布跨越了多个数量级,且商品种类繁多,各定价策略各异,形成了一个类似“自然随机采样”或“多个分布叠加”的数据结构。


📘 背后理论:混合分布(Mixture Distribution)解释

研究发现:

只要你从不同分布、不同来源中采样数据,且这些数据跨越多个数量级,它们的“首位数字”往往也趋向本福特分布。

这种效果称为:

scale-mix invariance(比例混合下的不变性)


🎯 结论:

本福特定律的本质并不只是“指数增长”,而是“跨数量级的多样性 + 对数尺度下的自然均匀性”

这包括:

  1. 比例驱动(乘法效应、指数增长)
  2. 混合分布(多个生成机制)
  3. 数量级跨度(覆盖多个数量级)
  4. 对数尺度均匀性(log空间内等概率)

用户:
你答案已经非常明确了,我说说我的想法,现在看来是有问题的,你帮我指出问题:

我刚开始以为本福特定律刚开始的数字频率高,是因为是采用十进制的原因,导致前面数字频率高,现在看来,如果这个世界的计数方式改成六进制,依旧是前面的数字出现频率高,在帮我分析下,1出现的概率会怎么变,十进制下1到9的概率符合什么曲线,六进制下又符合什么曲线。

ChatGPT:
你提出的思路非常自然,而且很多人在初学本福特定律时都会有类似直觉:

“是不是因为我们使用的是十进制,才导致数字‘1’出现得特别多?”

你也很清楚地意识到这个观点并不完全正确,并开始探索在不同进制下的情况。


✅ 正确的点:

确实,如果我们改用其他进制(如六进制、十六进制),首位数字的频率会不同,但 Benford 定律依旧成立。


❌ 问题点:

并不是因为“1”在十进制里靠前,它就会频繁出现。

Benford 分布中的高频“1”,是因为:

在对数空间中,log₁₀(1)~log₁₀(2) 区间最大,所占“比例区间”最长 → 所以“1”出现最多


📐 数学表达式:任意进制 Benford 分布公式

对于任意进制 ( b \geq 3 ),首位数字为 ( d \in {1, 2, …, b-1} ) 的概率为:

$$
P(d) = \log_b\left(1 + \frac{1}{d} \right)
$$


📊 十进制 vs 六进制分布对比

🔟 十进制:

首位数字 概率
1 0.30103
2 0.17609
3 0.12494
4 0.09691
5 0.07918
6 0.06695
7 0.05799
8 0.05115
9 0.04576

🧮 六进制:

首位数字 概率(log₆) 约值
1 log₆(2) ≈ 0.38685
2 log₆(1.5) ≈ 0.22239
3 log₆(1.333) ≈ 0.15474
4 log₆(1.25) ≈ 0.11806
5 log₆(1.2) ≈ 0.09800

🧠 延伸:二进制是否适用?

在二进制中,去除前导0后,所有合法数字的首位一定是1,因此Benford 分布在二进制中无意义


用户:
写一下吧。

ChatGPT:
当然可以,下面是一个简单的 Python 脚本,可以输出任意进制下的 Benford 分布:

import math

def benford_distribution(base):
    if base < 3:
        raise ValueError("进制必须 >= 3,本福特定律至少需要两个不同的首位数字。")

    print(f"本福特定律在 {base} 进制下的首位数字分布:\n")
    print(f"{'首位数字':^10} | {'概率 (log_'+str(base)+')':^25} | {'概率 (十进制约值)':^20}")
    print("-" * 60)

    for d in range(1, base):
        prob = math.log(1 + 1/d, base)
        print(f"{d:^10} | {f'log_{base}(1+1/{d})':^25} | {prob:>20.5f}")

# 示例:十进制
benford_distribution(10)

# 示例:六进制
print("\n" + "="*60 + "\n")
benford_distribution(6)