🎓 レベル:発展 | 重要度:A(必須)
📎 前提:層化サンプリング | 関連:信頼性・稀少事象シミュレーション | 棄却法(受理・棄却サンプリング)
要点(BLUF)
- 重点サンプリング:目的分布 ではなく、重要な領域を厚く引く提案分布 からサンプルし、尤度比 で重み補正します。
- 棄却せず全サンプルを重み付きで使うので無駄がなく、とくに稀少事象(めったに起きない事象の確率)で劇的に効きます。
- 標準正規の裾確率 を、提案を にずらして推定し、標準誤差を約80倍改善します。
1. アイデア:見たい場所を厚く引く
期待値 を、別の密度 ( where )を使って書き換えます。
を引いて 、(尤度比・重み)で推定します。 を** が効く領域に質量が集まる**ように選べば、サンプルが無駄にならず分散が下がります。プレーンMC は の特殊ケースです。
2. 稀少事象でなぜ効くか
が指示関数 のとき、。標準正規ではこれは という極小値。プレーンMC()だと、100万点引いても はせいぜい数十点しか出ず、推定が極端に不安定(相対誤差が巨大)。
重点サンプリングでは、提案を裾の方へずらした にします。すると提案サンプルの約半分が に落ち、毎回しっかり当たる。当たったサンプルには尤度比 を掛けて「本当は珍しい事象だ」と補正するので、推定は不偏のまま分散が激減します。
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. 提案分布の選び方と危険
最適な提案は (理論上は分散ゼロにできるが、規格化定数が未知)。実用ではこれに近い形を選びます。注意点:
- 裾が軽すぎる提案は破滅的: の裾が より速く減衰すると、尤度比 が一部で爆発し、分散が無限大になることも。提案は目的より裾を重くするのが鉄則。
- 重みの劣化(高次元):次元が上がると尤度比の分散が指数的に増え、少数のサンプルが全重みを占める(有効標本サイズが激減)。
- 自己正規化重点サンプリング(重みを正規化)は規格化定数が未知でも使えますが、わずかにバイアスが入ります。
数式の直観的意味
重点サンプリングは「観測しやすい世界でサンプルを集め、その世界と本当の世界の確率の比で割り戻す」操作です。尤度比 が「本当の世界での起こりやすさ ÷ 提案世界での起こりやすさ」。提案世界で頻繁に当たる事象でも、 が小さければ「本当は珍しい」と正しく割り引かれる。分散がゼロに近づく理想 は「積分に効くところだけを、効く量に比例して引く」という究極の効率化。逆に提案が下手(裾が軽い)だと、まれに巨大な が出て推定を吹き飛ばす——「軽い裾は禁物」の数学的理由です。棄却法(棄却法(受理・棄却サンプリング))が「合わない提案を捨てる」のに対し、重点サンプリングは「捨てずに重みで補正する」点が決定的に違います。
⚠️ よくある誤解・落とし穴
- 「提案は何でもいい」ではない:裾が目的より軽い提案は尤度比が爆発し分散無限大。裾は重くが鉄則。
- 「重みを掛け忘れる」:尤度比 を掛けないと、ただの「間違った分布での推定」。補正が本体です。
- 「いつでも分散が下がる」ではない:提案が悪いと逆に分散が増えます。良い提案を選んで初めて効く。
- 「高次元でも安心」ではない:次元が上がると重みが少数サンプルに集中(有効標本サイズ崩壊)。高次元はMCMCや逐次モンテカルロを検討。
- 「不偏でない」ではない:標準形は不偏( で恒等)。自己正規化版だけわずかにバイアスがあります。
対応シミュレーション参照
本文の裾確率 重点サンプリング(default_rng(33)、標準誤差80倍改善)。応用は信頼性・稀少事象シミュレーションへ。
関連ノート
- 層化サンプリング(前提・重要領域への配分)
- 準モンテカルロ法(次のトピック・決定的な敷き詰め)
- 棄却法(受理・棄却サンプリング)(捨てる版 vs 重み付け版)
- 信頼性・稀少事象シミュレーション(稀少事象への応用)
- 第4章 分散減少法 目次
- シミュレーション・モンテカルロ法 全体目次