在险价值 VaR 与条件在险价值 CVaR
:::info 学习目标 你将能统一损失正负号、持有期和置信水平,比较三种估计方法,并用覆盖率与独立性检验回测 VaR。 :::
直觉
「损失有 95% 的概率不超过哪条线?」——这是 VaR(Value at Risk,在险价值) 回答的问题。它是给定持有期与置信水平下的损失分位数,仍有 5% 的概率被突破,并不是“最大可能损失”。**CVaR(Conditional VaR,又称 Expected Shortfall)**进一步回答:一旦越过 VaR,平均会亏多少。对肥尾收益,CVaR 通常比 VaR 更能反映尾部严重程度。
定义
设损失 ,置信水平 (如 ):
三种估计法:历史法(直接取经验分位)、参数法(假设正态,用 )、蒙特卡洛法(从拟合分布抽样)。
「人话」解释:VaR 与 CVaR 的差别,为什么 CVaR 更好?
VaR 像一条按历史或模型估出的洪水位——在模型成立时,约 95% 的日子亏不过这条线,但对剩下 5% 一无所知:可能只多亏一点,也可能非常严重。一般的 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 数字必须同时带持有期和置信水平,例如“1 日 99% VaR”。平方根时间缩放只在近似 IID、波动稳定时适用。模型上线后要统计实际超越次数是否接近 ,超越是否成簇;历史法受窗口限制,正态法低估肥尾,蒙特卡洛则完全依赖所选模型。
实践与延伸
- 做滚动 95% VaR,统计 OOS 超越率和最长连续超越。
- 比较正态、Student-t 与历史模拟的 99% CVaR。
延伸阅读:Kupiec 覆盖率检验;Christoffersen 条件覆盖检验;Expected Shortfall 回测。
小结
- VaR:给定置信水平下损失的上限;CVaR:越线后的平均损失,更能刻画肥尾;
- 历史/参数/蒙特卡洛三种法各有取舍:历史不假设分布、参数快但依赖正态、MC 灵活可拟合任意分布;
- 尾部越厚,CVaR 比 VaR 高得越多——管风险要盯 CVaR。
章末自测
1. 关于本章主题,哪项说法更准确?