Mímisbrunnr知恵の泉

← シミュレーション 一覧

🎓 レベル:基礎 | 重要度:A(必須)

📎 前提:大数の法則と中心極限定理の役割 | 関連:収束率と誤差(√n則)

要点(BLUF)

1. 積分を期待値として書く

定積分 I=abg(x)dxI = \int_a^b g(x)\,dx を考えます。区間 [a,b][a,b] 上の一様分布 UU(a,b)U \sim \mathcal{U}(a,b) の密度は 1ba\frac{1}{b-a} なので、

E[g(U)]=abg(x)1badx=IbaI=(ba)E[g(U)]E[g(U)] = \int_a^b g(x)\,\frac{1}{b-a}\,dx = \frac{I}{b-a} \quad\Longrightarrow\quad I = (b-a)\,E[g(U)]

つまり積分は、一様乱数で評価した gg の期待値を (ba)(b-a) 倍したもの。期待値は大数の法則で標本平均に置き換えられるので、独立な U1,,UnU(a,b)U_1,\dots,U_n \sim \mathcal{U}(a,b) を引いて

I^n=(ba)1ni=1ng(Ui)\hat{I}_n = (b-a)\,\frac{1}{n}\sum_{i=1}^{n} g(U_i)

が推定量になります。これがモンテカルロ積分です。

flowchart LR
    A["積分 I = ∫g dx"] -->|"期待値に翻訳"| B["I = (b-a)・E(g(U))"]
    B -->|"大数の法則"| C["標本平均で近似"]

2. 不偏性

I^n\hat{I}_n の期待値を取ると

E[I^n]=(ba)1ni=1nE[g(Ui)]=(ba)E[g(U)]=IE[\hat{I}_n] = (b-a)\,\frac{1}{n}\sum_{i=1}^{n} E[g(U_i)] = (b-a)\,E[g(U)] = I

サンプル数 nnよらず、推定の期待値は真の積分 II にぴったり一致します。これが不偏性。バイアスがゼロなので、誤差は分散(ばらつき)だけの問題になり、nn を増やせば[[03-02_収束率と誤差|1/n1/\sqrt{n} で縮む]]、という綺麗な構図になります。

3. 具体例:∫₀¹ eˣ dx を推定する

真値は 01exdx=e1=1.71828\int_0^1 e^x dx = e - 1 = 1.71828\ldots。一様乱数で eUe^{U} の平均を取ります(ba=1b-a=1)。

import numpy as np

# 乱数シードを固定
rng = np.random.default_rng(20)

n = 1_000_000
x = rng.random(n)             # Uniform(0,1)
estimate = np.exp(x).mean()   # (b-a)=1 なので平均そのもの

print(f"モンテカルロ推定 = {estimate:.5f}")
print(f"真値 (e-1)       = {np.e - 1:.5f}")
print(f"絶対誤差         = {abs(estimate - (np.e-1)):.5f}")

出力:

モンテカルロ推定 = 1.71968
真値 (e-1)       = 1.71828
絶対誤差         = 0.00139

出力の意味:100万標本で e1=1.71828e-1 = 1.71828 を 1.71968 と推定、誤差 0.0014。一般区間でも同じで、0πsinxdx\int_0^\pi \sin x\,dx(真値2)は (ba)=π(b-a)=\pi 倍して推定できます。「積分を平均に翻訳する」——たったこれだけで、解析解のない積分も数値化できるのがモンテカルロの威力です。

4. 一般の密度への拡張

一様分布に限らず、任意の密度 p(x)p(x) からサンプリングする期待値

θ=Ep[g(X)]=g(x)p(x)dx    1ni=1ng(Xi),Xip\theta = E_p[g(X)] = \int g(x)\,p(x)\,dx \;\approx\; \frac{1}{n}\sum_{i=1}^n g(X_i),\quad X_i \sim p

も同じ枠組みです。ベイズの事後期待値、金融のオプション価格、信頼性の故障確率——応用上の「期待値を計算したい」はすべてこの形。ppわざと変えて分散を下げるのが重点サンプリングpp から直接引けないときに連鎖で引くのがMCMCです。

積分を期待値に書き換えるとき、被積分関数を「g(x)p(x)g(x)\cdot p(x)」のどこで切るか(何を密度と見るか)には自由度があり、その選択が推定の効率(分散)を左右します。

数式の直観的意味

モンテカルロ積分は「関数の平均の高さ × 区間の幅 = 面積」という小学校の長方形近似を、乱数で実行しているだけです。決定的な数値積分(台形則)が「等間隔の格子で高さを測る」のに対し、モンテカルロは「ランダムな点で高さを測り、その平均を取る」。等間隔だと次元 dd で格子点が NdN^d に爆発しますが、ランダムサンプリングなら点の数は次元と独立に選べる——だから高次元で逆転します。不偏性は「ランダムに測っても、平均の高さは正しく当たる」ことの保証です。

⚠️ よくある誤解・落とし穴

対応シミュレーション参照

本文の 01exdx\int_0^1 e^x dx 推定(default_rng(20))。収束の速さは収束率と誤差(√n則)へ。

関連ノート