ベイズの定理を現実に近い設定で使ってみる記事です。初めに、事前分布などを決めて、計算をしてしまいます。次に、適当な設定で、ベイズの定理を使って予測してみます。
二項分布とベータ分布
今回の記事で使うのは二項分布とベータ分布です。
二項分布は、2種類の結果がある事象を複数回繰り返すような事象をモデル化するときに使われ、以下の表式になっています。
ベータ分布は以下の表式です。
二項分布は、
ガンマ関数は、階乗の一般化だったことを思い出す2と、
ベイズの定理の計算
初めに、ベイズの定理を書いておきます。
計算で楽をするために、
const は、
右辺が確率分布になっていると考えると、ベータ分布
事後確率を最大にする
上の式を解いて、
となります。
ベイズの定理の応用
これまでの計算を使って考えたいのは以下のような問題です。
人がいなくなってしまったので、良品/不良品を仕分けるロボットを導入した。購入する際には、識別率80%くたいですよと言われていたが、導入してみると、識別率は80%もないと感じた。数日分のデータを集めたので、識別率が80%あるのか調べる。
データを20個集めると、正しく識別しているのが15個、間違いが5個だったとしましょう。
ロボットが良品/不良品を識別するという事象を二項分布でモデル化し、
上の計算に当てはめると、
つまり、事後分布は、
です。ちなみに、確率分布を描くと以下のようになっています。
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
from scipy import stats
!pip install japanize-matplotlib
import japanize_matplotlib
X=np.linspace(0,1,100)
beta = stats.beta.pdf(X,16,6)
plt.plot(X,beta,label="(α,β)=(16,6)")
plt.legend()
plt.title("ベータ分布")

この時の識別率の推定値は
となります。また、
theta = stats.beta.sf(0.8,16,6)
print(theta)
"""
0.2307041188518264
"""
これらの事から、違和感は正しいと言えそうです。
今は事後分布として、
新たに10個データを取得したとして、何個正しく識別すれば
といった疑問に答える事も出来ます。この問題について考えてみましょう。
x個正しく識別できたとすると、事後分布は
となります。この時、推定値
です。これが0.8となるのは、
の時です。実際、
となり、推定値は0.8を超えます。10個のデータでは、挽回はかなり厳しいみたいですね。
このように、未来の出来事まで見据えた議論が出来るのがベイズ統計の良い所です。
補足
θの推定値を求めるなら、
二項分布で最尤推定すると、
となります。勿論この方法でも
問題によって、ベイズ的手法と、古典統計的手法は使い分ける必要があります。
まとめ
- 二項分布とベータ分布を紹介した
- ベイズの定理の計算をした
- 応用として、適当な状況を考えて計算した
- 最尤推定との比較をした
- ベイズの定理を使う時にはあまり必要ないですが。
- ガンマ分布の解説で計算しています。
-
が識別率です。