同じ誕生日のパラドックス part2 | 数学アラカルト [実践] | 逆ポーランド電卓の実践ウェブ rpn hacks!

逆ポーランド電卓の実践ウェブ rpn hacks!

逆ポーランド電卓rpnの実践ウェブ   
rpn hacks! アールピーエヌ・ハックスサイトマップ

rpn | 実戦 | 数学アラカルト | 数学に関する話題をrpnで探求!数字と遊んでみよう。

HOME > 実践 > 数学アラカルト > 同じ誕生日のパラドックス part2 hatena yahoo buzzurl livedoor del.icio.us nifty newsing twitter facebook rss ソーシャルブックマーク

同じ誕生日のパラドックス part2

前のページに戻るLinkIcon

 二人の誕生日が一致する確率は簡単です。前ページにあるように365分の1の確率です。では3人の場合はどうなるのでしょう。

                               ○
  ○    ○       1           ・ | ・
  |・ ・ |  ⇒  ---     ○ ・   人   ・ ○  ⇒ 何%
  人    人      365     | . . .  . . |
                        人            人


3人のうちで少なくとも1つのペアの誕生日が一致する確率を求めるときは、3人全員の誕生日が一致しない確率を求めて、100%から引けば求めることができます。

      364   363
  1 - --- * ---  = 3人うちで少なくとも一組の誕生日が同じ確率
      365   365
    (2人目)(3人目)


rpn式にすると次のようになります。

  >rpn 1 364 365 / 363 365 / * -
  0.00820417


約0.8%ですね。この調子で10人、20人、30人、40人、50人、60人と計算していけば、数学的に確率が計算できるのですが、なんとも数式を入力するのが面倒ですね。もっと楽な方法はないでしょうか。

誕生日が同じ確率を求める数式

 やはり、先人は誕生日が同じ人がいる確率を出す数式を作っています。それは以下の数式なのですが、1からn人の人全ての誕生日が異なる確率を引いて求めています。

                365!
  p = 1 - ----------------
             n
          365 ・ (365 - n)!


対応するrpn式は以下のとおりです。10人のうちで誕生日が同じ確率を求めています。

  >rpn 10 #n 1 365 ! 360 @n p 365 @n - ! * / -


rpn式の「10 #n」の部分を変更して「20 #n」なら20人の場合です。これなら変更点も一箇所なので、簡単に求めることができますね。

ところが、この方法ではうまく計算できません。数式中の365の階乗が大きすぎて、rpnでは扱えずに以下のようにエラーが発生します。

  Floating exception: Overflow


誕生日が同じ確率をrpnで計算

 そこで、基本に立ち返って1行プログラミングで解決します。次の繰り返しオプションを使ったrpn式なら問題なく計算できます。

  >rpn @n 365 / @s * #s @n 1 - #n -b 365 #n 1 #s -e 1 @s - -r 10


最後にある繰り返しオプションの「-r 10」の部分を変えれば計算できます。ちなみに3人の場合は以下のとおりです。

  >rpn @n 365 / @s * #s @n 1 - #n -b 365 #n 1 #s -e 1 @s - -r 3
  0.00820417


計算結果は、冒頭の3人の確率と同じになっていますよね。

数学的に求めた一致確率とグラフ

 この式を使って10人から60人までの誕生日が同じ確率を求めていきましょう。1行目を入力実行したら、2行目からはキーボードのF8キーを押せば簡単に入力できます。

  >rpn @n 365 / @s * #s @n 1 - #n -b 365 #n 1 #s -e 1 @s - -r 10 >ratio2
  >rpn @n 365 / @s * #s @n 1 - #n -b 365 #n 1 #s -e 1 @s - -r 20 >>ratio2
  >rpn @n 365 / @s * #s @n 1 - #n -b 365 #n 1 #s -e 1 @s - -r 30 >>ratio2
  >rpn @n 365 / @s * #s @n 1 - #n -b 365 #n 1 #s -e 1 @s - -r 40 >>ratio2
  >rpn @n 365 / @s * #s @n 1 - #n -b 365 #n 1 #s -e 1 @s - -r 50 >>ratio2
  >rpn @n 365 / @s * #s @n 1 - #n -b 365 #n 1 #s -e 1 @s - -r 60 >>ratio2


