Apr 30, 2018

火曜日生まれの男の子が...

子供を2人持つ母親に、「火曜日生まれの男の子がいますか?」と聞いたら、「はい」と答えた。もう1人の子供も男の子である確率は?

2010年7月、筆者が数学好きだということを知っていた職場の後輩から、帰り道にこんな問題を、答えは1/2でないという注釈付きで教わった。それに対して、筆者が夜中に結構悩んでやっと問題の意味を理解し、13/27だと計算したと送ったメールを先週発掘したので、今は亡き後輩を偲んでもう一度夜中にやってみたら、結構悩んだ。

例えば、上記の「火曜日生まれ」を取り除いて、問題を

子供を2人持つ母親に、「男の子がいますか?」と聞いたら、「はい」と答えた。もう1人の子供も男の子である確率は?
に変えると、問題の意味がわかってくる。2人の子供のどちらか一方について「男の子ですか?」と聞いたのではないので、もしどちらか一方だけが男の子であれば、この「はい」によって既に答えられているのである。「男の子がいますか?」に「はい」と答えられる確率は1/2ではなく3/4なので、その分、その中でもう1人も男の子である確率は1/2より低くなる。
従って、問題の意味は「少なくとも1人が男の子である」場合の中の「2人とも男の子である」確率であり、答えは(2人とも男の子である確率)÷(少なくとも1人が男の子である確率)= (1/4)÷(3/4) = 1/3ということになる。
図で書くと、次のように表せるだろうか。
少なくとも1人男の子がいるのは黄色部分3パターンであり、その中でもう一人も男の子なのは*部分1パターンだけなので、その確率は1/3である。
つまり、この問題も冒頭の問題も、母集団を限定した確率を問う問題、即ち条件付き確率の問題である。

従って、冒頭の問題の答えは、(1人が火曜生まれの男の子、もう1人も男の子の確率)÷(少なくとも1人が火曜生まれの男の子である確率) = ((1/14)*(1/2) + (1/2)*(1/14) - (1/14)2) / (1 - (1 - 1/14)2) = 13/27 となる。
同じように図で書くと、次のようになる。















男日
男月
男火
男水
男木
男金
男土
女日
女月
女火
女水
女木
女金
女土
母集団が黄色の部分に限定された場合の中の*の割合なので、13/27である。

すっきりして、きっと有名な問題なんだろうなと思って調べてみたら、ネタ元はBBC Newsの2010年6月の記事、"Tuesday boy"だとわかり、次のような問題文が書かれていた。

"I have two children. One is a boy born on a Tuesday. What is the probability I have two boys?"
記事の初めにこれの答えは13/27と書いてあるが、見た瞬間、この問題文だと答えは13/27にはならないのではないかと思った。
その違和感が何に起因するのかがはっきりとわからず、1週間悩んでいる。

冒頭の問題で、「はい」と答えた母親ばかり集めれば、確率は13/27になることは、例えば次のようなプログラム(in Python)でシミュレーションすれは確認できる。

from random import randint

N = 100000
n = 0
hit = 0
while n < N:
    boy1 = randint(0, 1)	# 1: boy, 0: girl
    day1 = randint(1, 7)	# 1: Sun, 2: Mon, 3: Tue, ...
    boy2 = randint(0, 1)
    day2 = randint(1, 7)
    if boy1 == 1 and day1 == 3:
        n += 1
        if boy2 == 1:
            hit += 1
    elif boy2 == 1 and day2 == 3:
        n += 1
        if boy1 == 1:
            hit += 1

print(hit / N)
ではBBC Newsの問題はこのシミュレーションに当てはまるだろうか?と考えると、筆者には当てはまるように思える時もあるし、そうでないように思える時もある。

筆者にとって、BBC Newsの問題の違和感の原因の1つは、"born on a Tuesday"といった情報が親から自発的に付け加えられていることである。これによってもう一方の子が男の子である確率が1/3から変化するのであれば、親がその"a boy"に関する情報をさらに付け加えればまたもう一方の子に関する確率が変化することになる。

