上級編 6. Libor Market Model
6.6 モンテカルロシミュレーション
6.6.1 乱数の生成方法
6.6.3.3 Low discrepancy sequences (超一様分布列、低食い違い数列、準乱数列)
6.6.3.3.1 確率変数を定義域とした数値積分
以上のような乱数の生成方法と全く異なった、一様分布する数列の生成方法があります。単純に考えれば、[0,1) 間を N 個に均等に分割し、各分割点を並べれば、きれいに離散的一様分布する数列になります。それを、標準正規分布関数の逆関数に代入すれば、通常の乱数よりきれいに正規分布する数列が生成でき、さらにそこからモデルが想定する確率変数の分布を、効率よく再現できます。そしてさらに、そのサンプル分布から Payoff 関数のサンプル平均も効率よく求まります。この場合、Payoff関数f(u)は、定義域を[0,1)上に持つ関数と看做せるので、その点列を使ったf(u)のサンプル平均の計算は、[0,1)上の数値積分とも言えます。これまで説明したような、複雑なアルゴリズムを使ってわざわざ一様乱数を生成しなくても、簡単にシミュレーションによるサンプル平均の計算が出来そうに思えます。実際に、MCS が 1次元の一様乱数で間に合う場合は、それで問題ありませんし、むしろ一様乱数生成アルゴリズムよりも効率的です。実際に、通常のモンテカルロシミュレーションでの推定誤差の収束オーダーが総サンプル数Nに対して \(1/\sqrt N\) のオーダーでしか収束しないのに対し、このような方法で生成された点列によるシミュレーションでは、1/N のオーダーで収束する事が知られています。
しかし、MCS で高次元の一様分布する乱数列を必要とする場合、単純にすべての次元を同じ間隔で均等分割した格子状の点列を用意しても、あまり効率よくありません。区間 [0,1) を、d次元空間 \([0,1)^d\) に拡大し、各次元 を N 個で均等分割すると、点の総数は \(N^d\) 個になり、各分割点は超立方体 \([0,1)^d\) の内部で一様に分布する(各次元軸に平行な)格子点列を構成します。すると、その格子点を、各次元軸に射影した場合、各次元上の点の数は N 個にしかなりません。シミュレーションの解像度を上げる為に、N を増やすと、全体のサンプル数は幾何級数的(\(N^d\) のオーダーで)に大きくなるにもかかわらず、次元ごとに見たサンプル量は N のオーダーでしか増えません。一方、乱数を使った高次元の一様分布点を、各次元に射影した場合は、各次元上のサンプル数は、総サンプル数 \(N^d\) と確率 1 で同じになります。同じサンプル数で比較した場合、高次元になればなるほど、乱数生成の方が、格子状の点列よりも、次元ごとの解像度は良くなります。
そこで、高次元の \([0,1)^d\) 空間を、より少ない点で、各次元の解像度をより高くし、かつ一様分布の性質を強く持つ(すなわちLow Discrepancy な)点列の生成アルゴリズムがいくつか提案されています。そういった点列を Low Discrepancy Sequence(超一様分布列、低食い違い列、準乱数と、様々な日本語訳で呼ばれています)と呼び、これを使ったモンテカルロシミュレーションを、準モンテカルロシミュレーション(Quasi-Monte Carlo Simulation、”QMCS”)と呼んでいます。
Low Discrepancy Sequence として有名なのは、ファンデルコルプト数列(van del Corput sequence)、ハルトン列、フォーレ列、ソボル列などですが、その他にも様々な多次元の点列生成方法が研究されているようです。ここでは、Low Discrepancy Sequence として最も使われているファンデルコルプト数列とソボル列の生成アルゴリズムを中心に、簡単に解説したいと思います。Low Discrepancy Sequence のクオリティーを測る基準(いわゆるDiscrepancy)や、そのクオリティーがQMCSの精度に及ぼす影響などについての、数学的な分析や解説は、私の手に負えません。詳しい説明が必要な方は、以下のような文献を参考にして下さい。
- Paul Glassermanの“Monte Carlo Methods in Financial Engineering”
- Niederreiter の“Points sets and sequences with low discrepancy ”
- 鈴木 合田の“準モンテカルロ法の最前線” 日本応用数理学会論文誌第30巻4号 pp.320-374 (jst.go.jp)
以下の解説は、主に、Paul Glassermanの“Monte Carlo Methods in Financial Engineering”、を参考にしています。