🎓 レベル:標準 | 重要度:A(必須)
📎 前提:リスクの測り方 | 数理:正規分布(標準正規・標準化)(統計)・関連:CVaR(期待ショートフォール)
要点(BLUF)
- **VaR(バリュー・アット・リスク)**は「信頼水準 のもとで、一定期間に被る損失がこの額を超えない」という閾値。99% 1日 VaR が 4% なら「99%の日は損失が 4% 以内」という意味です。
- 計算法は3つ:ヒストリカル法(過去データの経験分位点)、パラメトリック法(正規分布を仮定)、モンテカルロ法(モデルから損失分布を生成)。
- リターンの裾が厚い(暴落しやすい)と、正規仮定のパラメトリック法は VaR を過小評価します。ヒストリカルやモンテカルロのほうが大きく出ます。
1. VaRとは
VaR は損失分布の分位点です。信頼水準 (例:99%)のもとでの VaR は、「損失がこれを超える確率が (例:1%)しかない」という損失額。
要するに、リターン分布の下位 分位点(の符号を反転した損失)です。「99%の確信で、明日の損失はこの額以内」と、リスクを1つの金額に圧縮できるのが普及した理由です。
2. ヒストリカル法とパラメトリック法
代表的な2法を比べます。ヒストリカル法は過去のリターン分布の分位点をそのまま使う(分布の形を仮定しない)。パラメトリック法はリターンが正規分布に従うと仮定し、 で計算します()。リターンが裾の厚い(正規より暴落しやすい)t分布に従う場合で、両者の差を見ます。
import numpy as np
from scipy import stats
rng = np.random.default_rng(0)
n = 200000
mu, sigma, df = 0.0005, 0.015, 5
# 裾の厚い t分布リターン(標準偏差が sigma になるよう標準化)
t_raw = stats.t(df).rvs(n, random_state=rng)
returns = mu + sigma*t_raw/np.sqrt(df/(df-2))
alpha = 0.99
# ヒストリカル法:経験分位点
var_hist = -np.percentile(returns, (1-alpha)*100)
# パラメトリック法:正規分布を仮定
var_param = -(returns.mean() + returns.std()*stats.norm.ppf(1-alpha))
print(f"信頼水準 {alpha:.0%} の1日VaR(リターン比)")
print(f"ヒストリカル法 = {var_hist:.4f}")
print(f"パラメトリック法(正規) = {var_param:.4f}")
print(f"実現ボラ = {returns.std():.4f}")
出力:
信頼水準 99% の1日VaR(リターン比)
ヒストリカル法 = 0.0385
パラメトリック法(正規) = 0.0344
実現ボラ = 0.0150
出力の意味:同じデータでも、ヒストリカル法の VaR 0.0385 はパラメトリック法 0.0344 より大きい。リターンが正規より裾が厚い(t分布)ため、正規を仮定するパラメトリック法は「めったに無いはずの大損失」を実際より小さく見積もるからです。正規分布の油断——2008年の金融危機で、正規前提の VaR が現実の損失を大幅に下回ったのはこの構造です。分布の形を仮定しないヒストリカル法のほうが、テールを正直に拾います。
3. リスクを見える化する
リターンの分布と VaR の位置を重ねて描くと、正規仮定がどこで裾を取りこぼすかが分かります。
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
from scipy import stats
rng = np.random.default_rng(0)
n = 200000
mu, sigma, df = 0.0005, 0.015, 5
t_raw = stats.t(df).rvs(n, random_state=rng)
returns = mu + sigma*t_raw/np.sqrt(df/(df-2))
alpha = 0.99
var_hist = -np.percentile(returns, (1-alpha)*100)
var_param = -(returns.mean() + returns.std()*stats.norm.ppf(1-alpha))
plt.figure(figsize=(8, 5))
plt.hist(returns, bins=200, density=True, alpha=0.4, label="リターン分布(裾が厚い)")
x = np.linspace(returns.min(), returns.max(), 400)
plt.plot(x, stats.norm.pdf(x, returns.mean(), returns.std()), "g-", lw=1.5, label="正規分布の当てはめ")
plt.axvline(-var_hist, color="crimson", ls="--", label=f"ヒストリカルVaR {var_hist:.3f}")
plt.axvline(-var_param, color="darkgreen", ls=":", label=f"パラメトリックVaR {var_param:.3f}")
plt.xlim(-0.08, 0.08)
plt.xlabel("日次リターン"); plt.ylabel("密度")
plt.title("VaR:リターン分布の下側分位点")
plt.legend(); plt.tight_layout(); plt.show()
出力の意味:実際の分布(ヒストグラム)は、当てはめた正規分布(緑線)より中央が尖り裾が厚い。VaR の位置(左側の縦線)は、ヒストリカル(赤破線)のほうが正規(緑点線)より左(損失が大きい側)にあります。正規分布は中央付近をよく合わせる代わりに、肝心のテールを薄く見積もる——リスク管理で最も知りたい「めったに無い大損失」を取りこぼすのです。モンテカルロ法は、このヒストグラムをモデル(GBM や多資産シミュレーション)から生成して同じ分位点を取る方法で、複雑なポートフォリオに使えます。
4. 解釈と限界
VaR は便利ですが、読み方に注意が要ります。
- 「VaR を超えない」だけで、超えたときの大きさは言わない:99% VaR は「1%の確率で超える」が、その1%でいくら損するかは何も語りません。この致命的な穴を埋めるのが CVaR(期待ショートフォール)。
- 信頼水準と期間をセットで:「99% 1日 VaR」のように必ず明示します。期間は √t則(リスクの測り方)で換算するのが慣例(ただし裾が厚いと近似が崩れます)。
⚠️ よくある誤解
- 「VaR=最大損失」ではない:VaR は「 の確率で超える閾値」であって、損失の上限ではありません。テールではもっと大きな損失が起こりえます。
- パラメトリックVaRは正規を仮定する:現実のリターンは裾が厚く歪んでいるので、正規仮定は危機時に過小評価します。ヒストリカル法・モンテカルロ法・t分布などの裾の厚い分布で補います。
- VaR は加算できない:個々の VaR を足してもポートフォリオの VaR にはなりません。むしろ分散しても VaR が増えることすらある(劣加法性の破れ・CVaR(期待ショートフォール))——VaR の構造的欠陥です。
関連ノート
- 第8章 リスク管理 目次
- リスクの測り方 — 前提:ボラと分布
- CVaR(期待ショートフォール) — 次のトピック:VaR を超える損失の平均
- 正規分布(標準正規・標準化)(統計)— パラメトリックVaRの仮定
- 金融工学テキスト 全体目次