🎓 レベル:標準 | 重要度:A(必須)
📎 前提:対照変量法(アンチセティック) | 関連:層化サンプリング
要点(BLUF)
- 制御変量法:目的量 と相関し、しかも期待値が既知の補助変数 を使い、 の推定を「 の誤差」で補正します。
- 最適係数 で補正すると、分散は 倍。相関 が強いほど劇的に減ります。
- を制御変量 (期待値0.5、相関0.99)で補正し、分散を約55倍縮小。
1. アイデア:既知の答えで答え合わせ
推定したいのは 。ここで、 と相関し期待値 が分かっている別の関数 があるとします。新しい推定量を
と作ります。 なので、どんな係数 でも (不偏)。狙いは「 の標本平均が からどれだけずれたか」を見て、 の推定の同じ向きのずれを差し引くことです。 と が強く相関していれば、 のずれは のずれの良い予測子になり、誤差が消えます。
2. 最適係数と分散
の分散は の2次式で、最小化すると
ここで 。分散は 倍になります。 なら 、すなわち約50倍の改善。 は を に回帰したときの傾きそのもので、制御変量法は「 から、 で線形に説明できる部分を取り除く」回帰だと見られます。実務では を標本から推定します(わずかなバイアスが入るが 大で無視可能)。
3. 実測
()の制御変量に (期待値 )を使います。 と はどちらも単調増加で強く相関します。
import numpy as np
# 乱数シードを固定
rng = np.random.default_rng(31)
n = 100_000
reps = 2000
def plain(rng):
u = rng.random(n)
return np.exp(u).mean()
def control_variate(rng):
u = rng.random(n)
f = np.exp(u)
c = u # 制御変量(期待値0.5)
b = np.cov(f, c)[0,1] / c.var() # 最適係数 b* を標本推定
return (f - b*(c - 0.5)).mean()
p_ests = np.array([plain(rng) for _ in range(reps)])
c_ests = np.array([control_variate(rng) for _ in range(reps)])
print(f"プレーン 平均={p_ests.mean():.5f} 分散={p_ests.var():.2e}")
print(f"制御変量 平均={c_ests.mean():.5f} 分散={c_ests.var():.2e}")
print(f"分散減少率 = {p_ests.var()/c_ests.var():.2f} 倍")
u = rng.random(500_000)
print(f"corr(e^U, U) = {np.corrcoef(np.exp(u), u)[0,1]:.4f}")
出力:
プレーン 平均=1.71830 分散=2.38e-06
制御変量 平均=1.71828 分散=4.34e-08
分散減少率 = 54.82 倍
corr(e^U, U) = 0.9918
出力の意味:両者とも真値 1.71828 を不偏に推定しつつ、分散はプレーン に対し制御変量 で約55倍減。理論の にほぼ届きます( を標本推定したぶん少し届かない)。相関 0.99 という強い線形関係が効いています。
4. 制御変量の選び方
- 期待値が解析的に分かること(これが制約)。多項式・線形項・正規分布の積率・粗いモデルの厳密解などが定番。
- 目的量と強く相関すること。相関がゼロなら効果ゼロ、無理に使うと推定の手間だけ増えます。
- 複数の制御変量を同時に使う多変量版もあり、回帰の重相関係数で分散が決まります。
- 金融では「解析解のある単純オプションを制御変量に、複雑オプションを推定」が典型。
数式の直観的意味
制御変量は「カンニングできる似た問題で答え合わせをする」発想です。 は答え()が分かっている問題。同じ乱数でそれを解いてみて、 から ずれていたら、相関する本命 もおおよそ ずれているはず——だから差し引く。 は回帰の「説明できなかった残差の割合」そのもので、相関が強いほど残差が小さく、分散が消えます。対照変量(対照変量法(アンチセティック))が「入力に負相関ペアを仕込む」のに対し、制御変量は「既知の答えを持つ相棒で補正する」——どちらも相関を使う点は共通です。
⚠️ よくある誤解・落とし穴
- 「 の期待値を知らなくても使える」ではない: が既知であることが大前提。未知なら補正項の期待値がゼロにならず、バイアスが入ります。
- 「 は1でいい」ではない:最適は 。 は と のスケールが一致する特殊ケースだけ。
- 「相関が弱くても効く」ではない:効果は 依存。相関 0.3 なら分散は 0.91 倍(ほぼ無意味)。強い相関の相棒を探すことが肝心。
- 「 を同じ標本で推定すると無効」ではない:わずかなバイアスは入りますが 大で無視でき、実用上問題ありません。気になれば別標本で を推定。
- 「対照変量と併用できない」ではない:併用可能。独立な分散減少効果を重ねられます。
対応シミュレーション参照
本文の制御変量(default_rng(31)、55倍減、)。
関連ノート
- 対照変量法(アンチセティック)(前提・相関を使う別法)
- 層化サンプリング(次のトピック・領域分割)
- 重点サンプリング(提案分布の変更)
- 第4章 分散減少法 目次
- シミュレーション・モンテカルロ法 全体目次