「大人の教養・知識・気付き」を伸ばすブログ

一流の大人(ビジネスマン、政治家、リーダー…)として知っておきたい、教養・社会動向を意外なところから取り上げ学ぶことで“気付く力”を伸ばすブログです。データ分析・語学に力点を置いています。 →現在、コンサルタントの雛になるべく、少しずつ勉強中です(※2024年1月21日改訂)。

MENU

金融工学でのモンテカルロ法(12/23):Curranの方法

 金融工学におけるシミュレーションについて学んでいく。テキストとして以下を使う。今回はP.89-94まで。


power-of-awareness.com

6. 分散減少法

 \mathrm{Monte\ Carlo}法は

  • 問題に沿った(同時)分布に従う(多変量)乱数列の生成
  • その乱数列を使った計算

の2つの部分に分けて考えられる。乱数列の生成は更に

  1. 一様分布に従う乱数列\{u_1,u_2,\cdots,u_n\}の生成
  2. それを元にした必要な同時分布に従う乱数列\{\boldsymbol{x}_1,\boldsymbol{x}_2,\cdots,\boldsymbol{x}_n\}の生成

に分けられる。

 \mathrm{Monte\ Carlo}法は高次元問題を取り扱うことはできるものの、誤差を減らすには大きな時間が掛かり時間効率が低い。そこで本章では時間効率を上げるための手段の1つとして分散減少法を説明する。\mathrm{Monte\ Carlo}法における解の統計的誤差は点列数Nに対してk/\sqrt{N}に出来る。分散減少法はこのkを減らす試みである。
 \mathrm{Monte\ Carlo}法による関数f積分値を


\begin{aligned}
E^{*}[f(X)]
\end{aligned}

と書くことにすると、\mathrm{Monte\ Carlo}法のアイディアは以下の2つに分けることが出来ると言える:

  • 関数fを同じ積分値を取る別の関数に置換え
  • 期待値E^{*}[\cdot]の取り方を変更
関数fを同じ積分値を取る別の関数に置換え
期待値E^{*}[\cdot]の取り方を変更
(1) 負の相関法 (1) 条件付き\mathrm{Monte\ Carlo}
(2) 制御変量法 (2) 層別化法
(3) 回帰分析法 (2-1) ラテン・ハイパーキューブ法
(4) マルチンゲール分散法 (2-2) \mathrm{Curran}の方法
(3) 加重サンプリング法
(4) 測度変換法

6.3.2 Curranの方法

 \mathrm{Curran}は層別化法が多次元積分問題に適用しにくいことを受けて独自のアルゴリズムを提唱した。①決定系列を利用している点、②同じ点列をシャッフルして何度も使う点が特徴的である。誤差の収束が保証されていないものの強力な効果を発揮する。

\mathrm{Curran}の方法のアルゴリズム

(1) 代表点列(*後述)\boldsymbol{\zeta}^{1}=(\zeta_{1}^{1},\cdots,\zeta_{b}^{1})を生成する。
(2) 代表点列\boldsymbol{\zeta}^{1}をシャッフルして\boldsymbol{\zeta}^{j},\ j=2,\cdots,Mを生成する。
(3) リスク中立な株価過程の第iサンプルパスi=1,\cdots,b
\begin{aligned}S_{i(j+1)}=S_{ij}+rS_{ij}\Delta t+\sigma\sqrt{\Delta t}S_{ij}\zeta_{i}^{j},\ j=1,\cdots,M\end{aligned}
に従って発生させる。

 第j次元の積分を行なうとして、それに用いる点列\boldsymbol{\zeta}^{j}b個に層別化されており、各層が1点からなるものとする。すなわち


\begin{aligned}
\boldsymbol{\zeta}^{j}=(\zeta_1^{j},\cdots,\zeta_b^{j}),\ j=1,\cdots,M
\end{aligned}

とする。
 まず\boldsymbol{\zeta}^{1}のサンプリング方法を述べる。標準正規分布の定義域をb個の区間


\begin{aligned}
(k_0,k_1],[k_1,k_2],\cdots [k_{b-1},k_b),\ k_0=-\infty,k_b=\infty
\end{aligned}

に分割する。このとき分割点は、各点から各点への確率値が等しくなるように、すなわち


\begin{aligned}
\displaystyle{\int_{k_i}^{k_{i+1}}\phi(x)dx}=\displaystyle{\frac{1}{b}},\ i=0,1,\cdots,b-1
\end{aligned}

が成り立つように決める。その後、各点\zeta_{i}^{1}を各区間における条件付き期待値


\begin{aligned}
\zeta_i^1=b\displaystyle{\int_{k_i}^{k_{i+1}}\phi(x)dx},\ i=0,1,\cdots,b-1
\end{aligned}

で与える。これを代表点列と呼ぶ。次にランダム順列を用いて\boldsymbol{\zeta}^1の各値をシャッフルすることで\boldsymbol{\zeta}^iを与える。

6.4 加重サンプリング法

 積分する際、被積分関数fが特定の部分では大きな値を取ることに注目し、その部分を重点的にサンプリングすることで精度を上げる方法を加重サンプリング法という。
 確率変数X確率密度関数p(\cdot)に従うときの積分


\begin{aligned}
I=\displaystyle{\int_{-\infty}^{\infty}f(x)p(x)dx=E^{p}[f(X)]}
\end{aligned}

を考える。このときq(\cdot)p(\cdot)とは別の密度関数とすれば


\begin{aligned}
I=\displaystyle{\int_{-\infty}^{\infty}f(x)p(x)dx}=\displaystyle{\int_{-\infty}^{\infty}f(x)\frac{p(x)}{q(x)}q(x)dx}=E^{q}\left[f(Y)\displaystyle{\frac{p(Y)}{q(Y)}}\right]
\end{aligned}

と変形できる。したがって積分I


\begin{aligned}
\hat{I}=\displaystyle{\frac{1}{N}\sum_{i=1}^{N}f(y_i)\displaystyle{p(y_i)}{q(y_i)}}
\end{aligned}

で計算でき、このときにうまく密度関数q(\cdot)を選ぶことで誤差分散を減らすことが出来る。
 では誤差分散を最小にするようなp(\cdot)をどのように選べばよいか。これは


\begin{aligned}
q(y)=\displaystyle{\frac{p(y)f(y)}{I}}
\end{aligned}

とすることで


\begin{aligned}
V[\hat{I}]=\displaystyle{\frac{1}{N}E\left[\left(f(Y)\frac{p(Y)}{q(Y)}-I\right)^2\right]}=0
\end{aligned}

が成り立つ。ただしIが未知である以上、推定値\hat{I}で代用してq(Y)p(y)f(y)/\hat{I}の差が可能な限り小さくなるようなq(y)を選択する。

6.5 測度変換法

 \mathrm{Girsanov}の定理を利用した加重サンプリング法を測度法と呼ぶ。

プライバシーポリシー お問い合わせ