今度はratio2ファイルに計算結果を格納してあります。シミュレーションのときと同様に数値とグラフを見てみましょう。

  >type ratio2
  0.116948
  0.411438
  0.706316
  0.891232
  0.970374
  0.994123


  >rpn 1 -c rownum <ratio2 | xyp -x,6 -y,1 -s1,.25 -m | npd
  ^y 100%                         *      *
  |                         *
  |
  - 75%
  |                  *
  |
  |
  - 50% ・・・・・・・・・
  |            *・
  |             ・
  |             ・
  - 25%         ・
  |             ・
  |     *       ・
  |o            ・                        x
  +-----|------|-----|------|------|----->
       10人   20人  30人  40人    50人   60人


これが数学的に確率計算した、誕生日が一致する確率のグラフです。心なしか曲線が綺麗に見えます。20人では50%に届いていないことが分かります。

次に以下のrpn式で増加率を見てみると、10から20人で急激に確率が増えていることが分かります。

  >rpn -c rowdiv <ratio2
  3.51813
  1.7167
  1.2618
  1.0888
  1.02447


10人から20人になると3.5倍も確率が上がっています。その後は段々と増加率が減っていきますが、50人にもなると実に97%の確率で誕生日が一致します。60人ならほぼ100%です。

とすると学校の1クラスに同じ誕生日の子供が、少なくとも1組いるのは間違いないということになりますね(自分の好きな子と同じ誕生日の確率は相変わらず0.3%ですが)。

シミュレーションと確率計算の違い

 それでは、先ほどのシミュレーションのグラフと重ねてみましょう。

  ^y 100%                         *      *
  |                         *     +
  |
  - 75%
  |                  *
  |
  |
  - 50%        +
  |            *
  |
  |
  - 25%
  |
  |     *
  |o                                     x
  +-----|------|-----|------|------|----->
       10人   20人  30人  40人    50人   60人


"*"が理論値で"+"がシミュレーション値です。20人と50人の部分でズレを確認できますね。実際に誤差はどれくらいあるのでしょうか。ratioとratio2ファイルを横結合してみます。

  >paste ratio ratio2
  0.1     0.116948
  0.48    0.411438
  0.71    0.706316
  0.91    0.891232
  0.93    0.970374
  1       0.994123


大体は一致していることが分かります。100回くらいの試行で十分に近似しているように思えます。次に誤差百分率を求めてみましょう。

  >paste ratio ratio2 | rpn -c err
  -0.16948
  0.142837
  0.00518873
  0.0206242
  -0.0434129
  0.005877


大きい部分で17%の誤差ですね。小さいところでは0.5%程度です。

数学者と将校の話

 さて、前ページの冒頭に挙げた話ですが、登場人物は数学者本人と将校22人でした。つまり、全員で23人です。そして窮地を救ったウェイトレスが24人目ということでしたね。

では、そもそも23人のうちで誕生日が同じ確率はいくらだったのでしょう。

  >rpn @n 365 / @s * #s @n 1 - #n -b 365 #n 1 #s -e 1 @s - -r 23
  0.507297


なんとフィフティー・フィフティーです。50%をちょっと超える程度の確率で、22人の将校を前に誕生日が同じ人がいることを実証しようとしたのですから、かなりのギャンブラーですよね。いなかったらどうするつもりだったのでしょうか。

24人だとしても確率は0.538344ですから、そんなに増えるわけではありません。やはり、数学者はウェイトレスに感謝しないといけませんね。

        *


 逆に考えると、いわゆる統計的に有意だと考えられるポイントが5%ですから、たったの6人のうちで同じ誕生日の人がいたら統計的にも希な可能性があります。ただし、サンプル数が6人だと少なすぎて話にならないかもしれません。

  >rpn @n 365 / @s * #s @n 1 - #n -b 365 #n 1 #s -e 1 @s - -r 6
  0.0404625
  >rpn @n 365 / @s * #s @n 1 - #n -b 365 #n 1 #s -e 1 @s - -r 7
  0.0562357


