はじめに
頻度論統計学は難解すぎる!
- 帰無仮説が正しいと仮定したときに正しく検定しても誤って棄却してしまう確率が有意水準?
- 色んな観測データで信頼区間を毎回作って、真のパラメータを95%で含むのが95%信頼区間?
- p値が0.05未満だから有意って、0.05はどこから来たん?
対して、ベイズ統計とMCMCなら、そういった難解な概念は抜きにして考えさせてくれる。
- パラメータの事後分布と予測分布から、仮説を確信している確率が計算できる
- パラメータの真の値は95%の確率でここら辺にあると信用できる区間が得られる
- グラフィカルモデリングで現実の捉えてパラメータ推定に移行するという流れに可視化が自然と組み込まれているから、統計の非専門家とも議論しやすい
そんなベイズモデリングをもっと気軽に使えるために、ブラウザでポチポチするだけでモデル構築から推論まで完結するおもちゃを作りました。
GitHub: https://github.com/hirata-keisuke/BayesianModelingGUI
ツールの使い方
起動
git clone https://github.com/hirata-keisuke/BayesianModelingGUI.git
cd BayesianModelingGUI
docker-compose up -d
ブラウザで http://localhost:3000 を開く
モデル構築
- CSVをアップロード
- ノードをドラッグ&ドロップで配置
- エッジで変数をつなぐ
- 各ノードのパラメータを設定
コード生成
PyMCコードを自動生成してくれるので、事後分布からサンプリングしたパラメータで予測したり、パラメータから別の統計量の事後分布を作る方向へ移行するのもラクチン!
with pm.Model() as model:
intercept = pm.Normal('intercept', mu=0, sigma=10)
slope = pm.Normal('slope', mu=0, sigma=10)
x = pm.Data('x', data['x'].values)
mu = intercept + slope * x
sigma = pm.HalfNormal('sigma', sigma=5)
y = pm.Normal('y', mu=mu, sigma=sigma, observed=y_data)
推論実行
「Run Inference」ボタンで、ブラウザ上でMCMCサンプリング。結果はトレースプロット、事後分布、LOO/WAICが表示される。
技術スタック
- フロントエンド: React + TypeScript + React Flow
- バックエンド: FastAPI + PyMC5 + ArviZ
- インフラ: Docker Compose
おわりに
頻度論統計学もちゃんと学びたいけど、ふと気が付くと大標本論をやれという壁が立ちはだかる気がするんですよね。まずは、ベイズ統計で統計になれながら、ややこしい現実を単純に近似したモデルで捉えて、簡単に考えるのが現実的と思います。一緒に開発してくれたClaude Code君にスペシャルサンクスを。
ぜひツールを試してみて、フィードバックをいただけると幸いです!
Tags: #ベイズ統計 #PyMC #統計モデリング #Python #React