上級編 6. Libor Market Model
6.6 モンテカルロシミュレーション
6.6.4 分散減少法(Variance Reduction Techniques)
6.6.4.4 層別サンプリング法(つづき)
6.6.4.4.4 層別サンプリング法による推定誤差の低減効果
では、層別サンプリング法を使った場合の、サンプル平均の推定誤差を求め、それがどの程度小さくできるのか見ていきます。その前に、まず各層内での Payoff 関数 y(x) の条件付分散を計測します。層別の真の期待値は不明なので、層内のサンプル平均を中心とした分散を計算します。
\[ Var_i(y(x)|x∈A_i)=E\left[\left[ y(x) - E_i(y(x))\right]^2 | x∈ A_i \right] \approx \frac {1}{m_i} \sum_{j=1}^{m_i} \left(y(\dot{x}_{i,j})-y_{i層平均}\right)^2 \tag{6.100} \] \[ 但し~~~E_i(y(x))=E(y(x)|x∈A_i ) \approx y_{i層平均} = \frac {1}{m_i} \sum_{j=1}^{m_i} y(\dot {x}_{i,j}) \]さらにここから、層別分散の確率加重平均( \(Var_{層別}(y)\) と表記)を求めます。各層の確率測度は解析的に求まっているので、6.100 式の確率加重平均を求めるだけです。まず、各層の確率測度に比例したサンプル数を生成する場合。
\[ \begin{align} Var_{層別}(y) & =\sum_{i=1}^n P_i~ Var_i(y(x))=\sum_{i=1}^n P_i~ E\left[\left[y_i(x)-E_i(y(x))\right]^2 |x∈A_i \right] \\ & \approx \sum_{i=1}^n P_i \sum_{j=1}^{m_i} \frac {(y(\dot {x}_{i,j})-y_{i層平均})^2}{m_i} =\frac 1 M \sum_{i=1}^n \sum_{j=1}^{m_i} (y(\dot {x}_{i,j})-y_{i層平均})^2 \tag{6.101} \end{align} \]次に、各層のサンプル数を恣意的に決めた場合は、 下記式で求まります。
\[ Var_{層別}(y) ≈ \sum_{i=1}^n P_i~ R_i \sum_{j=1}^{m_i} \frac {(y(\dot {x}_{i,j})-y_{i層平均})^2 }{m_i} =\sum_{i=1}^n \frac {P_i^2}{m_i/M} \sum_{j=1}^{m_i} \frac {(y(\dot{x}_{i,j})-y_{i層平均})^2}{m_i} \tag{6.102} \]さて、6.84 式で示した通り、通常の MCS における推定誤差は、サンプル分散に比例し、サンプル数に反比例するのでした。(但し、離散化バイアスが発生していない場合です。) 6.84式を再記します。
\[ σ_{error}^2 = E\left[ (α_s-α)^2 \right]= \frac {v_s}{N} ~~~~~~ or ~~~~~ σ_{error}=\sqrt {v_s/N} \tag{6.84} \]結論から先に言うと、この推定誤差は、層別サンプリング法を使った場合、全体のサンプル分散 \(v_s\) が、 \(Var_{層別}(y)\) に置き換わります。以下で導出する通り、\(Var_{層別 }(y) \leq v_s\) となる為、層別サンプリング法は、推定誤差を低減させる(すなわちサンプル平均の信頼区間を狭める)効果があります。
では、層別サンプリング法による推定誤差を求めていきます。まず、6.84 式にある推定誤差 \((α_s-α)\) の式は、層別サンプリング法を使った場合、
層別サンプル平均の確率加重平均 - 層別条件付き期待値の確率加重平均
に置き換える事ができます。
さらに右辺を解析していくと
\[ \begin{align} y_{サンプル平均}-E(y(x)) & =\sum_{i=1}^n P_i \frac {1}{m_i} \sum_{j=1}^{m_i} y(\dot{x}_{i,j})-\sum_{i=1}^n P_i E(y(x)|x∈A_i) \\ & =\sum_{i=1}^n P_i~ \frac {1}{m_i} \sum_{j=1}^{m_i} \left[y(\dot{x}_{i,j})-E(y(x)|x∈A_i)\right] ~~~~~~~~~~~~ (6.103)' \end{align} \]6.103'式の最後の右辺にある \(1/m_i \sum_{j=1}^{m_i} \left[y(\dot{x}_{i,j})-E\left(y(x)|x∈A_i\right)\right]~~は、~A_i\) 層内でのサンプル平均と真の平均との差になっています。これはまさに 層別内サンプルの推定誤差であり、中心極限定理により、平均 0,分散 \(Var_i(x)/m_i\) で正規分布します。
\[ \frac {1}{m_i} \sum_{j=1}^{m_i} \left[y(\dot{x}_{i,j})-E(y(x)|x∈A_i)\right] ~~~~ \sim ~~~ \mathscr {N} (0,\frac{Var_i(y(x))}{m_i}), \tag{6.104} \]すると、これを正規分布する確率変数と見做せば、全体の推定誤差を示す 6.103 式は、層別に正規分布する確率変数の線形結合と見なせます。正規分布する確率変数の線形結合は、やはり正規分布する確率変数になり、かつ分散は層別分散 \(Var_i(y(x))\) の確率加重平均、すなわち \(Var_{層別 }(y)\) となります(層別推定誤差は互いに独立なので、共分散は 0 )。最終的に 6.103 式は、層別サンプリング法を使った場合の推定誤差が \(\mathscr {N} (0,Var_{層別 }(y)/M)\) の正規分布をする事を意味します。
\[ y_{サンプル平均}-E(y(x))=\sum_{i=1}^n P_i~ \frac {1}{m_i} \sum_{j=1}^{m_i} \left[y(\dot{x}_{i,j})-E(y(x)|x∈A_i )\right] \\ \sim ~~~ \mathscr {N}\left(0,\frac {Var_{層別} (y)}{M}\right) \tag{6.105} \]\(Var_{層別} (y)\) が、シンプルな MCS のサンプル分散 \(Var(y)≈v_s\) より小さくなる事は、ある程度直観でも判ると思いますが、以下に数式で示します。
まず層別サンプリング法を使った場合の \(y(x)\) の分散を、2つの要因に分解します。すなわち y(x) は、層別の条件付き期待値と、期待値からの乖離(誤差)の和として表現できるので、下記のような式が成立します。
\[ y(x)=E(y(x)|x∈A_i )+ϵ \]この時、ϵ は y の変動要因の内、\(E(y(x)|x∈A_i)\) で説明できない部分なので、\(E(y(x)|x∈A_i)\) とは独立、すなわち相関 0 です。また、\(E(ϵ)=0\) になるのも自明です。従って、両辺の分散を取ると、下記式のように、分散が2つのファクターに分解できます。(共分散項は 0 なので、式から消えています)
\[ \begin{align} Var(y) & = Var(E(y(x)|x∈A_i))+Var(ϵ)=Var(y_{i層平均})+ E(ϵ^2) \\ & =Var(y_{i層平均})+E\left[E \left(ϵ^2│x∈A_i \right) \right] \end{align} \]ここで、右辺第2項の期待値演算の中にある \(E\left(ϵ^2 |x∈A_i\right)\) は \(A_i\) の層別平均からの乖離の2乗なので、まさに層別分散そのものです。すなわち
\[ E\left(ϵ^2 |x∈A_i \right) = E\left[ \left(y(\dot{x})-y_{i層平均}\right)^2 |x∈A_i \right]=Var_i(y(x)) \]これをVar(y)の式に代入すれば、
\[ Var(y)=Var(y_{i層平均})+E[Var_i(y)]= Var(y_{i層平均})+ Var_{層別 }(y) \tag{6.106} \]となります。この式が意味する所は、y のサンプル分散は、層別平均の分散と、層別分散の確率加重平均に分解できるという事です。
6.105 式で示した通り、層別サンプリング法を使った場合の推定誤差の分布は、平均 0 で分散が \(Var_{層別 }(x)/M\) でした。という事は、層別サンプリング法では、6.105 式の第2項のみが推定誤差に影響を与え、第1項の分散の影響は取り除かれてしまうという事です。これを視覚的に見てみましょう。
前に示した、無作為抽出によるサンプル数のヒストグラムと、層別サンプリング法によるヒストグラムのグラフを再度見て下さい。有限個のサンプルの無作為抽出では、各層のサンプル数が、その層の確率測度に比例した数で生成されるとは限らず、どうしてもばらつきが出てしまいます。すると、層別平均を確率加重平均しても、全体の期待値からは、どうしてもずれてしまいます。すなわち、6.105式の第1項のファクターが推定誤差に影響するという事です。
一方、層別サンプリング法では、各層のサンプル数が確率測度に比例しているので、層別平均の確率加重平均は、真の平均により近くなります。言い換えると、層別サンプリング法により、全体のサンプル平均の推定誤差から、\(Var(y_{i層平均})\) の要因が取り除かれるという事です。
6.6.4.4.5 マルチファクターのブラウン運動の層別サンプリング
これまでの層別サンプリング法の説明は、確率変数が1 個のブラウン運動で駆動されるシングルファクターモデルを想定していました。しかし実際に MCS で価格評価する必要がある商品は、LMM などのマルチファクターモデルで評価するエキゾチックデリバティブズや、 Asian Option や Barrier Option のような経路依存型のデリバティブズです。LMM や経路依存型のモデルでは、ブラウン運動のベクトルが必要ですが、こういった場合、確率変数の値域を層別化するにはどうすればいいでしょうか?
LMM では、確率変数(フォワードLibor)が、複数(3~5)のブラウン運動で駆動され、かつ現時点から最終期日までを、一定期間の離散時間で分割し、各離散時間での微小変化を、それぞれ独立したブラウン運動でシミュレーションします。従って、一個のサンプル経路を生成するのに、数百個の標準正規乱数を必要とします。言い換えるとサンプル値となる Payoff 関数 \(y(x)~は、\mathbb{R}^d~ →~ \mathbb {R} \) の関数となります。これまで、層別化は y 自体ではなく、y が依存する標準正規乱数 x を層別化して行いましたが、x がベクトルの場合、そのすべての要素を層別化するのは現実的ではありません。分割される層の数が指数的に増加するからです。
デリバティブズの価格は、オプション行使時の Payoff 関数の期待値として求まるので、層別化するのは、オプション行使時における確率変数の分布(値域)が適切です。Bermudan Option や American option のように、行使日が複数ある場合はやっかいですが、その場合、層別化はせいぜい重要と思われる期限前行使日1~2個を追加するのが精いっぱいでしょう。ここでは、最終期日のみで確率変数の層別化をする場合を解説します。
< Brownian Bridge (ブラウン運動接続) >
一般的なLMMでは、確率変数(フォワードLibor)が3~5個のブラウン運動で駆動されると仮定します。従って、最終期日における多次元空間の層別化が必要になります。すでに説明した通り、LMMではフォワードLiborの値域を層別化するのではなく、それを駆動する標準正規乱数を層別化します。さらに言えば、標準正規乱数の元になる多次元の一様乱数を層別化します。多次元の一様乱数の値域は、Unit Hyper Cube(d次元超立方体 \([0,1)^d\))とみなせるので、まずそれを層別化し、各層の一様乱数を標準正規乱数に変換します。そして、その値に、現時点から最終期日までの期間の平方根(ブラウン運動は、分散が時間に比例し、その平方根は、その時点までのブラウン運動のVolatilityに相当)を掛ければ、最終期日におけるブラウン運動の分布とみなせます。これで、サンプル経路の到達点を示す正規乱数が層別化された事になります。
次に、到達点からスタート点を、ブラウン運動のベクトルで繋ぎます。ここで、いわゆるBrownian Bridge (注:ブラウン橋と訳されている文献を多く見かけますが、”ブラウン(運動)接続”と訳す方がいいのではないかと思います)と呼ばれている方法を使います。ブラウン運動接続は、ブラウン運動による拡散過程の、始点と到達点が決まっている場合、その中間点の条件付き確率分布を示すものです。結論から言えば、始点の値が \(w(t_s)\)、終点の値が \(w(t_e)\) として与えられている場合、その中間の任意の時点の確率分布は
\[ w(t) ~~~ \sim ~~ \mathscr{N} \left( \frac{t_e-t}{t_e-t_s }w(t_s )+ \frac{t-t_s}{t_e-t_s} w(t_e ), ~~~\frac{(t_e-t)(t-t_s )}{t_e-t_s}\right) \tag{6.107} \]となります。すなわち、平均は始点と終点を繋いだ直線上にあり、分散は\(t_e-t\) 間の分散と \(t-t_s\) 間の分散の期間加重平均になります(0→t 間のブラウン運動の分散は t になります)。(Brownian Bridgeについては、英語版Wikiに、簡単な解説があるので、そちらを参考にして下さい。)
最終期日を層別化した場合の、経路のブラウン運動の生成方法のアルゴリズムは以下のようになります。
- まず最終期日における d 次元の正規乱数のサンプルを層別化して生成します。生成されたサンプルを
\(\sqrt{t_e} \times \dot{x}_{i,j,k},~~~i=1,...,d,~~~~j=1,...,n,~~~k=1,...,m_j~~ \) と表記します。
i は次元のインデックス、j は、n 個に層別化された各層を示すインデックス、k は j 層内の個別サンプルのインデックスで、\(m_j\) はその層内のサンプル数です。従って、サンプル数の合計は、 \(d \times \sum_{j=1}^n m_j =M\) となります。 - 次に、現時点 \(t_0=0\) から、最終期日 \(t_e\) までを、e 個の離散時間に分割し、各時点を \(t_l,~~l=1,2,…,e\) とします。
- \( M \times (e-1)\) 個の独立な標準正規乱数を生成します。それを
\(z_{i,j,k,l}~~~~i=1,…,d,~~~j=1,…,n,~~~k=1,…,m_j,~~~l=1,…,e-1 \)
とします。最終期日 \(t_e\) の乱数は、層別化されて生成済みの \(x_{i,j}\) を使うので、\(z_{i,j,k,e}\) は必要ありません。 - \(t_0=0\) からスタートして、次の再帰式で、順番にサンプル経路上のブラウン運動 \(w_{i,j,k}(t_l)\) を生成します。
\[ w_{i,j,k}(t_l)=\frac{t_e-t_k}{t_e-t_0} w_{i,j,k}(t_{l-1}) +\frac{t_k-t_0}{t_e-t_0} \sqrt{t_e}\times x_{i,j,k} \\ + \sqrt{\frac{(t_e-t_k )(t_k-t_0 )}{t_e-t_0}} z_{i,j,k,l} \tag{6.108} \] - 以上の操作を、すべての層別化されたサンプル \(\sqrt{t_e}\times x_{i,j,k}\) で行う。
これで、Brownian Bridge(ブラウン運動接続)によるブラウン運動の d 次元のサンプル経路が M 個出来上がりました。これを LMM に代入すればフォワード Libor の層別化されたサンプル経路が出来上がります。これをすべてのフォワード Libor について行えば、イールドカーブの拡散過程がシミュレーションでき、さらにデリバティブズの Payoff が計算でき、そのサンプル平均が求まります。
6.6.4.4.6 最適な層別化と最適なサンプル数配分
層別サンプリング法は、単純に、確率変数の値域を均等な確率測度で層別化し、確率測度に比例したサンプル数を配分するだけでも、推定誤差を小さくするのに十分有効です。それらを均等にしておけば、コンピューターアルゴリズムがシンプルになるので、より汎用的です。しかし、層別化を均等にせず、重要な領域でより細密に行い、重要でない領域で疎にすれば、同じ総サンプル数で、推定誤差をより小さくできます。あるいは、重要な領域で、恣意的により多くのサンプル数を生成し、重要でない領域ではサンプル数を少なくしても、推定誤差をさらに小さくできます。ここで言う重要な領域とは、層別分散の期待値が大きい領域を意味します。ただし、層別分散の期待値を解析的に求めるのは難しく、事前に簡単な(少ないサンプル数で)層別サンプリング法を使ったテストシミュレーションを行い、層別分散の期待値が大きくなる領域を探すします。そのテストシミュレーションに計算時間が多少かかっても、推定誤差の低減効果がそれを上回るのであれば、試みる価値はあります。但し、層別化やサンプル配分を恣意的に行う場合、個別商品の特性が大きく影響するので、そのようなアルゴリズムは、個別商品ごとに特性をよく分析した上で構築する必要があります。ここでは、層別化とサンプル配分を恣意的に行う場合の、基本的な考え方について簡単に説明します。
層別サンプリング法による推定誤差は 6.105 式で示した通り、平均 0,分散 \(Var_{層別}(y)/M\) の正規分布になるのでした。従って、同じサンプル数 M の中で推定誤差を小さくするには、\(Var_{層別 }(y)\) を小さくすればいいのですが、\(Var_{層別}(y)=\sum_{i=1}^n P_i \times Var_i(y)\) の関係式から、結局は、層別分散の期待値となる \(P_i\times Var_i(y)\) を小さくすればいい訳です。単純に考えれば、\(P_i \times Var_i(y)\) が大きい層をより細分化すれば、\(Var_{層別}(y)\) は小さくなります。また層別のサンプル数を恣意的に決める場合は、\(P_i\times Var_i(y)\) が大きい層のサンプル数を、恣意的に増やし、そうでない層のサンプル数を恣意的に減らしても推定誤差を小さくできます。例えば、ヨーロピアンオプションの場合は、out of the money の領域では Payoff は 0 で、\(Var_i(y)=0\) となるので、その領域を一つにまとめてしまい、サンプル配分を 0 にしても問題ありません。一方、in the money の領域でも、確率測度 \(P_i\)が非常に小さくなる領域(例えば、\(σ \times 4~ or~ 5 \) 以上の領域)では、やはり層をひとまとめにして、限られた数のサンプルを配分するだけで十分です。
また、層の範囲を狭くすればするほど \(Var_i(y)\) は小さくなるので、同じ総サンプル数 M であれば、層をより細分化して、各層のサンプル数を減らした方が、推定誤差を低減できます。極端に言えば、領域の分割を総サンプル数と同じ数にして、各層に 1 個ずつサンプルを生成させれば、同じサンプル数 M で \(Var_i(y)\) を最小化できます。こうなるともはや、期待値計算を数値積分で行っているのと同じです。実際、標準正規乱数列を、Sobol列などの準乱数列を基に生成して MCS を行えば、これに近い操作になります。モデルが標準正規乱数で駆動されるような場合は、層別化した乱数を生成するのは難しくないので、これでもいいでしょう。ただ、確率変数によっては、分布関数の逆関数が解析的に求まらないケースがあり、そういった場合は、受理棄却法など別のアルゴリズムで層別サンプルを生成する必要があります。受理棄却法では、層を細分化すると、層別サンプルを生成するのに、無駄な(棄却される)乱数生成が大量に発生し、サンプル生成に時間がかかります。そうすると、推定誤差の低減効果を減殺してしまいます。
いずれにしても、\(P_i\times Var_i(y)\) は、大半のケースで解析的に求まらないので、事前に簡単の層別サンプリング法によるシミュレーションを行って、\(P_i \times Var_i(y)\) が高い領域を探す必要があります。また、経路依存型のオプションでは、最終期日における \(P_i \times Var_i (y)\) だけを見ても、うまく判別できない可能性があります。いずれにしても層別化を恣意的に行う場合、商品特性に合わせ具体的なアルゴリズムを構築する必要があります。