🙋
モンテカルロ法で積分を求めるとき、ただ乱数をたくさん撒いて平均するんですよね。「層化サンプリング」って、それと何が違うんですか?
🎓
ざっくり言うと「乱数の撒き方を整えてタダで精度を上げる手法」だよ。普通のモンテカルロ積分は [0,1] の中に乱数点を完全にランダムに撒く。でも完全ランダムだと、点が偶然かたまったり、ある区間がすっぽり抜けたりするんだ。層化サンプリングは先に区間を等しい幅の「層」に分けておいて、各層に決まった数の点を必ず入れる。だから「ここだけ点が無い」という事故が起きないんだ。
🙋
なるほど…でも点を整列させちゃったら、それはもう乱数じゃない気がします。それでもちゃんと正しい積分が出るんですか?
🎓
いい疑問だね。層の中ではちゃんと乱数を使うんだ。例えば10層なら、1層目は [0,0.1] の中で一様乱数、2層目は [0.1,0.2] の中で一様乱数、というふうに。各層の平均を層幅で重み付けして足すと、推定量 Î_strat = Σ w_k f̄_k になる。これは通常MCと同じ真の積分値を狙う「不偏推定量」で、的の中心はずれない。変わるのはばらつきの幅だけだよ。上の f(x) 曲線の図で、仕切り線の中に必ず点が入っているのが見えるはずだ。
🙋
的の中心は同じで、ばらつきだけ減るんですね。なぜ層に分けるとばらつきが減るんですか?
🎓
カギは「分散の分解」だ。全体のばらつきは『層と層の間のばらつき』と『層の中のばらつき』の2つに分けられる。完全ランダムなモンテカルロは、点が左に寄るか右に寄るかという『層間のばらつき』をモロに受ける。ところが層化サンプリングは各層から必ず取るから、この層間ばらつきがきれいに消えて、残るのは層内のばらつきだけ。関数が層をまたいで大きく変わるほど層間ばらつきは大きいから、それを消せる層化の効果も大きくなるんだ。
🙋
じゃあ層を増やせば増やすほど誤差が減るってことですか?スライダーで「層の数」を上げると、標準誤差がどんどん下がっていきますね。
🎓
そのとおり。層を細かくするほど各層の幅が狭くなって、層内では関数がほぼ一定とみなせるようになる。すると層内ばらつき σ_k² も小さくなって、標準誤差は単調に下がる。極端には1層に1点まで分けると、ほぼ規則格子の配置になって最も誤差が小さい。ただし注意点があって、層の数が総サンプル数を超えると、1点も入らない層が出てきて配分が破綻する。各層に最低1点は入る範囲で使うのが鉄則だよ。
🙋
1次元だと層を増やせばいいなら、何でもこれを使えばよさそうですが、落とし穴はありますか?
🎓
最大の落とし穴は「次元の呪い」だ。1次元なら層を10個に分けるだけだけど、10次元で各次元を10分割すると層は10の10乗、つまり100億個になる。全層に1点ずつ入れるなんて到底無理だよね。だから高次元では、各次元を等分しつつ層を賢く組み合わせる『ラテン超方格法(LHS)』を使う。これは層化サンプリングの多次元版だ。このツールは1次元の積分だから、層化サンプリングそのものの効きをまっすぐ体験できる、というわけ。実務だと信頼性解析や金融のシナリオ生成で、まさにこの考え方が使われているよ。
層化サンプリングとは何ですか?
層化サンプリング(層別抽出)は、モンテカルロ推定の分散(ばらつき)を減らす手法のひとつです。サンプリングする区間 [0,1] をあらかじめ重ならない複数の小区間(層)に分割し、各層に決まった本数のサンプルを割り当てて取ります。通常のモンテカルロ法では乱数が偶然かたまったり、ある区間がすっぽり抜けたりしますが、層化サンプリングは「どの層にも必ずサンプルが入る」ことを保証するため、被積分関数の全体像をムラなく捉えられ、推定の標準誤差が下がります。
なぜ層に分けると分散が下がるのですか?
全分散は「層内のばらつき」と「層間のばらつき」に分解できます(分散分解の公式)。層化サンプリングは各層から確実にサンプルを取るため、層間のばらつきを推定から完全に取り除き、残るのは層内のばらつきだけになります。関数 f が層をまたいで大きく変化するほど層間ばらつきが大きく、それを消せる層化の効果も大きくなります。逆に層内で f がほぼ一定であれば、その層からのサンプルは無駄なく効きます。層化サンプリングは最適配分でない均等配分でも、通常MC以上に分散が増えることはありません。
層の数は多ければ多いほど良いのですか?
原理的には、層を増やすほど層内の幅が狭まり層内ばらつきが小さくなるので、標準誤差は単調に下がります。極端には1層に1サンプルまで分割すると、規則格子に近い配置になり最も誤差が小さくなります。ただし実務では、層の数が総サンプル数を超えると1層に1本も入らない層が出てしまい配分が破綻します。また多次元では層数が次元の指数で爆発する「次元の呪い」があります。このツールは1次元なので層を増やすほど有利ですが、各層に最低1サンプルが入る範囲で使ってください。
層化サンプリングとラテン超方格法(LHS)の違いは何ですか?
層化サンプリングは各次元(または対象空間)を層に分け、各層からサンプルを取る手法の総称です。1次元ではそのまま区間を等分します。多次元で全層の格子をすべて埋めると層数が爆発するため、ラテン超方格法(LHS)は各次元を等分しつつ「各次元の各層がちょうど1回ずつ使われる」ように層をランダムに組み合わせる、層化サンプリングの賢い多次元版です。本ツールが扱うのは1次元の積分なので、最も基本的な層化サンプリングそのものを体験できます。
CAE・確率論的設計(モンテカルロFEM): 構造解析や流体解析で材料物性・荷重・寸法のばらつきを考慮する確率論的設計では、入力パラメータの確率分布から多数のサンプルを生成して解析を回します。1回の解析が高コストなため、入力空間を層に分けて各層から確実にサンプルを取る層化サンプリングを使うと、同じ信頼区間幅を得るのに必要な解析回数を大きく減らせます。特に応答が入力に対して単調に変化する場合、層化は劇的に効きます。
金融工学・リスクシナリオ生成: ポートフォリオの損益分布や VaR(バリュー・アット・リスク)をモンテカルロで評価する際、株価リターンなどのリスク因子の分布を層に分け、各層から均等にシナリオを生成します。完全ランダムだと「極端な下落シナリオ」がたまたま少ししか出ないことがありますが、層化すれば裾の領域も確実に被覆でき、テールリスクの推定が安定します。
世論調査・統計調査の標本設計: 層化サンプリングはもともと統計調査の標本抽出から来た考え方です。母集団を年齢・地域・職業などの層に分け、各層から所定の人数を抽出することで、特定の層が偶然抜け落ちて推定が偏るのを防ぎます。「層化抽出法」は調査統計学の基本中の基本で、本ツールの数値積分版はその数学的な核を1次元で抽出したものです。
レンダリング・コンピュータグラフィックス: フォトリアリスティックなレンダリング(パストレーシング)では、ピクセル内のサンプリングや光源方向のサンプリングにモンテカルロ積分を使います。完全ランダムだとノイズ(ざらつき)が目立つため、ピクセルを小さなセルに層化して各セルから1サンプル取る「ジッタリングサンプリング」が標準的に使われ、少ないサンプルで滑らかな画像を得ています。
まず最大の誤解が、「層化サンプリングは推定値そのものを変える=バイアスを生む」 というものです。実際には逆で、層化推定量 Î_strat は通常MC推定量と同じ真の積分値を狙う不偏推定量です。各層の標本平均は層内の積分の不偏推定であり、それを層幅で正しく重み付けして足し合わせている限り、層化によってバイアスは入りません。このシミュレーターでも、通常MC推定値と層化推定値はどちらも厳密値(例えば f(x)=x² なら 1/3)を狙っており、変わるのは「ばらつきの幅」だけです。減るのは誤差であって、的の中心はずれません。
次に、「均等配分が常に最適だ」 という思い込みです。本ツールは各層に同じ本数を割り当てる「比例配分(均等配分)」を使っています。これは実装が簡単で必ず通常MC以上の精度になりますが、最適ではありません。理論的に分散を最小化するのは「ネイマン配分」で、層内のばらつき σ_k が大きい層ほど多くのサンプルを割り当てます。関数が激しく変化する層に重点的に点を撒くわけです。実務で最後の一押しの精度が欲しいときは、ネイマン配分や適応的な層化を検討する価値があります。ただし均等配分でも害は決して出ません。
最後に、「層化は何次元でもそのまま使える」 という誤解。1次元では区間を S 個に分けるだけですが、d 次元で各次元を S 分割して全層の格子を埋めようとすると、層の数は S の d 乗に爆発します。10次元で各次元10分割なら100億層となり、全層に1点ずつ入れることは現実的に不可能です。この「次元の呪い」を避けるため、高次元ではラテン超方格法(LHS)や疑似乱数列(準モンテカルロ法)が使われます。層化サンプリングの素直な効きは、本ツールのような低次元の問題で最もはっきり現れます。次元が上がるほど、層化の設計には工夫が必要になることを忘れないでください。