2022.2.9
松井 健一
株式会社ディー・エヌ・エー + 株式会社 Mobility Technologies
ベータ分布の謎に迫る
DS勉強会発表資料
社外秘
2
⾃⼰紹介(松井 健⼀)
株式会社Mobility Technologies AI技術開発部
データサイエンスグループ グループマネージャー(Kaggle Master)
(株式会社 ディー・エヌ・エーより出向)
最近のプロジェクト
• ドライブデータの解析 (DRIVE CHART)
• https://drive-chart.com
著書
• New!「ワンランク上を⽬指す⼈のためのPython実践活⽤ガイド」共著(2022年3⽉予定)
• 「ソフトウェアデザイン 2020年10⽉号 【第1特集】Pythonではじめる統計学 2-4章」著
• 「アクセンチュアのプロフェッショナルが教える データ・アナリティクス実践講座」共著
経歴
⼤⼿SIer ⇒ ⼤⼿通信キャリア ⇒ 外資系コンサルティングファーム ⇒ 現職
NEW!
第1種ベータ分布を単に「ベータ分布」と呼ぶ場合もある。
その確率密度関数は以下で定義される。
ここで はベータ関数である。
期待値は、 , 分散は
ベータ関数の定義は下記の通り。
ベータ分布とは (Wikipediaより [一部改変])
図の出典: https://ja.wikipedia.org/wiki/ベータ分布
4
一体どういう事象がこの分布に従うのでしょう?
まず、使う変数名を変えて理解しやすくしてみる
xって なんだね。じゃあ試しに確率と解釈してp とおいてみよう!
ベータ関数のtって なんだね。 これも確率と解釈してpに変えてみよう!
ベータ分布の確率密度関数
まず、使う変数名を変えて理解しやすくしてみる
xって なんだね。じゃあ試しに確率と解釈してp とおいてみよう!
ベータ関数のtって なんだね。 これも確率と解釈してpに変えてみよう!
ベータ分布の確率密度関数
同じだ!
まず、使う変数名を変えて理解しやすくしてみる
形が同じなので、ベータ分布の確率密度関数を積分すると1になることがわ
かります。
確率分布は曲線の下の面積が1になるので、
ベータ分布もこの要件を満たしている。
ベータ分布の本質
ということで、分母の は定数、かつ分布の積分を1にするための
正規化定数であることがわかりました。
とりあえず定数なので、下記の通り分子部分だけにしたものと比例関係にあ
り、この右辺の式が本質的な部分です。
ココが本質的
確率分布は曲線の下の面積が1になるので、
ベータ分布もこの要件を満たしている。
ベータ分布の本質
が本質的な形を決めているので、これだけで縦の縮尺以外は
ベータ分布に一致します。
のグラフ
10
(́・ω・) ん?
(́・ω・) よく見るとコイン投げ?
コイン投げ(ベルヌーイ分布)について
さらにこのベルヌーイ施行を n回実施した時の同時確率を考える。
コインを投げて表が出る事象を , 裏が出る事象を とする。
その時の確率分布を下記のように表現する。またこのような試行をベルヌーイ試行
という。
ベルヌーイ分布
… 表が出た時
… 裏が出た時
このように書く場合も。
※ pは表が出る確率を表す。普通のコインならp=0.5になることが予測される。
表は1
裏は0
→ X(表) = 1
X(裏) = 0
→
0 1
コイン投げ(ベルヌーイ分布)について
と表現できます。
n回試行した時の同時確率
表が a回、裏が b回とすると
a=α-1, b=β-1 とすると、ベータ分布に比例したものと同じです!
尤度の考え方
1回の試行の表の出る確率pがあらかじめ定数として決まっていて、
試行の結果の が変数として扱われている。
ただし、式の形が一緒なのですが、意味がかなり異なります。結果が与えられた
後に、密度関数のパラメーターを変更して得られる値を尤度と言います。
ベルヌーイ分布
ベータ分布(に比例したもの)
αとβがパラメーターとして与えられ、pは0〜1の間の値をとる変数。
ベルヌーイ分布の同時確率に対する尤度に見える。
宣伝: 尤度について詳しくは http://qiita.com/kenmatsu4/items/b28d1b3b3d291d0cc698
尤度の考え方
1回の試行の表の出る確率pがあらかじめ定数として決まっていて、
試行の結果の が変数として扱われている。
ただし、式の形が一緒なのですが、意味がかなり異なります。結果が与えられた
後に、密度関数のパラメーターを変更して得られる値を尤度と言います。
ベルヌーイ分布
ベータ分布(に比例したもの)
αとβがパラメーターとして与えられ、pは0〜1の間の値をとる変数。
ベルヌーイ分布の同時確率に対する尤度に見える。
宣伝: 尤度について詳しくは http://qiita.com/kenmatsu4/items/b28d1b3b3d291d0cc698
コインをn回投げ終わって、表のでた回数を知っている状態。
その時、元々の1回あたりの表が出る確率pによって、どれくらい
起こりうる現象であるかを把握するための関数。(なのpを引数にと
っている)
何でこんなに回りくどいのかというと、既に事象が発生してしまった
後なので、「確率」とは言えないから。
15
pを確率変数だと思ってみよう
一様分布の順序統計量
[0,1]の一様分布に従う乱数を9個発生させて順番に並び替える
そこで、例えば i=6 番目の乱数が従う分布を考える。
1番目 2番目 3番目 4番目 5番目 6番目 7番目 8番目 9番目
0.137 0.185 0.310 0.483 0.530 0.695 0.731 0.768 0.950
例:
p1 p2 p3 p4 p5 p6 p7 p8 p9
< < < < < < < <
1番目 2番目 3番目 4番目 5番目 6番目 7番目 8番目 9番目
0.137 0.185 0.310 0.483 0.530 0.695 0.731 0.768 0.950
例:
p1 p2 p3 p4 p5 p6 p7 p8 p9
< < < < < < < <
一様分布の順序統計量
これは、下記のような分布に従うことがわかっている。
(n個の乱数を順番に並べてi番目のものというふうに一般化)
(これがなぜなのかはの詳細は巻末のREFERENCEページの「順序統計量」のPDFを参考としてください)
正規化定数
1番目 2番目 3番目 4番目 i 番目 n-1番目 n番目
… …
1番目
2番目
n番目 n-1番目 n-2番目 n-3番目 j 番目
i-1 番目
j-1 番目
前から:
後ろから:
p1 p2 p3 p4 p
pi-1 pi+1 pn-2 pn
<
< < < < <
i-1個 j-1個
ベータ分布の形!
一様分布の順序統計量
1番目 2番目 3番目 4番目 i 番目 n-1番目 n番目
… …
1番目
2番目
n番目 n-1番目 n-2番目 n-3番目 j 番目
i-1 番目
j-1 番目
前から:
後ろから:
p1 p2 p3 p4 p
pi-1 pi+1 pn-2 pn
<
< < < < <
i-1個 j-1個
ここに入る確率が p
i-1個
ここは 1-p
j-1個
一様分布に従う確率変数 により定まる境界線から、
小さい方に i-1個、大きい方に j-1個得られる確率となっている。
一様分布の順序統計量
1番目 2番目 3番目 4番目 i 番目 n-1番目 n番目
… …
1番目
2番目
n番目 n-1番目 n-2番目 n-3番目 j 番目
i-1 番目
j-1 番目
前から:
後ろから:
p1 p2 p3 p4 p
pi-1 pi+1 pn-2 pn
<
< < < < <
i-1個 j-1個
ここに入る確率が p
i-1個
ここは 1-p
j-1個
一様分布に従う確率変数 により定まる境界線から、
小さい方に i-1個、大きい方に j-1個得られる確率となっている。
表の出る確率pのコインを10回投げて、
表がi-1回、裏がj-1回出る確率分布に対する
パラメーター p の確率分布となっている。
一様分布の順序統計量の直感的意味
ベータ関数とガンマ関数と階乗の関係性
また、今回の問題設定では
であることを踏まえて、
、
nが自然数の場合、下記のようにガンマ関数を用いて書き換えられる。
ベータ関数
逆数の関係
正規化定数をどう解釈するかを考えていきます。
一様分布の順序統計量の直感的意味
前ページの結果を用いて、 がベータ分布に書き換えられるとわかる。
※: 正確には、n, i, jを正の実数に拡張している。
つまり、ベータ分布とは、一様乱数をn個発生させ、
それを順番に並び替えて i 番目のものが従う確率分布と言える!
22
シミュレーション & デモンストレーション
@interact(a=(1,15,1), b=(1,15,1))
def draw_norm_dist(a=2, b=2):
set_size = a+b-1
trial_size = 30000
bin_width = 51
def gen_orderd_unif(size):
unif = rd.rand(size) # (0, 1)の一様分布に従う乱数をsize個生成
unif.sort() # 大きさの順に並べる
return unif
# a+b-1個の順番に並べた一様乱数を生成、それをtrial_sizeセット実施して各セットa番目を抜き出す
result = [gen_orderd_unif(set_size)[a-1] for _ in np.arange(trial_size)]
plt.hist(result, bins=np.linspace(0,1,bin_width)) # 結果をヒストグラムで表示
plt.plot(p, st.beta.pdf(p, a, b)*trial_size/bin_width, c="g", lw=3) # ベータ分布の密度関数を表示
plt.show()
Pythonによる乱数を用いたシミュレーションで
も、ヒストグラムが理論的な密度関数に一致して
いることがわかる。
23
シミュレーション & デモンストレーション
様々なaとbの値でもきちんと密度関数とヒストグラムが一致している。
24
REFERENCE
• ベータ分布 (Wikipedia)
https://ja.wikipedia.org/wiki/ベータ分布
• 全ての確率はコイン投げに通ず
http://www.slideshare.net/matsukenbook/japanr-55839355
• 順序統計量
http://mcm-www.jwu.ac.jp/~konno/pdf/statha18.pdf
• 本スライドで使ったPythonコード
https://github.com/matsuken92/Qiita_Contents/blob/master/General/beta-distribution-
analysis.ipynb
25
EOF

ベータ分布の謎に迫る