確率分布1 ベルヌーイ分布

水曜日, 7月 15, 2020

数学

t f B! P L

ゆるっとわかる確率分布

概要

  • 離散型確率分布からはじめるといいよ
  • 今日は一番簡単な離散型確率分布である ベルヌーイ分布 を紹介するよ
  • 連続型確率分布のネガキャンではないよ

離散型と連続型がわかりにくい

結論から言うと離散型から勉強しましょう。
離散型は実は高校で習っているもので、連続型はそれを連続値へ拡張したものです。
 
なのでやっていることはほぼ同じなのですが、一部の数学的な扱いをするところで、離散型では足し算掛け算で済むところを、連続型では積分する必要があり、これが難しさを助長しています。
 
確率分布の数式的にも、連続型のほうが厳しい面をしているものが多いです。


確率分布の式が何を表しているのかわかりにくい

確率分布とは、実現値を代入するとその実現値が起きる確率を返す関数です。
 
関数なんです。例えば、偏りの無いサイコロであれば
 

1 2 3 4 5 6
1/6 1/6 1/6 1/6 1/6 1/6

そのものが
確率分布

f(x)=16x1,2,3,4,5,6 f(x) = \frac{1}{6} \\ x \in {1, 2, 3, 4, 5, 6}

と同じことを表しています。
 
つまり、確率分布とは、ただの実現値と確率の対応表なんですね。めちゃめちゃ簡単やん。
1,2,3,4,5,6という実際の出目が実現値をいいます。他にも観測値や確率変数などと呼ばれます。
 
ちなみに確率分布はチャラい呼び方で、正確には離散型では確率質量関数、連続型では確率密度関数といいます。
 
厳密な名前のほうには、ひとつだけいいことがあって、それははっきりと「関数」と書いてあるところです。やっぱり、関数なんですね!(二回目)
 
なお、当ブログはチャラいブログなので、以降も確率分布といいます。
離散型の話をしているので、確率質量関数のことを指します。


データから確率分布を求める話と、確率分布から確率を求める話と、確率分布からデータをサンプリングする話がわかりにくい

これが一番話しをややこしくしている原因だと思います。

データから確率分布を求める

コイントスで考えます。

O X

ようはこの?の部分が知りたい、というだけです。離散型では表が確率分布そのものなので、これがわかる=確率分布がわかります。
この?の部分を確率分布のパラメータといいます。
 
例えば、10回のコイントスが以下の結果になったとします。
 
X, O, O, O, O, O, X, O, O, O
(O: 表、X:裏)
 
めちゃくちゃ胡散臭い結果ですね。絶対にインチキコインです。
まぁそれはいいんですが、この結果だけをそのまま信じると

O X
8/10 2/10

ということになりますね。
 
Oがでる確率が0.8で、Xがでる確率が0.2なんなのかー
 
ということです。
 
これが「データから確率分布を求める」ところです。これだけです。めっちゃ単純ですね。
 
なお、上記は単純にカウントしただけですが、数式でやることもできて、今、目の前で起きた現象の発生確率が最大になるようなコインの表と裏のでる確率を計算することができます。
 
これはちょっと簡単なのでやってみましょう。
まず、コインの表裏の確率(確率分布のパラメータ)が知りたいのでした。なので変数で置きます。
表と裏しかないので、表がでる確率をppとすると、裏のでる確率は自動的に(1p)(1-p)になりますね。
 
さて表が8回、裏が2回なので、目の前で起きた現象の発生確率(尤度といいます)は以下になります。

L(p)=p8(1p)2 L(p) = p^8(1-p)^2

計算しやすいように対数を取って、

logL(p)=log(p8(1p)2)logL(p)=8logp+2log(1p) logL(p) = log(p^{8}(1-p)^2) \\ logL(p) = 8logp + 2log(1-p) \\

微分して最大値になるppを求めます。

dlogL(p)dp=8p21p=08(1p)=2pp=810 \frac{dlogL(p)}{dp} = \frac{8}{p} - \frac{2}{1-p} = 0 \\ 8(1-p) = 2p \\ p = \frac{8}{10}

単純集計と同じ結果になりましたね。
これは最尤推定(Maximum Likelihood Estimation)というものです。
 
実際には他にも真の確率分布を推定するための色々な数学的テクニックがありますが基本はこれです。

以下の3つの話は結構大事です。


実現値と確率分布のパラメータの違い

