Mímisbrunnr知恵の泉

← シミュレーション 一覧

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

📎 前提:重点サンプリング | 関連:リスク評価のモンテカルロ(VaR)

要点(BLUF)

1. 問題:稀少事象は素朴には測れない

システムの故障確率 pfp_f を推定したいとします。pf=105p_f = 10^{-5} のとき、素朴なモンテカルロで nn 回シミュレートしても、故障は平均 npfn p_f 回しか起きません。n=106n=10^6 でも約10回。標準誤差は pf(1pf)/n\sqrt{p_f(1-p_f)/n} で、推定値と同じオーダーになり信頼できない。深い裾を直接サンプリングで埋めるのは、サンプル効率が壊滅的に悪いのです。

これは VaR の深い分位点(リスク評価のモンテカルロ(VaR))と同じ困難。解決策が重点サンプリング——「危険な領域を、わざと頻繁に起こる提案分布で観測し、尤度比で割り戻す」。

2. 実装:多部品系の過負荷確率

10個の部品の応力 XiN(3,1)X_i \sim \mathcal{N}(3,1) の合計が閾値 42 を超えると系が壊れる、とします。合計は N(30,10)\mathcal{N}(30, 10) なので、閾値42は平均から約3.8σ——稀少事象です。

import numpy as np
from scipy import stats

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

d = 10; thr = 42.0
true = stats.norm.sf((thr-30)/np.sqrt(d))      # 真値(合計の正規分布から)
print(f"真の稀少確率 P(合計>{thr}) = {true:.3e}")

n = 2_000_000
# 素朴なモンテカルロ
X = rng.normal(3, 1, (n, d))
naive = (X.sum(axis=1) > thr).mean()
naive_se = np.sqrt(naive*(1-naive)/n)
print(f"素朴MC = {naive:.3e}  (標準誤差 {naive_se:.2e}, 故障回数 {int(naive*n)})")

# 重点サンプリング:各部品の平均を危険側へずらす(合計平均=thrになるよう)
shift = thr / d                                 # = 4.2
Y = rng.normal(shift, 1, (n, d))
log_w = (stats.norm.logpdf(Y, 3, 1) - stats.norm.logpdf(Y, shift, 1)).sum(axis=1)
weight = np.exp(log_w)                           # 尤度比 p/q
indicator = (Y.sum(axis=1) > thr)
is_est = (indicator * weight).mean()
is_se = (indicator * weight).std() / np.sqrt(n)
print(f"重点SAMP = {is_est:.3e}  (標準誤差 {is_se:.2e})")
print(f"標準誤差の改善 = {naive_se/is_se:.0f} 倍")

出力:

真の稀少確率 P(合計>42.0) = 7.390e-05
素朴MC = 6.850e-05  (標準誤差 5.85e-06, 故障回数 137)
重点SAMP = 7.403e-05  (標準誤差 1.08e-07)
標準誤差の改善 = 54 倍

出力の意味:真値 7.39×1057.39\times10^{-5} に対し、素朴MCは200万回引いても故障137回、推定 6.85×1056.85\times10^{-5} で標準誤差が推定値の約8.5%。一方、各部品の平均を危険側(3→4.2)へずらした重点サンプリングは、提案サンプルの多くが閾値を超えるので故障を毎回観測でき、推定 7.403×1057.403\times10^{-5} で標準誤差は54倍小さい。同じ精度なら素朴MCの 542290054^2 \approx 2900 分の1のサンプルで済む計算です。

3. 提案分布の設計(最小レート点)

重点サンプリングの肝は「危険側へどうずらすか」。理論的には、**故障領域の中で最も起こりやすい点(最小レート点、design point)**に提案分布の中心を合わせるのが最適に近い。上の例では「合計がちょうど閾値になる対称な点」=各部品 4.24.2 がそれです。大偏差理論はこの最適なずらし方を与えます。複雑な系では、

など、より高度な手法が使われます。

数式の直観的意味

稀少事象推定は「めったに起きないことを、しょっちゅう起きる世界で観測して割り戻す」——重点サンプリング(重点サンプリング)そのものの応用です。素朴MCが非効率なのは、確率 pfp_f の事象に当たる回数が npfnp_f しかなく、その相対誤差が 1/npf1/\sqrt{np_f}pfp_f の小ささに直撃されるから。重点サンプリングは提案を危険側に寄せて当たる頻度を O(1)O(1) に引き上げ、尤度比 p/qp/q で「本当は珍しい」と補正する。5454 倍という改善は、提案を最適点に近づけたことで尤度比の分散が抑えられた結果。逆に提案を寄せすぎ・寄せ方を誤ると尤度比が暴れて逆効果になる(重点サンプリングの落とし穴)ので、design point の見極めが信頼性工学の腕の見せ所です。

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

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

本文の多部品系・過負荷確率の重点サンプリング(default_rng(61)、素朴比54倍)。手法は重点サンプリング

関連ノート