続・統計的な検証手法の話

前回の記事の続きです。続いてしまいました。

二手三手/技巧の統計的な検証手法の話

結論から言えば、前回の記事で書いた正規分布で問題ありません。主にポアソン分布の検討と、近似によって生じる誤差についての話です。グラブル要素はないので、興味のある方だけどうぞ。


なぜ近似する必要があるのか?

そもそも、二項分布は式あるのに、何で誤差が出ることを承知で近似しなきゃいけないのかっていう話です。理由ですが、二項分布では計算量が多すぎて、一般的な環境では計算ができないのです。試行数が3000あたりから無理です。改めて、二項分布での確率質量関数をみてみましょう。

P(x) = c(n, k) * P^k * (1-P)^(n-k)

この式には、組み合わせ数の計算が含まれます。この組み合わせ数の計算が非常に厄介で、試行数 n が増えれば増えるほど値が指数関数的に大きくなっていきます。たとえば、c(20, 10)は184756ですが、試行数を2倍にしたときのc(40,10)では847660528で、4588倍となっています。値がこのように膨れていくと、一般的なコンピュータでは計算できません。

95%信頼区間はこの確率質量関数を積分して求めますので、そもそも確率質量関数の計算ができないということになると、信頼区間も求まらなくなります。ですので、二項分布のままでは計算できないということです。

余談:コンピュータの計算精度

コンピュータは万能ではありません。一般向けの汎用なコンピュータでは計算できる桁数は決まっています。現在、最もよく使われる double (倍精度浮動小数点数) のデータ型では、10^-330 ぐらいから 10^330 ぐらいまでの範囲で、有効桁数を15桁まで表現します。

具体的な例を出すと、例えば170の階乗は、約7.2574 * 10^306 で、10^291 以下の桁は 0 (桁落ち:計算精度に影響) というような結果が出てきます。ですが、171の階乗は double の表現範囲を飛び出しますので、値を表現することができません。Google 電卓で実際に計算してみたのが以下の画像です。171の階乗は、Infinityとなっています。

じゃあ、もっと表現できるデータ型にすればいいじゃんと思うかもしれません。実際に、4倍精度や8倍精度といったデータ型はあります。ですが、一般的なコンピュータでは double の演算までしかCPUが対応していません。これ以上の精度は一般的には必要なく、所謂計算科学といったような分野で、超高精度が要求される問題を解くために専用ハードウェアを作ってやっているような世界です。

二項分布からポアソン分布への近似

ポアソン分布 – Wikipedia

確率 p が小さい場合には正規分布よりポアソン分布への近似のほうが有利なケースがあります。ポアソン分布には、パラメータがλしかありません。ポアソン分布は所与の時間間隔で発生する離散的な事象の確率で、たとえば1日に受け取る電子メールの件数はポアソン分布に従うそうです。

n が大きく p が十分小さい場合、np は適度な大きさとなるため、パラメータ λ = np であるポアソン分布が 二項分布B(n, p) の良好な近似を与える。

確率質量関数は以下になります。分母に k の階乗がありますが、こちらはそもそも横軸に二項分布で言うところの成功数をとりますので、確率 p が十分に小さいという条件下であれば、そんなに大きな値をとりませんので問題ないです。(1%の検証で試行数1000の場合は10がピークになる)

P(x=k) = λ^k * e^(-λ) / k!

正規分布/ポアソン分布への近似の比較

じゃあ、どっちの近似のほうが優れてるの?ってを見ていきます。まずは、試行数 n = 1000 で、確率 p = 0.01 (1%) の時です。上が分布で、下が二項分布の時との誤差です。言わずもがなですが、誤差が少ないほうが優秀な近似です。このケースでは、ポワソン分布のほうが優秀な近似といえるでしょう。

そしてもうひとつ、試行数 n = 1000で、確率 p = 0.1 (10%) の時です。今度は正規分布のほうが誤差が少ないですね。

次に、試行数 n = 1000 に固定して、横軸に確率 p をスイープさせて、95%信頼区間内での誤差量を見ていきます。誤差量は、95%信頼区間内でRMSを取っています。結果は以下です。確率 p = 6% 以上で正規分布近似のほうが優秀になりますね。

この近似ですが、試行数 n を増やすと正規分布の誤差は少なくなっていきます。ですので、基本的には正規分布に従った95%信頼区間の計算を使ってもよいでしょう。(これ以上の試行数は、二項分布の計算がネックで増やせません)

ただ、試行数が少な目で確率が1ケタ%の検証をする場合には、ポアソン分布で近似させたほうが誤差は少ないかと思います。そんなケースはなかなか思いつきませんが!

スクリプト

というわけで、MATLABスクリプトです。需要ない気がするけど、自分の作業記録も兼ねてるので……

 

コメントを残す

メールアドレスが公開されることはありません。