• home
  • about
  • 全ての投稿
  • ソフトウェア・ハードウェアの設定のまとめ
  • 分析関連のまとめ
  • ヘルスケア関連のまとめ
  • 生涯学習関連のまとめ

ベンフォードの法則

date: 2024-10-27 excerpt: ベンフォードの法則について

tag: ベンフォードの法則


ベンフォードの法則について

概要

  • ベンフォードの法則(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()

結果

ベンフォードの法則


ベンフォードの法則 Share Tweet