【数学?】めったにおこらないことの確率って‥‥

人間はめったにおこらないことの確率を正確に見積もれないらしい。。。: まるちゃんの情報セキュリティ気まぐれ日記
今日のネタは、セキュリティホール memo - 2008.04さんから。

もともとの話は、J-SOX法に関することですが、そこに関しては語れるほど知識を持っていないので、目に留まった部分「めったにおこらないことの確率の見積もり」だけを取り出して勝手に書いてみる。

人間の直感で確率を見積もると、実際の値とはまったく違うかもしれません、ということの、わかりやすい例が4つほどリンク先にあるわけで。
問題1〜3までは有名でもあるし、想像とのズレはそこまで大きくはないかもしれないので割愛して。
問題4を引用。

問題4.ウイルス感染検査
 いま、1万人に1人の割合で感染しているウイルスがあるとする。あなたがこのウイルスの感染検査を受けたところ、「陽性(感染している)」と判定された。
 この検査の精度は99%であり、誤った判定をくだす可能性はわずか1%しかないという。このとき、あなたが感染している確率は何%だろうか?
 50%より大きいだろうか、それとも50%より小さいだろうか?

実際にこんな目にあったらゆっくり考えるどころじゃないだろうけど、ちょっとゆっくり考えてみると、たしかにこれは「直感」とはえらく違う。
「条件付き確率」の例題みたいなものなので、数学が得意なひとは即座に答えが導けるかもしれないけど、せっかくなのでちょっとスクリプトで実験してみよう。
やってることは単純で、

  • 50万人のひとを並ばせて
  • 順番に1/10000のクジをひいてもらい、当たりなら感染者
  • さらに1/100のクジをひいてもらい、当たりなら検査で間違い
  • 感染者で陽性、感染者で陰性、非感染者で陽性、非感染者で陰性の4パターンに、何人ずつがあてはまるか表示

というもの。
えぇ、なんだ、要は3/28の日記でさらっと説明したモンテカルロ法なわけだ。
実験方法は簡単、以下のコードを選択・コピーして、ブラウザのアドレス欄に貼り付け、Enterを押すだけ。
以下、そのコードを貼る前に、注意。

  • コードは安全だと思いますが、実行は自己責任で
  • このブログ(と、わたし自身)を信頼できないと思うなら、実行しないほうがいいです(皮肉ではなく、一般的なセキュリティの話として)
  • 安全とは言ったものの、50万回の計算をさせているので、マシンパワーによってはフリーズするかも
  • なので、ほかのページを開いているならすべて閉じて、応答なしになっても強制終了できるようにすること推奨
  • 途中で、「このスクリプトの実行を中止しますか?」の表示がでてきたら、「いいえ」で続行(そのうち終わります)
  • こっちでやった実験結果を下に書くので、無理に実験する必要もないです

そんなわけで、以下、コード。トリプルクリックで、コード全体が選択できる、はず。

javascript:var x1,x2,y1,y2;x1=x2=y1=y2=0;for(var i=0;i<500000;i++){if(check(10000)) if(check(100)) x2++; else x1++;else if(check(100)) y1++;else y2++;}disp();function check(n){var ret;if(Math.random()*n<1) ret=true;else ret=false;return ret;}function disp(){alert("\t陽性\t陰性\n感染者\t"+x1.toString()+"\t"+x2.toString()+"\n非感染者\t"+y1.toString()+"\t"+y2.toString()+"\n\n陽性判定"+(x1+y1).toString()+"人のうち、実際の感染者"+x1.toString()+"("+(x1/(x1+y1)*100).toString().substr(0,5)+"%)");}

これを実行すると、だいたい、こんな結果が表示されるかと。

     陽性  陰性
感染者  51   1
非感染者 5012  494936 

というわけで、もし「陽性」と判定されても、実際に感染している確率は1%ていどなわけで、よかったね。


‥‥とは言ったけれど。
これはあくまで、「めったにおこらない確率は、直感では見積もりにくい」ということを表す例なので、現実がこんなに簡単にいくわけでもないことは、押さえておかないといけないわけで。
「感染者が陰性と判定される」のと「非感染者が陽性と判定される」のが、同じ確率だとして計算したわけけど、実際にはそんなわけもなく。
そのときどきで「本当に必要なことはなにか」を考慮したうえで、検査の精度を決定している、はず。
たとえばこの例なら、基準を厳しくすることで、「感染者が陰性」の確率をできるだけ小さくすることを重視し、「非感染者が陽性」の確率は少しくらい大きくても構わない(再検査すればいいだけ)ようなバランスにするのが適当、なんだろうし。


確率の話に戻ると。
確率と期待値と統計のマジックは、いろいろなところで目にする。
新聞だって、ときどき、印象操作のため用いている場合がある。
有名どころでは、「軍隊の死亡率はニューヨーク市の死亡率より低い」だとか、「バチカン市国の犯罪発生件数/人口比は世界一」だとか。
すべてを疑って生きろとまでは言わないけれど。
数字は嘘をつかないが、嘘をつかなくても人間は騙せるということ、心に刻んでおいたほうがいいのかもしれない。