🎓 レベル:標準 | 重要度:A(必須)
📎 前提:伊藤の補題 | 関連:モンテカルロ法によるオプション価格(モンテカルロ価格づけ)
要点(BLUF)
- GBM の解 を価格モデルとして使えば、任意の時点の価格を直接サンプリングできます。
- モンテカルロ法で多数の価格経路を生成すれば、将来分布・到達確率・期待値を数値で得られます。これが第6章のデリバティブ価格づけの土台です。
- 観測した対数リターンから を逆算(キャリブレーション)できますが、 は精度よく、 は何十年あっても精度が出ない——この非対称性がリスク中立評価(第4章)の伏線です。
1. GBMによる価格経路の生成
伊藤の補題 で導いた解は、各時刻の価格をシミュレーションの近似なしに直接与えてくれます(厳密解なので離散化誤差ゼロ)。
ブラウン運動 を増分の累積で作り、その経路に上の式を当てれば価格経路ができます。1万本の経路を生成し、**パーセンタイルバンド(ファンチャート)**で将来の散らばりを可視化します。
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
rng = np.random.default_rng(3)
S0, mu, sigma, T, N = 100.0, 0.10, 0.20, 1.0, 252
dt = T/N
t = np.linspace(0, T, N+1)
M = 10000
dW = rng.normal(0, np.sqrt(dt), (M, N)) # 増分
W = np.concatenate([np.zeros((M, 1)), np.cumsum(dW, axis=1)], axis=1)
S = S0*np.exp((mu - 0.5*sigma**2)*t + sigma*W) # 全経路(厳密解)
qs = [5, 25, 50, 75, 95]
bands = np.percentile(S, qs, axis=0)
plt.figure(figsize=(8, 5))
for i in range(30): # 経路を数本だけ薄く描く
plt.plot(t, S[i], lw=0.4, color="gray", alpha=0.5)
for q, band in zip(qs, bands):
plt.plot(t, band, lw=2, label=f"{q}パーセンタイル")
plt.plot(t, S0*np.exp(mu*t), "k--", lw=2, label="平均 S0·e^(μt)")
plt.xlabel("時間 t(年)"); plt.ylabel("価格")
plt.title("GBM の価格経路とパーセンタイルバンド")
plt.legend(); plt.tight_layout(); plt.show()
print("1年後の価格のパーセンタイル:")
for q in qs:
print(f" {q:>2}% : {np.percentile(S[:, -1], q):.2f}")
出力:
1年後の価格のパーセンタイル:
5% : 77.59
25% : 94.45
50% : 107.88
75% : 123.61
95% : 149.83
出力の意味:1年後の価格は5%点で 77.59、95%点で 149.83 と、大きく広がります(中央値は 107.88)。時間とともにバンドがラッパ状に開いていくのが、不確実性が √t で増える様子です。バンドは中央値より上側に広い——対数正規の右の裾です。この「将来分布を経路ごと丸ごと持っている」状態が強力で、たとえば「1年後に120円を超える確率」も np.mean(S[:, -1] > 120) で即座に計算できます。デリバティブの価格づけ(第6章)は、まさにこの経路群の上でペイオフを平均する操作です。
2. キャリブレーション:データからμ・σを逆推定
モデルを使うには を決める必要があります。観測した日次対数リターンから逆算します。GBM では日次対数リターンが平均 ・標準偏差 なので、
で推定できます( の式の は伊藤補正の戻し)。40年ぶんの「観測データ」を作って、 を復元できるか試します。
import numpy as np
rng = np.random.default_rng(19)
S0, mu, sigma, T, N = 100.0, 0.10, 0.20, 1.0, 252
dt = T/N
n_years = 40
# n_years 年ぶんの日次対数リターン(観測データのつもり)
dW = rng.normal(0, np.sqrt(dt), N*n_years)
log_ret_daily = (mu - 0.5*sigma**2)*dt + sigma*dW
# 逆推定(キャリブレーション)
sigma_hat = log_ret_daily.std(ddof=1) / np.sqrt(dt)
mu_hat = log_ret_daily.mean()/dt + 0.5*sigma_hat**2
print(f"真の値 : μ = {mu}, σ = {sigma}")
print(f"推定値 : μ_hat = {mu_hat:.4f}, σ_hat = {sigma_hat:.4f}")
print(f"μ_hat の標準誤差 およそ {sigma_hat/np.sqrt(n_years):.4f}(40年でもこの大きさ)")
出力:
真の値 : μ = 0.1, σ = 0.2
推定値 : μ_hat = 0.0947, σ_hat = 0.2001
μ_hat の標準誤差 およそ 0.0316(40年でもこの大きさ)
出力の意味: は真の をほぼ完璧に復元します。いっぽう は近いものの、標準誤差が もあります——40年というありえないほど長いデータを使っても、ドリフト は ±3%程度の精度でしか決まらない。 の標準誤差は で、これを ±1% にするには約400年が必要です。ボラはサンプルを細かくするほど精度が上がるのに、ドリフトはサンプル期間の長さでしか改善せず、現実的には測れません。「 は推定できない」というこの事実が、次章で**オプション価格が に依存しない(リスク中立評価)**という驚きの結果につながります。
3. 何に使うのか
GBM+モンテカルロのセットは、金融工学の数値計算エンジンです。
- 将来分布のシナリオ:年金・保険の積立や資産形成のシミュレーション。
- デリバティブ価格づけ:満期ペイオフを多数経路で平均し割り引く(第6章 モンテカルロ法によるオプション価格)。
- リスク指標:将来損失の分布から VaR・CVaR を求める(第8章)。
いずれも「価格の将来分布を経路ごと持つ」ことが出発点で、その分布を与えるのが GBM です。
⚠️ よくある誤解
- 「経路を細かく刻むほど厳密解が要る」ではない:GBM は解析解があるので、 を時間刻みの誤差なく直接サンプリングできます。オイラー近似 には離散化バイアスが入りますが、厳密解の指数形なら不要です。
- キャリブレーションでμを信用しすぎない: は標準誤差が大きく、将来予測には使えません。価格づけが に依らない(リスク中立)のは、この弱点を回避する設計でもあります。
- GBM は現実の近似:ボラ一定・正規ショック・ジャンプなしという仮定は、暴落やボラのクラスタリングを捉えきれません。出発点として強力ですが、過信は禁物(第9章で拡張・要最新確認)。
関連ノート
- 第3章 確率過程と資産価格 目次
- 伊藤の補題 — 前提:GBM の解の導出
- モンテカルロ法によるオプション価格 — この経路生成を価格づけに使う
- 二項モデルとリスク中立評価 — μ に依存しない価格づけ
- 金融工学テキスト 全体目次 — 第4章 デリバティブと無裁定へ続く