ウソの数字を見破る方法 part2
フィボナッチ数列とベンフォードの法則
次にフィボナッチ数列で確認してみます。フィボナッチ数列は以下のrpn式で簡単に生成できます。とりあえず、1000個生成してみます。
フィボナッチ数列については、応用コーナーのウサギとフィボナッチや実践コーナー(数学アラカルト)の黄金比率とフィボナッチ数列に詳しくあります。
先頭の1桁数字を取り出して、度数をカウントします。以下の例ではfibo.frqに結果が格納されています。
>type fibo.frq
1 301
2 177
3 125
4 96
5 80
6 67
7 56
8 53
9 45
次に数字の1から9までの構成比を計算します。
0.301
0.177
0.125
0.096
0.08
0.067
0.056
0.053
0.045
驚くことに、ほぼベンフォードの法則どおりです。比較してみましょう。
>rpn x _ -c rowele <fibo.frq >tmp2
>paste tmp1 tmp2
0.30103 0.301
0.176091 0.177
0.124939 0.125
0.09691 0.096
0.0791812 0.08
0.0669468 0.067
0.0579919 0.056
0.0511525 0.053
0.0457575 0.045
計算結果を取り違えたのではないかと思うくらいの近似です。グラフ化してみましょう。
^y 0.4
|
0.3
| +
|
|
|
0.2
| +
|
| +
0.1 +
| + + +
| + +
|o 9
+---1---2----3---4----5---6----7---8--->
理論値の"*"と実測値の"+"をプロットしているのですが、後からプロットした"+"の位置が"*"と全く同じなので"+"しか表示されていません。誤差百分率を取ってみても、以下のように0.02%から3.5%の違いしかない一致性です。
0.00996578
0.51621
0.0488238
0.939016
1.03408
0.0794661
3.43479
3.61175
1.65547
誤差がほとんどないので、この分では分布に違いはなさそうですが、度数に換算して適合度検定してみます。なお、帰無仮説は「フィボナッチ数列に出現する先頭の1桁数字の出現度数はベンフォードの分布に等しい」とします。
>rpn 1000 * <tmp1 >his2
>paste his1 his2 | rpn -c tstfit
0.169464
統計検定量は0.16です。自由度8の有意水準%点は15.51なので、15.51>0.16で帰無仮説は棄却されます。統計的にはベンフォードの法則との違いが見られないわけです。
株価とベンフォードの法則
最後に株価とベンフォードの法則について調べてみましょう。1円から理論的には無限大となる株価にも法則は適用できるのでしょうか。
まず、任意の日の日本株式3849銘柄の株価(終値)を収集しました。以下に基本統計量を計算しておきましたが、収集した株価の最安値は1円、最高値は77万8千円、全体の平均株価は15353円でした。歪度と尖度からガウス分布とは似ても似つかない分布であることが分かります(基本統計量に関してはビジネス統計(基礎編)に詳しくあります)。
デ ー タ 3849
最 小 値 1
最 大 値 778000
範 囲 777999
合 計 値(Σ) 5.90955e+07
平 均 値(μ) 15353.5
分 散 値(σ2) 3.24392e+09
標準偏差(σ) 56955.4
分 散 値(s2) 3.24476e+09
標準偏差(s) 56962.8
歪度(a3≒0) 6.82761
尖度(a4≒3) 63.043
変動係数(ν) 3.7101
これらのデータから株価の先頭1桁の数字をピックアップして、度数をカウントします。
>type nikkei.frq
1 1144
2 683
3 511
4 360
5 310
6 268
7 196
8 197
9 180
この段階で一様分布でないことは分かります。では、次に数字の1から9までの構成比を計算してみましょう。
0.29722
0.177449
0.132762
0.0935308
0.0805404
0.0696285
0.0509223
0.0511821
0.0467654
今度も驚くことに、ほぼベンフォードの法則どおりです。早速、ベンフォードの理論値と比較することにしてみましょう。一気にグラフまで描きます。
>rpn x _ -c rowele <nikkei.frq >tmp2
>paste tmp1 tmp2
0.30103 0.29722
0.176091 0.177449
0.124939 0.132762
0.09691 0.0935308
0.0791812 0.0805404
0.0669468 0.0696285
0.0579919 0.0509223
0.0511525 0.0511821
0.0457575 0.0467654
>paste tmp1 tmp2 | rpn 1 -c rownum | xyp -x,9 -y,.4 -k2 -s1,.1 -n -m
^y 0.4
|
0.3
| +
|
|
|
0.2
| +
|
| +
0.1 + +
| * + *
| + + +
|o 9
+---1---2----3---4----5---6----7---8--->
"*"が理論値で、"+"が実測値です。今度は微妙に違いは見られますが、それでもほとんど同じです。帰無仮説を「日経平均株価の先頭の1桁数字の出現度数はベンフォードの分布に等しい」として、度数換算後に適合度検定をしてみましょう。
>rpn -c sum <his1
3849
>rpn 3849 * <tmp1 >his2
>paste his1 his2 | rpn -c tstfit
6.47063
統計検定量は6.5です。これまで同様、有意水準%点は15.51なので、15.51>6.5で帰無仮説は棄却です。つまり、統計的にはベンフォードの法則との違いが見られません。
ベンフォードの法則の適用範囲は広い
検証した結果、領収書は微妙な値でしたが、フィボナッチも株価もベンフォードの法則どおりでした。ほぼ通説どおりの結果ですね。しかし、これほどまでに見事に理論と近似している例は珍しいのではないでしょうか。
数値の桁数が多く幅広く対数分布している場合にベンフォードの法則が成立します(ガウス分布は適合しない)。自然現象以外に多くの場面でベンフォードの法則が利用できるということは、対数が意外に身近なところ(日常、目にする様々な数字)に存在していることを示しています。
ベンフォードの法則には基数と尺度の不変性もあります。つまり、2進数にも8進数にも適用でき、単位が異なるドルや円、リットルやガロンでも法則が成り立つわけです。
ここまで適用範囲の広い法則なら、対象となるデータ集団の度数分布を事前に調べておいて、ベンフォードの法則に従っていることが確認できればしめたものです。
誤差百分率でもいいですし、適合度検定でも構いませんが、管理基準を超えるような異常値があれば何か問題があったと機械的に判断することができます。検出の自動化も可能でしょう。1つか2つ程度の例外を見つけることは困難でも、ある程度例外の度数が集まれば理論値との違いが見えてくるはずです。
例外を見つける場合は、棄却検定が適しています。ビジネス統計(検定編)に詳しくあります。あるいはpackage入門(rpnマイスター)の外れ値(異常値)を参照ください。
実際に、不正な経理・会計の検出にも利用されていると言う話も聞きますが、税務調査や監査の場合は売上の除外等の極端な例は別として、ほとんどは徴収側と納税側の見解の相違を攻めてきます。ベンフォードの法則を使った不正検知はもっと大規模で網羅的に行なうようなケースが適しているのでしょうね。
rpnプログラムを実行するには、rpn試用版かrpn標準版が必要です(バージョンの違いはこちら)。
pasteは講座サポートで公開されています。rownum, roweleはカンタン分析パッケージに同梱されています。freq, statinfoはrpnマイスターパッケージに同梱されています。tstfitはビジネス統計(検定編)に同梱されています。errはビジネス統計(単回帰編)に同梱されています。xypとnpdはrpnの姉妹ソフトウェアです。詳しくはプロダクトを参照ください。