跳到主要内容

在险价值 VaR 与条件在险价值 CVaR

直觉

「在最坏的 5% 情况下,我最多亏多少?」——这就是 VaR(Value at Risk,在险价值) 回答的问题:在一定置信水平(如 95%)下、一定时间内,损失不会超过的阈值。但 VaR 只告诉你「门槛」,不告诉你一旦越线会亏多深CVaR(Conditional VaR,条件在险价值,又称 Expected Shortfall) 补上这个洞:它是「越线之后的平均损失」。对肥尾的金融收益,CVaR 比 VaR 更能反映尾部风险。

定义

设损失 L=RL=-R,置信水平 1α1-\alpha(如 α=0.05\alpha=0.05):

VaRα=inf{l:Pr(Ll)1α}\text{VaR}_\alpha = -\inf\{l:\Pr(L\le l) \ge 1-\alpha\} CVaRα=E[LLVaRα]\text{CVaR}_\alpha = \mathbb{E}[\,L\,\big|\,L\ge \text{VaR}_\alpha\,]

三种估计法:历史法(直接取经验分位)、参数法(假设正态,用 μ,σ\mu,\sigma)、蒙特卡洛法(从拟合分布抽样)。

「人话」解释:VaR 与 CVaR 的差别,为什么 CVaR 更好?

VaR 像「百年一遇的洪水位」——它保证 95% 的日子亏不过这条线,但对剩下 5% 一无所知:可能只多亏一点点,也可能直接破产。而且 VaR **不是「次可加」**的(两笔资产合起来的 VaR 可能比各自 VaR 之和大),数学上不漂亮。 CVaR 是「一旦被淹,平均淹多深」,它把整条左尾都纳入考量,肥尾越厚 CVaR 比 VaR 高得越多,是巴塞尔协议推崇的指标。

可运行案例:等权四资产组合的 VaR/CVaR(三种方法)

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy.stats import norm

df = pd.read_csv('/data/multi_asset_daily.csv', parse_dates=['date']).set_index('date')
w = np.array([0.25]*4)                                    # 等权: 股/债/商品/REIT
port = df.pct_change().fillna(0) @ w                      # 组合日收益
alpha = 0.05

# 1) 历史法
hist_var = -np.quantile(port, alpha)
hist_cvar = -port[port <= np.quantile(port, alpha)].mean()

# 2) 参数法(正态)
mu, sd = port.mean(), port.std()
par_var = -(mu + norm.ppf(alpha) * sd)
par_cvar = -(mu - sd * norm.pdf(norm.ppf(alpha)) / alpha)

# 3) 蒙特卡洛: 从拟合正态抽样
rng = np.random.default_rng(0)
sim = rng.normal(mu, sd, 100000)
mc_var = -np.quantile(sim, alpha)
mc_cvar = -sim[sim <= np.quantile(sim, alpha)].mean()

print(f"{'方法':8} {'VaR95(日)':>10} {'CVaR95(日)':>10}")
for n, v, c in [('历史法', hist_var, hist_cvar), ('参数法', par_var, par_cvar), ('蒙特卡洛', mc_var, mc_cvar)]:
  print(f"{n:8} {v:>9.2%} {c:>9.2%}")
print("\n注: CVaR ≥ VaR, 反映'越线后的平均损失'更重。")

plt.figure(figsize=(9, 3.5))
plt.hist(port, bins=60, color='lightsteelblue', edgecolor='k', alpha=0.8)
plt.axvline(-hist_var, color='orange', lw=1.6, label=f'VaR95={hist_var:.2%}')
plt.axvline(-hist_cvar, color='crimson', lw=1.6, label=f'CVaR95={hist_cvar:.2%}')
plt.title('组合日收益分布与尾部风险'); plt.xlabel('日收益'); plt.legend(fontsize=9)
plt.tight_layout(); plt.show()

动手改一改

把蒙特卡洛的抽样分布从正态 rng.normal(mu,sd,...) 换成学生 t(from scipy.stats import t; sim = t.rvs(4, loc=mu, scale=sd, size=100000, random_state=0)),观察肥尾让 CVaR 明显上升——这正是正态假设低估的尾部。

小结

  • VaR:给定置信水平下损失的上限;CVaR:越线后的平均损失,更能刻画肥尾;
  • 历史/参数/蒙特卡洛三种法各有取舍:历史不假设分布、参数快但依赖正态、MC 灵活可拟合任意分布;
  • 尾部越厚,CVaR 比 VaR 高得越多——管风险要盯 CVaR。