🎓 レベル:発展 | 重要度:B(標準)
📎 前提:確率計画法・サンプル平均近似(SAA) | 関連:ポートフォリオ最適化のモデル化
要点(BLUF)
- 期待値最適化は リスク中立。テール(最悪側)の損失を無視するので、リスク回避には不十分。
- VaR=ある確率水準での損失の閾値、CVaR=その閾値を超える損失の 条件付き期待値(テール平均)。
- CVaR は Rockafellar–Uryasev の定式化で線形化でき、CVaR 最小化が 凸最適化(LP) になる。
概念 ── 平均だけ見ると危ない
確率計画(確率計画法)は期待値を最適化する。だが「平均は良いが、たまに破滅的損失」という解は、現実には受け入れがたい。リスク回避の意思決定には、テール(最悪側)のリスクを目的に織り込む必要がある。
VaR と CVaR
損失 の分布を考える。信頼水準 (例 )について:
- VaR(Value at Risk):。損失が の確率で収まる 閾値( 分位点)。
- CVaR(Conditional VaR):。VaR を超える テール部分の平均損失。
graph LR A["損失分布"] --> B["VaR_α: α分位点(閾値)"] B --> C["CVaR_α: VaRを超える部分の平均"] C --> D["テールの重さを測る -> 最小化対象に"]
VaR は「どこまでで収まるか」だが、それを超えたときどれだけ酷いかは教えない。さらに VaR は 劣加法性を満たさない(分散投資でリスクが増えて見える)ので一貫したリスク尺度でない。CVaR はテールの平均を見るので、超過時の酷さを捉え、かつ 凸で一貫性のある(coherent)リスク尺度。
Rockafellar–Uryasev の線形化
CVaR の定義は分位点を含み一見扱いにくいが、補助変数 (VaR に対応)を導入すると 凸関数の最小化になる:
。シナリオ標本(サンプル平均近似(SAA))で期待値を置き換え、 を補助変数 で線形化すると、LP(または凸計画)になる:
CVaR 最小化が凸問題に落ちる ── これが Rockafellar–Uryasev の貢献で、リスク管理を実用的にした。
Pythonで CVaR 最小ポートフォリオ
3資産、各リターンをシナリオでサンプリングし、損失(=負のリターン)の を最小化する配分を求める。
import numpy as np
import cvxpy as cp
rng = np.random.default_rng(1)
n_assets, n_scen, alpha = 3, 2000, 0.95
# 各資産の平均リターンと分散(資産0が低リスク, 資産2が高リスク高リターン)
returns = rng.multivariate_normal([0.08, 0.10, 0.12],
np.diag([0.02, 0.05, 0.09]), n_scen)
losses = -returns # 損失 = -リターン
w = cp.Variable(n_assets, nonneg=True) # 資産配分
tau = cp.Variable() # VaR(閾値)に対応
z = cp.Variable(n_scen, nonneg=True) # 超過損失 (L - tau)^+
portfolio_loss = losses @ w
cvar = tau + (1/((1-alpha)*n_scen)) * cp.sum(z) # Rockafellar-Uryasev
prob = cp.Problem(cp.Minimize(cvar),
[cp.sum(w) == 1, z >= portfolio_loss - tau])
prob.solve()
print(f"最小 CVaR_0.95 = {prob.value:.4f}")
print(f"最適配分 w = {np.round(w.value, 3)} (資産0=低リスク, 資産2=高リスク)")
実行結果:
最小 CVaR_0.95 = 0.1387
最適配分 w = [0.6 0.274 0.126]
CVaR 最小化は、テールリスクを抑えるため 低リスク資産(資産0、分散0.02)に最も多く(60%)配分し、高リスク資産(資産2、分散0.09)は12.6%に抑えた。期待リターン最大化なら高リスク資産に全振りするところを、テールの平均損失を見ることで保守的な分散配分になる。リターンとのトレードオフを取るなら、期待リターン制約を加える(ポートフォリオ最適化のモデル化)。
数式の直観的意味
Rockafellar–Uryasev の式の美しさは、分位点(VaR)という 非凸・不連続な量を、補助変数 の最小化を通じて 凸関数に変換した点。内側の は について凸(区分線形の期待値)で、最小を取る がちょうど VaR に一致し、最小値が CVaR になる。 は「閾値超過分だけ罰する」ヒンジ損失で、機械学習の SVM やペナルティ法(ペナルティ法・障壁法)と同じ構造。CVaR が凸で一貫性のあるリスク尺度であることが、(配分)について凸最適化を保証し、大域最適が得られる(凸集合と凸関数)。期待値最適化が分布の中心を見るのに対し、CVaR はテールの重さを見る ── 「平均的な良さ」と「最悪時の痛み」のどちらを最適化するかという、リスク態度の数理的表現。
⚠️ よくある誤解・落とし穴
- VaR ≠ CVaR:VaR は閾値、CVaR はテール平均。VaR 最小化は非凸で危険、CVaR 最小化は凸で扱いやすい。
- VaR は一貫性がない:劣加法性を満たさず、分散投資効果を正しく評価できない。CVaR を使う。
- 信頼水準 で保守性が変わる: を1に近づけるほど極端なテールだけを見る(保守的)。
- 標本依存:テールは標本数が要る(サンプル平均近似(SAA))。少標本だと CVaR 推定が不安定。
関連ノート
- 前提:確率計画法・サンプル平均近似(SAA)
- 適用(ポートフォリオ):ポートフォリオ最適化のモデル化
- 最悪ケースで備える対照:ロバスト最適化
- 凸である根拠:凸集合と凸関数
- 章のハブ:不確実性下の最適化 章目次