計算すると7人で5%を超えていますね。

あなたは誰かの生まれ変わり

ちなみに誕生日が一致する確率は、死亡日が一致する確率と同じです。つまり、一生に一度しか起こらないイベントの発生日が同じ確率を表しているわけです。人数が増えれば増えるほど同じ日になる確率は増えていきます。

ある人の死んだ日と別のある人の生まれた日が同じことを取り上げて、生まれ変わりだと言う占い師もいますが、歴史上の有名人はたくさんいます。世界中に視野を広げると数千人はいます。とすると、一致する確率は限りなく100%に近くなることが分かりますよね。

そして、恋のキューピットになりたいなら…

 コンパでもクラス会でも何でも良いのですが、ある程度以上の人数がいると誕生日が一致する確率は高くなることが分かりました。すると…。

事前に参加メンバーの誕生日を調べておきます。同じ誕生日のペアの片方に近づき、もう一方の人を指差して、”あの人の誕生日をそれとなく聞いて来て”と頼みます(理由は適当に作って)。しばらくして、きっと聞こえてくるのが、先ほどのセリフです。

  • 「エェーッ!同じ誕生日?こんな偶然は滅多にないよ。きっと運命だね」

この一言で、心が動かない人はいないでしょう。

実践数学アラカルトに戻るLinkIcon

情報誕生日の曜日に関する記事として、実践コーナー(統計アラカルト)の生まれる曜日は神様次第があります。興味のある人は参考にしてください。

警告rpnプログラムを実行するには、rpn試用版かrpn標準版が必要です(バージョンの違いはこちら)。

情報pasteは講座サポートで公開されています。rownum, rowdivはカンタン分析パッケージに同梱されています。errはビジネス統計(単回帰編)に同梱されています。xypとnpdはrpnの姉妹ソフトウェアです。詳しくはプロダクトを参照ください。

数学アラカルト

数字と遊んでみよう

※実践コーナーのTOP

紹介 rpnの利用シーンはこちら…

講座初めての人のrpn基礎もどうぞ
講座しっかり学べるrpn入門もどうぞ
講座すぐに使えるdos入門もどうぞ

実践他の分野への挑戦は実践TOP

応用rpnアプリケーションは応用TOP

part2

数字と遊んでみよう

※実践コーナーのTOP

講座初めての人のrpn基礎もどうぞ
講座しっかり学べるrpn入門もどうぞ
講座すぐに使えるdos入門もどうぞ

実践他の分野への挑戦は実践TOP

応用rpnアプリケーションは応用TOP

書籍紹介

記事に関連した書籍

本ウェブサイトで扱った話題に関連した書物で、スタッフが実際に読了したものを紹介。

書籍数学の書籍
数の世界は思ったよりもエキサイティング。

  • 書籍統計の書籍
  • ビジネスで統計が使えるととっても有利。

書籍投資の書籍
失敗しない投資には広範囲で実践的な知識が必要。

警告バックスラッシュはエンマークに読み替えてください( IEのみ)。
バックスラッシュとエンマーク

警告文字で作られた図表や式が崩れることがあります。ブラウザによっては固定幅フォントをMSゴシックにするときれいに表示されます。それでも崩れる場合は図表や式をメモ帳にコピー後、閲覧下さい。

警告rpn試用版と標準版(2kリビジョン)はダブルクォートで囲ってください。

rpn 1 2 + ⇒ rpn "1 2 +"
rpn 1 -c foo ⇒ rpn "1" -c "foo"

ダブルクォートは省略できることが多いのですが、慣れない間は囲んだほうが無難です。なお、本ウェブサイトの記事ではrpn標準版(98リビジョン)を使用しているため囲っていません。詳しくは技術サポートの「rpn TIPS参照ください。

注意rpnの障害情報はこちら

警告rpn試用版の場合、複雑なプログラムや処理時間のかかるプログラムの一部には動作しないものがあるかもしれません。あくまで無料提供であることを勘案・了承ください。rpn標準版は、すべてのプログラムが動作します。