"One is a boy"に情報を付け加えれば付け加えるほど、重複する確率が下がり、求める確率は1/2に近づく。「少なくとも一方が」の意味が薄れ、もう一方の子の情報が無くなっていくとも言えよう。そうであれば、用いるべきは最も求める確率を左右する情報である"One is a boy"のみではないか、従って求める確率は1/3ではないかと思えてくる。
逆に、"One is a boy"も自発的に出された情報なので、「少なくとも1人は」男の子という意味で出されたのでない、例えば年上の子など、1人だけについて言ったものかも知れないと考えれば、もう1人については何も情報が無く、答えは1/2のように思える。

それに対し、冒頭の問題では水曜日生まれの男の子がいても「はい」とは答えられなかったので、「火曜日生まれ」という情報を無視することはできないし、どちらの子かを特定せずに質問したので、「少なくとも1人は」火曜日生まれの男の子だということになり、条件付き確率は間違いなく13/27である。

See more ...

Posted at 23:15 in 数学 | WriteBacks (0)
WriteBacks

Apr 08, 2018

データサイズが異なる処理時間の差の検定を考える

あるソフトウェアをバージョンアップしたら、処理時間が少し伸びた。
計測結果は、次のような感じだった。

入力データ処理時間(before)処理時間(after)
1300360
2200180
3100120
4500480
5400440
612001300
7250270
8200210
915001800
1010001100

ぱっと見で明らかに悪化しているが、念の為、統計学的に有意な差であることを示しておこうと思って、Excelの分析ツールの「t検定: 一対の標本による平均の検定」(いわゆる対応のあるt検定)を使ったら、p値が意外と小さくなかった。例えば上記のデータだと両側検定で0.0706となる。
それでも、有意水準を10%とすると有意差ありと言えないことはないので、不本意ながらその結果を付けて報告した。

そのメールを発信した日の帰り道に、このt検定は妥当な計算がなされていないのではないかと疑問に思った。 同じ入力データのセットを使ったのでbeforeとafterで対応があるが、入力データはサイズがまちまちなので、(after-before)の差それぞれは同列に扱えない。(after-before)の単純な差でなく、差分の比率、それぞれ何%増であるかが検定の対象である。 専門的に言うと、t検定は標本の母集団が正規分布に従うのが前提であるが、この(after-before)の差は正規分布に従うはずがないので、t検定を用いるのは不適切だということになるだろう。

もしかして、Excelの分析ツールの「t検定: 一対の標本による平均の検定」はそれも考慮したp値を計算してたりしないだろうか、と期待したが、結果を確かめてみると、一般的な「対応のあるt検定」と同様、
t=\frac{\bar{d}}{s/\sqrt{n}}
(dは対応のある数値の差、dの上のバーは平均、sは不偏標準偏差、nは標本データ数)
というt値と、それに対応する自由度n-1のt分布における外側確率だった。

こういった、差分の比率を検定したいケースはよくあると思うので、何か定番の方法があるのではないかと思って少し探したが、全く見つからなかった。

対応するデータの差分を、正規分布に従うように補正(正規化)してt検定すれば良いのだが、よく考えると、一般的には差分をbeforeの値で割ったものが正規分布に従う保証は無いのである。今回のデータが、計算量が入力データのサイズに比例する処理時間であることがわかっているから、差分をbeforeで割ったら大よそ正規分布に従うという仮定を置けるが、もし計算量のオーダーがO(n)でなくO(n2)だったら、差分のオーダーもO(n2)ならbeforeの平方根で割るべきかも知れないし、差分のオーダーが不明なら正規化のしようが無いかも知れない。

今回は結局、対応するデータの差をbeforeとafterの平均で割ることによって正規化し、t検定をやり直した。単純にbeforeの値で割って正規化しても良いだろうが、before→afterとafter→beforeを対称に扱う為、例えば80→100と100→80が相殺されるようにする為にこのようにした。考え過ぎか。
例えば上記のデータだと、このように正規化して計算すると、両側検定のp値が0.0267となる。

See more ...

Posted at 16:31 in 数学 | WriteBacks (0)
WriteBacks