Mímisbrunnr知恵の泉

← 金融工学 一覧

🎓 レベル:標準 | 重要度:A(必須)

📎 前提:リターンの測り方 | 数理:確率過程(マルコフ連鎖・ポアソン過程)(統計)・時系列解析(定常性・ACF/PACF・AR・MA・ARMA・ARIMA)(統計)

要点(BLUF)

1. ランダムウォークモデル

もっとも単純な価格モデルは、価格が毎期ランダムなショックを足されて動くというものです。対数価格 pt=lnPtp_t=\ln P_t を使うと

pt=pt1+εt,εtiid(μ, σ2)p_t = p_{t-1} + \varepsilon_t, \qquad \varepsilon_t \overset{\text{iid}}{\sim} (\mu,\ \sigma^2)

このとき、対数リターン rt=ptpt1=εtr_t = p_t - p_{t-1} = \varepsilon_t独立同分布になります。価格そのものは Pt=P0exp(stεs)P_t = P_0\exp(\sum_{s\le t}\varepsilon_s) で、ショックの累積です(対数で考えるので価格は常に正に保たれます——これが 幾何ブラウン運動による資産価格モデル につながる「幾何」ランダムウォーク)。シミュレートして眺めます。

import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib

rng = np.random.default_rng(0)
T = 2000
log_ret = rng.normal(0.0003, 0.01, T)     # iid なリターン(ショック)
log_price = np.cumsum(log_ret)            # 対数価格=ショックの累積
price = 100*np.exp(log_price)

fig, ax = plt.subplots(1, 2, figsize=(11, 4))
ax[0].plot(price); ax[0].set_title("価格(幾何ランダムウォーク)")
ax[0].set_xlabel("時点"); ax[0].set_ylabel("価格")
ax[1].plot(log_ret, lw=0.5); ax[1].set_title("リターン(iid なショック)")
ax[1].set_xlabel("時点"); ax[1].set_ylabel("対数リターン")
plt.tight_layout(); plt.show()

出力の意味:左の価格はトレンドや「クセ」があるように見えますが、それは独立なショックを積み上げただけの錯覚です。右のリターンは中心0付近で無秩序に振動し、規則性がありません。「価格にはパターンがあるように見えるが、リターンはただのノイズ」——これがランダムウォークの本質で、人間がチャートに見出すパターンの多くが後知恵だと示唆します。

2. 効率的市場仮説(EMH)

なぜ価格はランダムウォークになるのか。効率的市場仮説はこう説明します——もし「明日上がる」と分かる情報があれば、投資家は今日買い、価格は即座に上がってしまう。結果、予測可能な部分は瞬時に価格へ織り込まれ、残るのは予測不能なニュース(ショック)だけになります。情報集合の範囲で3形態に分かれます。

数学的には、(リスク中立化した)価格がマルチンゲール——E[Pt+1Ft]=PtE[P_{t+1}\mid \mathcal{F}_t]=P_t、つまり「今持っている情報での最善の予測は現在値」——になることに対応します。これは第4章のリスク中立評価の伏線です。

3. リターンの予測不能性:自己相関

ランダムウォークなら、リターンに時間方向の相関がないはずです。今日のリターンと明日のリターンの相関(ラグ1自己相関)を測ります。

import numpy as np

rng = np.random.default_rng(0)
T = 2000
log_ret = rng.normal(0.0003, 0.01, T)

# ラグ1の自己相関:今日のリターンと「翌日」のリターンの相関
ac1 = np.corrcoef(log_ret[:-1], log_ret[1:])[0, 1]
print(f"リターンのラグ1自己相関: {ac1:.4f}")

出力:

リターンのラグ1自己相関: -0.0083

出力の意味:自己相関は 0.0083-0.0083 で、ほぼ 0。「昨日上がったから今日も上がる」といった連動はありません。これがリターンの予測不能性の数値的な証拠です(実際の株式リターンも、日次の自己相関はほぼ 0 と知られています——ただしボラティリティには相関があり、これは 時系列解析(定常性・ACF/PACF・AR・MA・ARMA・ARIMA)(統計)の GARCH などで扱います)。

4. 分散の時間比例:分散比

ランダムウォークのもう1つの指紋は、分散が時間に比例することです。リターンが独立なら、kk 期間ぶんを足したリターンの分散は1期間分散の kk 倍。これを使った分散比

VR(k)=Var ⁣(rt(k))kVar(rt)\text{VR}(k) = \frac{\mathrm{Var}\!\left(r_t^{(k)}\right)}{k\,\mathrm{Var}(r_t)}

は、ランダムウォークなら 1 に近づきます(リスクの測り方 の √t則の裏返し)。

import numpy as np

rng = np.random.default_rng(0)
T = 2000
log_ret = rng.normal(0.0003, 0.01, T)

# k期間リターンの分散 ÷ (k×1期間分散)。ランダムウォークなら VR≈1
for k in [1, 5, 20]:
    n_blocks = T // k
    kret = log_ret[:n_blocks*k].reshape(n_blocks, k).sum(axis=1)
    vr = kret.var() / (k * log_ret.var())
    print(f"k={k:>2}: 分散比 VR = {vr:.4f}")

出力:

k= 1: 分散比 VR = 1.0000
k= 5: 分散比 VR = 0.9693
k=20: 分散比 VR = 1.0065

出力の意味:どの集計期間でも分散比は 1 の近く(0.97〜1.01)。分散が時間にきれいに比例しています。実データで VR>1\text{VR}>1 なら正の自己相関(トレンド追随)、VR<1\text{VR}<1 なら平均回帰(リバーサル)の兆候——分散比検定は、市場がランダムウォークから外れていないかを調べる標準的な道具です(ロー=マッキンレー)。

⚠️ よくある誤解

関連ノート