実現値のほう(ここでは表or裏)も変数(確率変数)と呼ばれます。
ですが、ここでは実現値(観測値)は既知の定数、確率分布のパラメータppを未知の変数として計算しました。
このように何を求めたいかによって、変数と定数が入れ替わるのがわかりにくいポイントです。


確率分布はどこ?

確率分布の影響がでているのは、確率をpp(1p)(1-p)とおいた部分です。
これ、実は今日紹介するベルヌーイ分布です。
 
実際には、こういう現象で、こういう確率変数を使うなら、分布はこれで、確率はこうおいて、尤度の式はこうなる、というのがだいたい決まっています
三角形なら三角形の面積公式、円なら円の面積公式を使うみたいなノリです。
同じノリで、コイントスの裏表のような、実現値が2つだけの事象であればベルヌーイ分布、という具合です。
 
このような有名なパターンはそんなに数が多くないので余裕で覚えられます。


確率分布のパラメータを求める計算方法はまた別

コイントスの裏表の確率ならベルヌーイ分布、というのは真ですが、コイントスだから最尤推定とか、ベルヌーイ分布だから最尤推定とかいうことは一切ありません。
 
もちろん難しい分布になると、分布によってこの計算手法じゃないと計算できない、みたいな話はありますが、確率分布そのものとその計算方法は基本的には別です。
 
なお、確率分布とは、それっぽいものを、あの手この手で推定するものであり、特に自然現象に関しては真の確率分布なるものがどこかに書いているわけではないです(当たり前だが)。


確率分布から確率を求める話

これは確率分布が関数という話をしたので、確率分布に実現値を代入すればOKです。
 
例えば、前出のコインでは、実現値=表or裏に対して

P()=810,P()=210 P(表)=\frac{8}{10}, P(裏)=\frac{2}{10}

ですね。
 
これを表=1、裏=0として、もうちょっと厳密書くと、ベルヌーイ分布の確率分布は以下の式になります。いわゆるベルヌーイ分布というものは、この式のことを指します。

f(xp)=px(1p)1x f(x | p) = p^x(1-p)^{1-x}

p=8/10p=8/10なので、x=1x=1の場合、x=0x=0場合を考えると、それぞれ上の式と同じ結果になりますね。


確率分布からデータをサンプリングする

確率分布がわかると、その分布を使って疑似データを作る(=サンプリングする)ことができます。
 
データ分析の文脈では、大量のデータ(実データ)からランダムにデータを取り出すことをランダムサンプリングというので、疑似データ生成を指すとなると少し違和感があるかもしれません(が、こういう名前になっているので仕方ない)。
 
でも話は簡単です。
好例はサイコロアプリです。
サイコロはどの目も1/6で出るという確率分布がわかっているので、本物のサイコロがなくても乱数と確率分布を使って擬似的にサイコロの結果を生成できますね。これが確率分布を使ったサンプリングです。
 
本物のサイコロがなくても、サイコロっぽい数字が出力できるのですから、疑似データの生成と言われても納得できますね。
 
上記のインチキコインであれば、乱数を使って8/10の確率で表、2/10の確率で裏を出力するスクリプトを書けば再現可能ですね。
 
もうちょっと具体的にいうと、
[0, 1)区間の一様乱数を発生させ、

  • [0.0, 0.8)なら表
  • [0.8, 1.0)なら裏

とすればいいでしょう。
 
ちょっとむずかしいこと言うと、これっていわゆる逆関数なんです。
さっきまでの確率分布は、実現値を入れたら確率を返す関数でしたが、今回は確率値から実現値を求めています。なので逆であり、逆関数というのはOKだと思います。
 
ただ確率分布そのものの逆関数ではありません。
それは裏の確率が[0.8, 1.0)になっている点。
 
[0.0, 0.8)は表に割り当ててしまったので、残りの[0.8, 1.0)の範囲に、裏の確率を割り当てます。
これを累積分布関数といい、厳密にはサンプリングでは累積分布関数の逆関数を用いて行います。
 
累積分布関数は

  • 実現値=表を入力すると[0.0, 0.8)を出力
  • 実現値=裏を入力すると[0.8, 1.0)を出力

する関数です。
 
サンプリングはこれの逆関数なわけですから、

  • [0.0, 0.8)の範囲の値を入力すると表を出力
  • [0.8, 1.0)の範囲の値を入力すると裏を出力

する関数です。
これはまさにインチキコインの疑似データを生成することのできる関数になります。

  • [0.0, 0.2)なら裏

としてしまうと、表の範囲と被ってしまい、この範囲の乱数が出たときにどっちにして良いか分からなくなります。
 
