ベンフォードの法則とは何か
直感を裏切る数学という本を一通り読んでみました
その中でベンフォードの法則というのが面白く、再現実験も理論も割りと簡単にできそうであったので、再現しようと思います
自然界の数字(新聞記事に登場する数字とか)を集めていくと、先頭の文字が1が多く9に行くに従って単調減少していくというものであるそうです
実験 1, 2, 3, 4
- 1. Livedoor newsから表現されている数字をパースして、法則が成り立っているか確認する
- 2. ランダムな確率密度を持つ分布から、値を発生させてその値の先頭のヒストグラムを確認する
- 3. 一様分布から発生させて、その先頭の数字のヒストグラムが、ベンフォードの法則を成り立っていないことを確認する
- 4. 10⁷までの素数の先頭の文字でベンフォードの法則が成り立っていることを確認する
理論と実験でまず実験から行っていきます
理論
最後にWikipediaのふんわりした説明を記します。私は分布のバラ付きみたいなものからなんとなく理解しました
コード
実験1. livedoorニュースの数字表現のカウント
Livedoorニュースからすべて遡れるコーパスを利用して内部に出現する情報をかき集めて数字表現を正規表現ですべて抜き出して、そのヒストグラムを描画します
(コーパスが必要な方は適宜、自己責任でお集めくださいませ)
$ python3 benford-law.py
1 538319
2 534035
3 242387
4 148515
5 132522
6 94042
7 81802
8 80395
9 70890
0 51527
成り立っています(2がなんかあんまり減ってない)
実験2. ランダムな正規分布の組み合わせ
loc, scaleがめちゃくちゃで統一性がないサンプルから、大量の正規分布から発生させられた何らかの可観測なものがあったとします。
それらの先頭の数字をひたすらカウントしていくと、ベンフォードの法則は満たすのでしょうか。
$ python3 norm-distribute.py --mix
1 4484697 0.2802935625
2 1858090 0.116130625
3 1577472 0.098592
4 1525225 0.0953265625
5 1479611 0.0924756875
6 1419577 0.0887235625
7 1341433 0.0838395625
8 1234823 0.0771764375
9 1079072 0.067442
成り立っています
実験3. 一様分布からの発生した乱数
一様分布からは発生しないというお話出会ったと思うので、否定できる結果になれば嬉しいはずです。
$ python3 uniform-generate.py
1 176080 0.11005
2 178256 0.11141
3 175440 0.10965
4 175872 0.10992
5 179888 0.11243
6 178176 0.11136
7 178832 0.11177
8 177744 0.11109
9 179712 0.11232
やっぱり一様分布はダメそうですね
実験4. 素数の先頭の文字
1⁷までの数字の中の素数に関して、先頭の文字のヒストグラムを作成します
$ python3 prime-generate.py
1 80020
2 77025
3 75290
4 74114
5 72951
6 72257
7 71564
8 71038
9 70320
一番きれいに成り立っていますね
理屈. Wikipediaの解説
あんまりまともな資料が見つからなかったのですが、Wikipediaのこの説明が自分には、ああそうなるかも理解するきっかけになりました。
多重確率分布
しかしながら、こうした分布から取った値を混合する、例えば新聞記事から数値を取ってくるなどすれば、再びベンフォードの法則が現れる。これは数学的に証明することができる。もし、確率分布を繰り返しランダムに選び、その選んだ分布からランダムに数値を選べば、得られる数値の集合はベンフォードの法則に従う[5][6]。
スケール不変
分布は不変でなければならない。これはスケール不変ということであり、こうした条件を満たす唯一の分布が対数的に分布しているものである。
このなんとも言えない説明でしたが、少なくとも私には指数的な成長の説明よりもわかりやすくてよかったです。
あらゆる分布を持ちうる(大抵はスケール普遍を仮定できる)事象を重ねれば、そのような現象になるのでしょうね
色々やってみてわかたのですが、別にあるの分布とか絶対法則の分布とかなさそうなので、よくネットで見る確率値などで検定するより、最初にみるのは、ベンフォードの法則が成立しているかどうかが、不正会計や恣意的なデータ操作がないなどのチェックポイントなのかなって思います。