🎓 レベル:標準 | 重要度:A(必須)
📎 前提:ランダムウォークと効率的市場仮説 | 数理:ブラウン運動(統計)・正規分布(標準正規・標準化)(統計)
要点(BLUF)
- ブラウン運動(ウィーナー過程) は、ランダムウォークの刻みを無限に細かくした連続時間の極限。独立増分・正規増分・連続経路という性質を持ちます。
- 価格を (算術ブラウン運動)でモデル化すると負の価格が出てしまいます。株価には (幾何ブラウン運動 GBM)を使います。
- GBM の解は 。終端価格 は対数正規分布に従い、常に正で、リターンの非対称性も自然に表現されます。
1. ブラウン運動(連続時間の極限)
ランダムウォークと効率的市場仮説 のランダムウォークで、時間刻みを にした極限がブラウン運動 です。定義する性質は次の3つ(詳細は ブラウン運動(統計))。
- 独立増分:重ならない区間の増分は互いに独立
- 正規増分:(増分の分散は時間幅に等しい)
- 経路は連続(だがいたるところ微分不可能)
増分の分散が時間に比例する(標準偏差は )ことが、リスクの測り方 の √t則の連続版です。この が、これ以降すべての連続時間モデルの「ランダムさの源泉」になります。
2. 算術ブラウン運動と幾何ブラウン運動
ブラウン運動で価格を動かす最も素朴な方法は、算術ブラウン運動です。
これは正規分布なので、確率的に負の値を取ります。株価は0未満になれないので、価格モデルとしては不適切です。そこで「変化率がブラウン運動で動く」と考えるのが**幾何ブラウン運動(GBM)**です。
ここで はドリフト(期待成長率)、 はボラティリティ。両辺を で割ると ——左辺は瞬間リターンで、「リターンが平均 ・ボラ で揺れる」という、リターンの測り方 の自然な連続版になっています。2つを並べて描きます。
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
rng = np.random.default_rng(1)
S0, mu, sigma, T, N = 100.0, 0.10, 0.20, 1.0, 252
dt = T/N
t = np.linspace(0, T, N+1)
n_paths = 6
dW = rng.normal(0, np.sqrt(dt), (n_paths, N)) # 増分
W = np.concatenate([np.zeros((n_paths, 1)), np.cumsum(dW, axis=1)], axis=1)
X = mu*t + sigma*W # 算術ブラウン運動
S = S0*np.exp((mu - 0.5*sigma**2)*t + sigma*W) # 幾何ブラウン運動
fig, ax = plt.subplots(1, 2, figsize=(11, 4))
ax[0].plot(t, X.T, lw=1); ax[0].axhline(0, color="k", lw=0.8)
ax[0].set_title("算術ブラウン運動(0 を割って負にもなる)"); ax[0].set_xlabel("時間 t")
ax[1].plot(t, S.T, lw=1)
ax[1].set_title("幾何ブラウン運動(常に正)")
ax[1].set_xlabel("時間 t"); ax[1].set_ylabel("価格")
plt.tight_layout(); plt.show()
出力の意味:左の算術ブラウン運動は0の線を平気で割り込み、負の「価格」が現れます。右の GBM はどの経路も常に正で、価格として自然です。違いは「絶対額が揺れる」か「変化率が揺れる」か。GBM は変化率(リターン)が一定のボラで揺れるので、価格が高いときは値動きも大きく、0 には漸近しても到達しません。
3. GBMの解と対数正規分布
GBM の確率微分方程式 の解は
です(この導出には確率過程の連鎖律が要る——次の 伊藤の補題 でやります)。注目すべきは指数の肩の という補正項。これがあるおかげで、対数価格 は正規分布
に従い、 自身は対数正規分布になります。1年後の価格を大量に生成して分布を見ます。
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
from scipy import stats
rng = np.random.default_rng(1)
S0, mu, sigma, T = 100.0, 0.10, 0.20, 1.0
M = 200000
W_T = rng.normal(0, np.sqrt(T), M) # 終端のブラウン運動
S_T = S0*np.exp((mu - 0.5*sigma**2)*T + sigma*W_T) # 1年後の価格
print(f"E[S_T] (シミュ) = {S_T.mean():.4f}")
print(f"S0*e^(μT) = {S0*np.exp(mu*T):.4f}")
print(f"中央値 (シミュ) = {np.median(S_T):.4f}")
print(f"S0*e^((μ-σ^2/2)T) = {S0*np.exp((mu-0.5*sigma**2)*T):.4f}")
print(f"P(S_T < S0) = {np.mean(S_T < S0):.4f}")
plt.figure(figsize=(7, 4))
plt.hist(S_T, bins=120, density=True, alpha=0.4, label="シミュレーション")
x = np.linspace(S_T.min(), np.percentile(S_T, 99.5), 400)
pdf = stats.lognorm.pdf(x, s=sigma*np.sqrt(T), scale=S0*np.exp((mu-0.5*sigma**2)*T))
plt.plot(x, pdf, "r-", lw=2, label="対数正規 pdf(理論)")
plt.axvline(S_T.mean(), color="green", ls="--", label="平均")
plt.axvline(np.median(S_T), color="purple", ls=":", label="中央値")
plt.xlabel("1年後の価格 S_T"); plt.ylabel("密度")
plt.title("GBM の終端価格は対数正規分布")
plt.legend(); plt.tight_layout(); plt.show()
出力:
E[S_T] (シミュ) = 110.4566
S0*e^(μT) = 110.5171
中央値 (シミュ) = 108.2834
S0*e^((μ-σ^2/2)T) = 108.3287
P(S_T < S0) = 0.3452
出力の意味:分布は右に裾を引いた対数正規で、理論 pdf(赤線)とよく重なります。重要なのは平均(110.46)と中央値(108.28)がズレていること。対数正規は非対称なので、 に対し中央値は と低くなります。さらに ——ドリフトが正(年10%)でも、1年後に値下がりしている確率は約35%。「平均は上がるが、過半数は中央値以下」という株価の直感に反する性質が、この補正項 から自然に出てきます。これは リターンの測り方 のボラティリティ・ドラッグの正体でもあります。
⚠️ よくある誤解
- 「ドリフト が価格の期待成長率の指数」ではない(中央値の話では): は正しいですが、典型的な経路(中央値)は で増えます。平均は一部の大当たり経路に引っ張られています。
- ブラウン運動の経路は微分できない: は「微分」ではなく増分の記号です。 という通常の微積分にない規則が必要で、これが次の伊藤の補題の出発点です。
- GBM はボラ一定を仮定する:現実のボラは時間変動し(ボラティリティ・クラスタリング)、暴落もジャンプします。GBM は出発点のモデルで、確率ボラ(Heston)やジャンプ拡散は第9章で扱います(要最新確認)。
関連ノート
- 第3章 確率過程と資産価格 目次
- ランダムウォークと効率的市場仮説 — 前提:離散のランダムウォーク
- 伊藤の補題 — 次のトピック:GBM の解を導く連鎖律
- 幾何ブラウン運動による資産価格モデル — GBM を価格モデルとして使う
- ブラウン運動(統計)・正規分布(標準正規・標準化)(統計)— 土台
- 金融工学テキスト 全体目次