スポンサーリンク
スポンサーリンク

ベイズの定理の応用(検査ロボットの能力を測る)

マサムネのイメージ図 ベイズ統計学

ベイズの定理を現実に近い設定で使ってみる記事です。初めに、事前分布などを決めて、計算をしてしまいます。次に、適当な設定で、ベイズの定理を使って予測してみます。

スポンサーリンク

二項分布とベータ分布

今回の記事で使うのは二項分布とベータ分布です。
二項分布は、2種類の結果がある事象を複数回繰り返すような事象をモデル化するときに使われ、以下の表式になっています。
f(x|θ,n)=nCxθx(1θ)nx
ベータ分布は以下の表式です。
Be(y|α,β)=yα1(1y)β101xα1(1x)β1dx
二項分布は、xに0位以上の整数しか入りませんが、 ベータ分布は実数値を入れる事が出来ます。また、ベータ分布の分母は、ベータ関数として知られています。また、ガンマ関数を用いて表す事が出来るので、計算上便利な性質を持っています。1
Be(α,β)=Γ(α)Γ(β)Γ(α+β)=01xα1(1x)β1dx
ガンマ関数は、階乗の一般化だったことを思い出す2と、α,βが自然数の時は、ベータ関数は簡単な形になります。
Be(y|α,β)=α!β!(α+β)!

ベイズの定理の計算

初めに、ベイズの定理を書いておきます。
p(θ|x)=p(x|θ)p(θ)p(x)
p(θ)=Be(θ|α,β)とし、 p(x|θ)を二項分布として計算しましょう。
計算で楽をするために、logを取って計算します。
logp(θ|x)=(x+α1)logx+(nx+β1)log(1x)+const
const は、θに関係ない項を表しています。
右辺が確率分布になっていると考えると、ベータ分布Be(θ|x+α,nx+β)となっています。現実のモデルとして二項分布を使う時は、パラメーターの事前分布にベータ分布を使えば、事後分布もベータ分布という訳です。
p(θ|x)=Be(θ|x+α,nx+β)
事後確率を最大にするθを求めておきましょう。この計算で求めるθ^が予測値になります。
θで微分して0とおき、θについて解けば良いです。
logBe(θ|α,β)θ=α1θβ11θ
上の式を解いて、
θ^=α1α+β1
となります。

ベイズの定理の応用

これまでの計算を使って考えたいのは以下のような問題です。

人がいなくなってしまったので、良品/不良品を仕分けるロボットを導入した。購入する際には、識別率80%くたいですよと言われていたが、導入してみると、識別率は80%もないと感じた。数日分のデータを集めたので、識別率が80%あるのか調べる。

データを20個集めると、正しく識別しているのが15個、間違いが5個だったとしましょう。
ロボットが良品/不良品を識別するという事象を二項分布でモデル化し、θを求めましょう。3計算を楽にするために事前分布はベータ分布とします。また、購入した側としては、事前には何も知らないという事にしたいので、α=β=1として、一様分布にしましょう。
上の計算に当てはめると、n=20,x=15です。
つまり、事後分布は、
p(θ|n=20,x=15)=Be(θ|15+1,2015+1)=Be(θ|16,6)
です。ちなみに、確率分布を描くと以下のようになっています。

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("ベータ分布")
問題の事後分布

この時の識別率の推定値は
θ^=1521=0.71
となります。また、θが0.8以上の確率は、事後分布を0.8から1まで積分する事で得られ、大体23%です。

theta = stats.beta.sf(0.8,16,6)
print(theta)
"""
0.2307041188518264
"""

これらの事から、違和感は正しいと言えそうです。
今は事後分布として、Be(θ|16,6)が得られていますが、これを事前分布として、データを取得する事も出来ます。例えば、

新たに10個データを取得したとして、何個正しく識別すればθ^が0.8を超えるのか?

といった疑問に答える事も出来ます。この問題について考えてみましょう。
x個正しく識別できたとすると、事後分布は
p(θ|n=10,x)=Be(θ|x+16,10x+6)=Be(θ|16+x,16x)
となります。この時、推定値θ^
θ^=15+x31
です。これが0.8となるのは、
x=9.8
の時です。実際、x=10のとき、
θ^=0.806
となり、推定値は0.8を超えます。10個のデータでは、挽回はかなり厳しいみたいですね。
このように、未来の出来事まで見据えた議論が出来るのがベイズ統計の良い所です。

補足

θの推定値を求めるなら、p(x|θ)の最尤推定をするという方法も考えられます。
二項分布で最尤推定すると、
θ^=xn
となります。勿論この方法でもθを推定できますが、未来の予測をしようと思っても出来ません。また、θについての分布は持っていないので、θθ0以上となる確率などは求める事は出来ません。
問題によって、ベイズ的手法と、古典統計的手法は使い分ける必要があります。

まとめ

  • 二項分布とベータ分布を紹介した
  • ベイズの定理の計算をした
  • 応用として、適当な状況を考えて計算した
  • 最尤推定との比較をした
  1. ベイズの定理を使う時にはあまり必要ないですが。
  2. ガンマ分布の解説で計算しています。
  3. θが識別率です。
タイトルとURLをコピーしました