そうではなく、確率値を長さ1,0の、0.0から1.0までの一つのテープとして捉え、そのテープに各実現値に対応する確率の幅を順番に塗っていくイメージです。
 
そうすると、テープを縦に見たときに、確率の積み上げ、累積になっていることがわかると思います。
 
なので、離散型で特に実現値に順番がない場合は、

  • [0.0, 0.2)なら裏
  • [0.2, 1.0)なら表

という塗り方(積み方)でもOKです。
 
離散型の場合はこのように足し算で済みますが、連続型の場合は、ここで積分が必要になります。
 
ここではとりあえずこういうこともできるよというだけにします。
 
実測値(実データ)→確率分布→サンプリング(疑似データ)
 
という構造は抑えておくと、どこの話をしているのかが理解できて、頭が混乱しにくいです。
 
でもなんで疑似データ?についてはおいおい。


どれが強いかわかりにくい

最後です。
 
勉強は、簡単なものから初めて徐々に難しい内容に進むのが普通です。
 
ところが、確率分布は、授業などで一気にばーっとまとめて羅列で説明されることが多く、しかも

  • 必ずしも簡単な順で紹介していない
  • 授業の都合で一部の分布を省略して教える
  • 上記の離散型と連続型を同時に教える

などのケースがあり、一体どれが基礎的な分布でどれが難しい分布なのかわかりません。
 
これに関してはやや仕方なく、お互いに実際に関連性のない分布もありますし、逆に関連性を示そうとすると説明がとても複雑になる分布もあり、
 
特に分布の名前は見つけた人の名前だったりとか、 かなり適当につけられている ので、名前だけ見てこれは難しい分布だとか、簡単な分布だとかはわかりません。
 
これに対しては明確な解決策はありません。勉強しているうちに自然と関連性を理解するしかないでしょう。
 
ただ、取っ掛かりとしては、離散型確率分布がおすすめです。
いくつかの基礎的な離散型確率分布は、比較的わかりやすい関連性があるので、相互のつながりを含めて理解しやすいです。


ベルヌーイ分布

さて、もう9割上書いてしまったベルヌーイ分布ですが一応説明します。

確率分布を覚える上で抑えておくべきことは

  • どんなデータに使うか(確率変数は何か)
  • 確率分布の式(確率変数に対応する確率の計算式)

の2つだけです。

どんなデータに使うか

ほぼコイントスのイメージそのままでOKです。
 
ベルヌーイ分布で扱う確率変数は、コイントスの表と裏のように、実現値が2つのみの変数です。
 
そして確率分布は、各実現値が生じる確率を表します。
つまり、表が出る確率、裏が出る確率です。
 
二者一択かつ排反が条件なので、表がでる確率をppとすると、裏のでる確率は自動的に(1p)(1-p)とおけますね。
 
確率がめちゃくちゃ偏っていても、実現値が2つならベルヌーイ分布で表すことができます。
例)52枚のトランプからハートのエースを引き当てるか否か


確率分布の式

f(xp)=px(1p)1xx{0,1} f(x | p) = p^x(1-p)^{1-x} \\ x \in \{0, 1\}

これだけ覚えておけば、ppが既知であれば、xxを代入するだけで、個々の実現値の確率の計算ができます。


注意点

ベルヌーイ分布の確率変数は実現値が2つの変数(表or裏など)であり、ppは「1回コイントスしたときに表がでる確率」を表しています。
 
ただ、ppが未知の場合(ppを求める問題)では、問題設定として、コイントスを10回やって表が8回でた、とか書かれています。
 
1回だけじゃないじゃん!と思うかもしれませんが、複数回投げているのはあくまでppの計算のためであって、pp自体は1回のコイントスにおける表がでる確率を表します。
 
逆に1回だけやって表が出たというだけの場合は、上のほうで計算した尤度関数は

L(p)=pL(p) = p

になってしまいます。これを最大にするppとしてp=1.0p=1.0は自明なので、100%表がでるコインになってしまいます。おかしいですし、何よりこんな簡単な問題はでません。
 
もっと素朴に考えると、コイントスの結果を複数回観測したら、そのコインの表がでる確率が何%で、裏がでる確率が何%か?ということは推測できる、というイメージはつくと思います。
 
ただし、この複数回投げるという話が、次で紹介する二項分布にも出てくるので、紛らわしいポイントになっています。


名前をつける

理解できた確率分布に自分なりの名前をつけるといいと思います。「コインの裏表確率についての分布」とかね。

QooQ