ウソの数字を見破る方法
数字とは不思議なもので、1881年に天文学者のサイモン・ニューカムは対数表の最初の部分(1で始まる)が他の部分よりも手垢で汚れていることに気が付きました。そこで、世の中にある数値の最初の数字の出現には偏りがあるのではという疑問を感じ、探求し始めたのです。
結果は驚くべきものでした。単純に考えれば1から9の数字が均等に出現しているような気がします。しかし、その出現には明白な偏りがあり、1が約30%の出現率、2で約18%でした。これは世の中の数字の半分は、先頭が1か2だということを意味します。
そんなバカなと思うのが素直な感覚でしょう。しかし、この数字の偏りは領収書の金額から川の長さ、物理や数学の定数、人口…様々な数値で確認されているから驚きです。この法則は1938年に物理学者のベンフォードに再発見され、今ではベンフォードの法則と言われています。
ベンフォードの法則の定義
先にベンフォードの法則を定義しておきます。この法則は基底がb(b≧2)の時に先頭の桁の数字が出現する確率は、P(d)=logb(d+1)-logb(d)に従うというものです。
底が10の場合(10進数のこと)、ベンフォードの法則のとおりだとすると先頭の桁の数字の分布は以下のようになります。なお、dは最初の数字、pは出現確率とします。
p(d) = log (d + 1) - log (d) = log (1 + ---)
10 10 10 n
この式をrpnで1から9まで繰り返して計算してみます。
0.30103
0.176091
0.124939
0.09691
0.0791812
0.0669468
0.0579919
0.0511525
0.0457575
9行の計算結果が表示されましたが、1行目から順に最初の数字が1から9の時の出現確率です。結果を見ると、1の出現確率は30.1%、2は17.6%、3は12.5%、9は4.6%であることが分かります。グラフで確認してみましょう。
>rpn 1 -c rownum <tmp | xyp -x,9 -y,.5 -s1,.1 -n -m
^y 0.5
|
0.4
|
|
0.3 *
|
|
0.2
| *
|
0.1 *
| * * *
| * * *
|o 9
+---1---2----3---4----5---6----7---8--->
1と2で50%弱の出現率です。そのあと急速に出現率が減っていく様子が分かります。
ベンフォードの法則の一般化
このベンフォードの法則ですが、一般化するとより面白くなります。上記の例は最初の数字1桁でしたが、最初から3桁の数字が"123"である確率を求めることもできます。その数式は以下のとおりです。nに123を当てはめるだけです。
log (1 + ---)
123
rpn式にすると以下になります。
0.00351657
数字が"123"で始まる確率は0.35%ということです。では、数字が"987"で始まる確率はいくらでしょうか。
0.000439792
ベンフォードの法則から考えれば当然の結果ですが、確率はとても小さく0.04%になります。
ベンフォードの法則を検証する
冒頭に記したように、ベンフォードの法則は領収書の数字、川の長さ、人口に加えて番地、株価に至るまで適用できるそうです。そして、フィボナッチの数列や最近では素数でさえも、ベンフォードの法則に従っているという話があります。
実用面では、会計の不正検知にも利用できるようで、幅広い活用の可能性があります。是非、本当かどうか試したいものです。
そこで、データの先頭数字がベンフォードの法則に従っているかどうかを検証してみます。検証する対象は、領収書の金額、フィボナッチ数列、株価の3つです。それぞれ、適合度検定を使って統計的に調べることで、曖昧のない判定を目指します。
領収書とベンフォードの法則
まず、領収書です。手元にあった領収書660件の金額を入力してみました。果たして、この金額の先頭の数字はベンフォードの法則にしたがっているのでしょうか。
領収書の金額を縦一列にしたデータがファイルのreceipt.datに格納されているものとします。
1392
3765
8370
1430
3480
2159
:
(中略)
:
540
890
4408
2140
2358
このファイルに格納された金額の先頭1桁数字をピックアップします。先頭の数字をピックアップするためにbenfordというrpnプログラムを用意します。以下の例では、ランダムに生成した数字の先頭1数字をピックアップしています(同じ乱数を発生させるために-1で初期化)。
39 80 47 16
71 34 7 5
4 49 41 20
80 86 54 81
7 68 99 27
>rpn 100 ? -b -1 ? -r 20 | rpn 5 -c fold | rpn -c benford
3 8 4 1
7 3 7 5
4 4 4 2
8 8 5 8
7 6 9 2
このようにbenfordプログラムは、n行m列のマトリクス型のデータ形式にも対応しています。それでは、以下のrpn式でそれぞれの数字ごとに、一気に度数カウントしましょう。
これでreceipt.frqに数字の度数分布が格納されているはずです。ファイル内容を確認してみます。
1 216
2 184
3 95
4 57
5 31
6 25
7 12
8 21
9 19
結果を見ると1から9へ向かって、急激に度数が減っていることが分かります。一目で一様分布でないことが見てとれます。では、次にそれぞれの数字の構成比を調べます。以下のrpn式ですぐに計算できます。
0.327273
0.278788
0.143939
0.0863636
0.0469697
0.0378788
0.0181818
0.0318182
0.0287879
数字の1の構成比が約33%、数字の2が約28%です。9の構成比は3%に過ぎません。全体の雰囲気はベンフォードの法則に近いものがあります。実際にベンフォードの数式から理論値を計算して見比べてみましょう。
>rpn x _ -c rowele <receipt.frq >tmp2
これでtmp1に理論値が、tmp2に実測値の構成比が格納されました。内容を確認します。
0.30103 0.327273
0.176091 0.278788
0.124939 0.143939
0.09691 0.0863636
0.0791812 0.0469697
0.0669468 0.0378788
0.0579919 0.0181818
0.0511525 0.0318182
0.0457575 0.0287879
数字の2の構成比に違いがあるようですが、かなり似ているように思います。グラフ化して確認してみましょう。
^y 0.4
|
0.3 +
| *
| +
|
|
0.2
| *
| +
| *
0.1 +
| * * *
| + + + +
|o + 9
+---1---2----3---4----5---6----7---8--->
縦軸が構成比、横軸が数字の1から9です。そして、"*"が理論値で"+"が実測時になります。数字の2の部分にはズレがありますが、見た目にはかなりの一致です。ベンフォードの法則など全く意識すべくもない領収書の先頭数字が、こんなにも法則と似ているのかと驚きます。
では、見た目の判断だけではなく統計的に検定してみましょう。検定はχ2乗分布を使った適合度検定です。なお、帰無仮説は「領収書金額の先頭の1桁数字の出現度数はベンフォードの法則に従って割り振った度数と等しい」とします。
>rpn -c sum <his1
660
>rpn 660 * <tmp1 >his2
>paste his1 his2 | rpn -c tstfit
87.6964
計算の結果、統計検定量は87.7でした。自由度を8として上側確率0.05のχ2値である15.51を使います。検定量と比較すると、87.7>15.51で帰無仮説が棄却されます。つまり、領収書の分布はベンフォードの法則と一致しているとは認められません。
ただ、χ2乗検定はデータ量が多ければそれだけ棄却されやすくなります。ちなみにscaleプログラムを使って、それぞれの度数を1/10にして再検定してみましょう。結果は以下のようになります。
8.76964
χ2乗検定の場合、データ数が多いと帰無仮説が棄却されやすくなります(有意差が出やすい)。検出力が上がったとも考えられるのですが、データ数の多少によって仮説の棄却・保留を調節できることは、人為的な操作の可能性も意味します。適合度検定の解釈には注意が必要です。
今度は無難な値が出てきます。データ数も60以上ありますし、この値なら統計的にはベンフォードの法則との違いは見られないと考えていいでしょう。
χ2乗の分布表はビジネス統計(推定編)の分布表の見方にあります。
次は…
グラフを見る限り、領収書の事例ではベンフォードの法則が利いているようですが、統計的には微妙な結果になりました。1/10にしてもデータ数は十分なので、法則への近似度は高いだろうと考えられます。
ところで、領収書は市場にある様々な品物やサービスを購入したものです。もしかしたら、1000円よりも980円が多いように価格帯によっては、何らかの傾向が発生しているかもしれません。
それでは、フィボナッチ数列のような自然科学的なものはどうでしょう。そして、株価のように際限なく人間の欲望が絡むようなものに対してはどうでしょう。ベンフォードの法則は成り立つのでしょうか。
rpnプログラムを実行するには、rpn試用版かrpn標準版が必要です(バージョンの違いはこちら)。
pasteは講座サポートで公開されています。rownum, roweleはカンタン分析パッケージに同梱されています。foldはユーティリティーパッケージに同梱されています。freq, scaleはrpnマイスターパッケージに同梱されています。tstfitはビジネス統計(検定編)に同梱されています。xypとnpdはrpnの姉妹ソフトウェアです。詳しくはプロダクトを参照ください。