Abstract
オプション価格付けにおけるモンテカルロ法の実用性について述べる
オプション価格付けと数値積分
オプションの価格は、原証券の条件付き期待値をディスカウントファクターで割り引いたものとして求められる。すなわち、期待値=積分の計算がオプションプライシングの要である.
ブラックショールズのような単純なモデルとヨーロピアン・オプションのような単純なオプションの組み合わせなら解析解が得られるが、多くの実務的な場面では、単純な解析解が得られず、数値計算に頼らざるを得ない。
モンテカルロ法
数値積分を考える際には、まずは台形則のような素朴な求積法を用いることを考えるが、素朴な求積法では、次元が増加すると、サンプルサイズに対する収束性が悪くなる。(次元の呪い)
誤差のオーダーが次元に依存しない手法のひとつに、モンテカルロ法がある。モンテカルロ法は、乱数を用いた数値積分法の総称である。モンテカルロ法の一般的なスキームでは、誤差のオーダーは常に $O(\frac{1}{\sqrt{n}})$ である. これは、近似の精度を10倍よくしたければ、計算量を100倍増やす必要があることを意味する。
この収束速度が十分に実用に足る程度速いといえるか、遅いかは、実務の内容によるし、利用可能な計算機のマシンパワーにもよる。しかし、一般的に、HFT(高頻度取引)の実務に使うには遅すぎると言われている。
モンテカルロ法の亜種
モンテカルロ法を改良した、より効率的なサンプリング手法を紹介する.
準モンテカルロ法
準乱数を用いたモンテカルロ法を準モンテカルロ法という. 準モンテカルロ法では誤差のオーダーは$O(\frac{1}{n})$である.
マルコフ連鎖モンテカルロ法(MCMC)
多重積分を計算するには、通常、マルコフ連鎖モンテカルロ法が用いられる。多次元の複雑な分布の場合、モンテカルロ法よりMCMCの方が効率的な場合が多い。
輔弼
モンテカルロ法を用いた数値積分の計算速度の問題は以下に分解できる
- 一様乱数の生成の速度
- 任意の分布への変換の速度
- 数値積分の収束速度
上述の計算量の議論は3.に相当する.
他にも、1,2における計算速度を速めることも、数値積分の高速化に寄与する.
輔弼2
計算時間 ( T ) を短縮するには、計算コストと収束の速さの関係を理解し、適切に最適化することが重要です。以下のように要素分解すると、どの部分を改善すれば時間が短縮できるのかが明確になります。
1. 計算時間の要素分解
計算時間 ( T ) は、次の3つの要素に分解できます。
[
T = (\text{1回の計算コスト}) \times (\text{総計算回数})
]
さらに、総計算回数は収束までに必要なステップ数やモンテカルロ試行回数に依存するので、
[
T = (\text{1回の計算コスト}) \times (\text{収束に必要なステップ数}) \times (\text{試行回数})
]
各要素の説明
-
1回の計算コスト ( C )
- 1ステップまたは1試行あたりの計算時間
- 数値解法の種類(オイラー・丸山法 vs. ミルシュタイン法)
- ループの計算量、行列演算、並列化の有無
- GPUや並列計算の活用で削減可能
-
収束に必要なステップ数 ( N )
- 時間ステップ ( h ) の選び方
- 数値解法の精度(ミルシュタイン法はオイラー・丸山法より少ないステップで済む)
- マルチレベルモンテカルロ法(MLMC)の利用で削減可能
-
試行回数 ( M )
- モンテカルロ法のサンプル数
- 準モンテカルロ法や分散縮小技術(制御変数法・対称サンプリング)で削減可能
2. 計算時間を短縮する方法
上の分解式をもとに、どの要素を削減すれば時間短縮につながるかを考えます。
(1) 1回の計算コスト ( C ) を減らす
- シンプルな数値解法を使う(ただし、精度とトレードオフ)
- 行列演算の最適化(行列を疎行列として扱うなど)
- GPUや並列計算を活用する(NVIDIA CUDA, OpenMP, MPI)
(2) 収束に必要なステップ数 ( N ) を減らす
- 高次の数値解法を使う(ミルシュタイン法、ルンゲ・クッタ型手法)
- 適応時間ステップを導入(変化が激しいところで小さいステップ、なだらかなところで大きなステップ)
- マルチスケール・マルチレベル手法を使う(マルチレベルモンテカルロ法)
(3) 試行回数 ( M ) を減らす
- 準モンテカルロ法(Sobol列など)を使う(乱数の偏りを減らして少ない試行で高精度にする)
- 分散縮小技術を使う(対称サンプリング、制御変数法、ストラティファイドサンプリング)
- マルチレベルモンテカルロ(MLMC)を使う(粗いシミュレーションと細かいシミュレーションを組み合わせる)
3. 具体的な改善戦略
方法 | 影響する要素 | 期待される効果 |
---|---|---|
並列計算(GPU, MPI, OpenMP) | ( C ) | 1回の計算を高速化 |
高次スキーム(ミルシュタイン法) | ( N ) | 収束を早めて必要なステップ数を削減 |
マルチレベルモンテカルロ(MLMC) | ( N, M ) | ステップ数と試行回数を同時に削減 |
準モンテカルロ法 | ( M ) | 必要な試行回数を減らす |
分散縮小技術 | ( M ) | 試行回数を減らしながら精度を維持 |
適応時間ステップ | ( N ) | 必要な計算回数を減らす |
4. まとめ
計算時間 ( T ) を短縮するには、次の3つをバランスよく改善することが重要。
- 計算コスト ( C ) を減らす(並列化・効率的な計算手法を使う)
- 収束に必要なステップ数 ( N ) を減らす(高精度な数値解法を選ぶ、適応時間ステップを導入)
- 試行回数 ( M ) を減らす(準モンテカルロ法や分散縮小技術を活用)
計算コストが小さい手法を選んでも、収束が遅ければ総計算時間が増えてしまうし、逆に高精度な手法を選んでも1回の計算コストが大きくなりすぎると計算時間がかかる。このトレードオフを意識しながら最適な手法を選ぶことが重要です。