Mímisbrunnr知恵の泉

← シミュレーション 一覧

🎓 レベル:発展 | 重要度:A(必須)

📎 前提:層化サンプリング | 関連:信頼性・稀少事象シミュレーション | 棄却法(受理・棄却サンプリング)

要点(BLUF)

1. アイデア:見たい場所を厚く引く

期待値 θ=Ep[h(X)]=h(x)p(x)dx\theta = E_p[h(X)] = \int h(x)\,p(x)\,dx を、別の密度 qqq>0q>0 where hp0hp\neq0)を使って書き換えます。

θ=h(x)p(x)q(x)q(x)dx=Eq ⁣[h(X)p(X)q(X)]\theta = \int h(x)\,\frac{p(x)}{q(x)}\,q(x)\,dx = E_q\!\left[h(X)\,\frac{p(X)}{q(X)}\right]

XiqX_i \sim q を引いて 1nh(Xi)w(Xi)\frac{1}{n}\sum h(X_i)\,w(X_i)w=p/qw = p/q尤度比・重み)で推定します。qq を**hh が効く領域に質量が集まる**ように選べば、サンプルが無駄にならず分散が下がります。プレーンMC は q=pq = p の特殊ケースです。

2. 稀少事象でなぜ効くか

hh が指示関数 1{X>4}\mathbf{1}\{X > 4\} のとき、θ=P(X>4)\theta = P(X>4)。標準正規ではこれは 3.17×1053.17\times10^{-5} という極小値。プレーンMC(q=p=N(0,1)q=p=\mathcal{N}(0,1))だと、100万点引いても X>4X>4 はせいぜい数十点しか出ず、推定が極端に不安定(相対誤差が巨大)。

重点サンプリングでは、提案を裾の方へずらした q=N(4,1)q = \mathcal{N}(4,1) にします。すると提案サンプルの約半分が X>4X>4 に落ち、毎回しっかり当たる。当たったサンプルには尤度比 w=ϕ(x)/ϕμ=4(x)w = \phi(x)/\phi_{\mu=4}(x) を掛けて「本当は珍しい事象だ」と補正するので、推定は不偏のまま分散が激減します。

import numpy as np
from scipy import stats

# 乱数シードを固定
rng = np.random.default_rng(33)
n = 1_000_000
true_tail = stats.norm.sf(4)            # P(Z>4) の真値
print(f"真値 P(Z>4) = {true_tail:.3e}")

# 素朴なモンテカルロ
z = rng.standard_normal(n)
naive = (z > 4).mean()
naive_se = np.sqrt(naive*(1-naive)/n)
print(f"素朴MC    = {naive:.3e}  (標準誤差 {naive_se:.1e})")

# 重点サンプリング:提案を N(4,1) にずらす
x = rng.standard_normal(n) + 4.0        # 提案 ~ N(4,1)
w = stats.norm.pdf(x) / stats.norm.pdf(x, loc=4.0)   # 尤度比 p/q
indicator = (x > 4)
is_est = (indicator * w).mean()
is_se = (indicator * w).std() / np.sqrt(n)
print(f"重点SAMP  = {is_est:.3e}  (標準誤差 {is_se:.1e})")
print(f"標準誤差の改善 = {naive_se/is_se:.1f} 倍")

出力:

真値 P(Z>4) = 3.167e-05
素朴MC    = 2.900e-05  (標準誤差 5.4e-06)
重点SAMP  = 3.169e-05  (標準誤差 6.7e-08)
標準誤差の改善 = 80.0 倍

出力の意味:素朴MCは 2.9e-5 と真値 3.167e-5 から外れ、標準誤差 5.4e-6(推定値と同オーダー=信用できない)。重点サンプリングは 3.169e-5 と真値にぴたり、標準誤差 6.7e-8 で約80倍精密。提案を裾にずらして「めったに起きない事象を、しょっちゅう起きる提案で観測し、重みで割り戻す」——稀少事象推定の定石です(信頼性・稀少事象シミュレーション)。

3. 提案分布の選び方と危険

最適な提案は q\*(x)h(x)p(x)q^\*(x) \propto |h(x)|\,p(x)(理論上は分散ゼロにできるが、規格化定数が未知)。実用ではこれに近い形を選びます。注意点:

数式の直観的意味

重点サンプリングは「観測しやすい世界でサンプルを集め、その世界と本当の世界の確率の比で割り戻す」操作です。尤度比 w=p/qw = p/q が「本当の世界での起こりやすさ ÷ 提案世界での起こりやすさ」。提案世界で頻繁に当たる事象でも、ww が小さければ「本当は珍しい」と正しく割り引かれる。分散がゼロに近づく理想 q\*hpq^\* \propto |h|p は「積分に効くところだけを、効く量に比例して引く」という究極の効率化。逆に提案が下手(裾が軽い)だと、まれに巨大な ww が出て推定を吹き飛ばす——「軽い裾は禁物」の数学的理由です。棄却法(棄却法(受理・棄却サンプリング))が「合わない提案を捨てる」のに対し、重点サンプリングは「捨てずに重みで補正する」点が決定的に違います。

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

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

本文の裾確率 P(Z>4)P(Z>4) 重点サンプリング(default_rng(33)、標準誤差80倍改善)。応用は信頼性・稀少事象シミュレーションへ。

関連ノート