ベイズ推定(ベイズすいてい、英: Bayesian inference)は統計学における推定手法の一つで、観測データと事前の知識(事前分布)を組み合わせて、未知のパラメータについての確率分布(事後分布)を推定する方法です。この手法は、18世紀のイギリスの牧師で数学者のトーマス・ベイズにちなんで名付けられました。
P(A∣B) は、事象 B が起こったときに 事象 Aが起こる 条件付き確率 です(事後確率)。
P(B∣A)P(B∣A) は、事象 AAが起こったときに 事象 Bが起こる確率です(尤度)。
P(A)P(A) は、事象 A が起こる 事前確率 です。
P(B)P(B) は、事象 B が起こる確率(周辺確率)であり、次のように求められます。
Pythonでかけるの?
Pythonでベイズ推定を実装することは可能です。一般的には、numpy や scipy などのライブラリを用いてベイズ推定を行うことができますが、より簡単にベイズ推定を実行するために専用のライブラリを使うこともあります。代表的なライブラリには PyMC3 や Stan をPythonから使用するための pystan があります。
ベイズ推定をPythonで実装する基本的な例を示します。この例では、シンプルなベイズ推定を行うために scipy を使用し、パラメータの事前分布と尤度関数を定義して、事後分布を計算します。
尤度関数(ゆうどかんすう、英: likelihood function)とは統計学において、ある前提条件に従って結果が出現する場合に、逆に観察結果からみて前提条件が「何々であった」と推測する尤もらしさ(もっともらしさ)を表す数値を、「何々」を変数とする関数として捉えたものである。また単に尤度ともいう。
基本的なベイズ推定の例
ここでは、コインが表が出る確率 θθ を推定するシンプルな例を示します。仮定として、コイン投げの結果が成功(表)か失敗(裏)であるとします。
Python のプログラム:
import numpy as np
from scipy.stats import beta
import matplotlib.pyplot as plt
# 事前分布: Beta(α, β) 分布
alpha_prior = 1
beta_prior = 1
# コイン投げの結果
heads = 8 # 表が出た回数
tails = 4 # 裏が出た回数
# 事前分布を定義
prior = beta(alpha_prior, beta_prior)
# 尤度関数: Bernoulli分布
# 事後分布: Beta(α + heads, β + tails)
alpha_posterior = alpha_prior + heads
beta_posterior = beta_prior + tails
# 事後分布を定義
posterior = beta(alpha_posterior, beta_posterior)
# 事前分布と事後分布のプロット
x = np.linspace(0, 1, 100)
plt.plot(x, prior.pdf(x), 'r-', label='Prior Beta(1, 1)')
plt.plot(x, posterior.pdf(x), 'b-', label='Posterior Beta(9, 5)')
plt.xlabel('θ (probability of heads)')
plt.ylabel('Density')
plt.title('Prior and Posterior Distributions')
plt.legend()
plt.show()
このコードの説明
事前分布:
Beta分布(beta)を事前分布として設定しています。ここでは、ベータ分布のパラメータ α と β を 1 に設定して、事前分布が均等に分布している状態から始めています。
コイン投げの結果:
表が 8 回、裏が 4 回の結果を設定します。
事後分布の計算:
尤度関数に基づいて、事後分布のパラメータを更新します。ここでは、Beta分布のパラメータを更新することで、事後分布を得ています。
プロット:
事前分布と事後分布をプロットし、どのように事前の信念がデータによって更新されたかを可視化しています。
ベイズ推定の応用例
金融:
リスク評価、ポートフォリオ最適化
医療:
生存時間分析、臨床試験