ベンフォードの法則について
概要
- ベンフォードの法則(Benford’s law)とは、自然現象や経済データなど、さまざまなデータにおいて、最初の数字が1である確率が高いという法則のこと
数学的な説明
- 自然現象や経済データは、対数を取ると一様に分布することが多い
- つまり、一様分布の対数を取ると、最初の数字が1である確率が高くなる
シミュレーション
import numpy as np
import matplotlib.pyplot as plt
# サンプル数
num_samples = 100000
# 一様分布から乱数を生成(範囲は0から100)
uniform_random_numbers = np.random.uniform(0, 100, num_samples)
# 指数関数を適用
exp_numbers = np.exp(uniform_random_numbers)
# 先頭数字を取得
leading_digits = [int(str(num)[0]) for num in exp_numbers]
# 先頭数字の出現頻度を計算
digit_counts = [leading_digits.count(digit) for digit in range(1, 10)]
# ベンフォードの法則の理論値
benford_probs = [np.log10(1 + 1/d) for d in range(1, 10)]
benford_counts = [p * num_samples for p in benford_probs]
# グラフで比較
digits = range(1, 10)
plt.bar(digits, digit_counts, alpha=0.5, label='シミュレーション結果')
plt.plot(digits, benford_counts, 'ro-', label='ベンフォードの法則')
plt.xlabel('先頭数字')
plt.ylabel('出現頻度')
plt.legend()
plt.show()