第2章:VaR的数学原理:概率论基础、分位数概念、置信区间与持有期的选择

聊到VaR,很多人第一反应是「算个数字嘛」。但说实话,如果不懂背后的数学原理,你算出来的VaR可能就是个摆设。我在刚入行时也犯过这个错——拿着Excel一拉,95%分位数出来了,结果风控委员会一问「你这个置信区间为什么选95%而不是99%?」我当场就卡壳了。

所以这一章,咱们把VaR的数学底裤扒干净。你想想看,VaR本质上问的是:「在给定的概率下,我最多亏多少钱?」 就这么简单。但要把这句话翻译成数学语言,就需要三个核心概念:概率论、分位数、置信区间与持有期。

核心公式: VaR = -F-1(1-α) × σ × √T

其中 F-1 是分位数函数,α 是置信水平,σ 是波动率,T 是持有期。

2.1 概率论基础:VaR的底层语言

概率论说白了就是描述「不确定性」的数学工具。VaR的核心假设是:你的资产收益率服从某个概率分布。最常见的假设是正态分布——虽然现实中金融数据往往有厚尾,但正态分布是入门的最佳选择。

我记得有一次做压力测试,团队里有人直接用正态分布算VaR,结果回测时发现实际亏损超过VaR的次数比理论值多了两倍。为什么?因为市场暴跌时,尾部风险远大于正态分布的预测。这就是概率分布选择的重要性。

几个关键概念你得刻在脑子里:

  • 概率密度函数(PDF):描述收益率在每个取值上的可能性。正态分布的PDF像个钟形曲线。
  • 累积分布函数(CDF):描述收益率小于等于某个值的概率。VaR就是从这个函数反推出来的。
  • 期望与方差:期望是平均收益,方差是波动程度。VaR直接跟方差挂钩。

我的经验: 别一上来就用复杂分布。先用正态分布跑通流程,再逐步替换成t分布或经验分布。这样调试时心里有底。

2.2 分位数概念:VaR的「切蛋糕」逻辑

分位数,说白了就是「把数据切成几块,看某一块的边界在哪」。比如95%分位数,意思是「有95%的数据小于这个值,5%的数据大于这个值」。VaR取的就是这个边界值——只不过我们关心的是亏损端,所以通常取左侧分位数。

举个例子:假设你持有某股票,日收益率的历史数据如下:

import numpy as np

# 模拟1000个日收益率(正态分布)
np.random.seed(42)
returns = np.random.normal(0.001, 0.02, 1000)

# 计算95%分位数(左侧)
var_95 = np.percentile(returns, 5)  # 注意:5%分位数对应95%置信水平
print(f"95% VaR(日):{var_95:.4f}")

# 输出:95% VaR(日):-0.0312
# 解读:有95%的概率,日亏损不超过3.12%

为什么会用5%分位数而不是95%?因为VaR关注的是「最差的5%情况」的边界。你想想看,如果我说「95%置信水平下VaR为-3.12%」,意思就是「100天里,最多有5天亏损超过3.12%」。

注意: 分位数计算对数据量敏感。样本太少时,分位数估计会很不稳定。我建议至少用250个交易日(约1年)的数据。

2.3 置信区间与持有期的选择

这两个参数是VaR建模中最「艺术」的部分。为什么?因为它们没有标准答案,完全取决于你的业务场景。

置信区间:95% vs 99%

置信区间决定了你「容忍」多大的尾部风险。95%意味着你接受5%的例外情况,99%则只接受1%。听起来99%更安全,对吧?但代价是VaR值会更大——因为你要覆盖更极端的亏损。

置信水平 分位数位置 VaR值(示例) 例外频率(250天)
95% 5% -3.12% 约12.5天
99% 1% -4.65% 约2.5天
99.5% 0.5% -5.15% 约1.25天

我在项目中遇到过一件事:某基金公司用99% VaR做风控,结果一年内发生了3次例外——理论上应该只有2.5次。虽然偏差不大,但董事会不干了,觉得模型有问题。后来我们改成了95% VaR做日常监控,99% VaR做压力测试,两边都满意。

持有期:1天 vs 10天 vs 1个月

持有期越长,VaR越大——因为时间给了市场更多「折腾」的空间。巴塞尔协议要求银行用10天持有期计算市场风险VaR,但实际操作中,很多机构先用1天VaR再乘以√10来近似。

为什么是√T?因为假设收益率独立同分布,方差随时间线性累加,标准差就是√T倍。但注意:这个假设在现实中经常不成立——市场有自相关性,有波动率聚集效应。

# 不同持有期的VaR对比
def var_holding_period(vol_daily, holding_days, confidence=0.95):
    from scipy.stats import norm
    z = norm.ppf(1 - confidence)  # 分位数
    var = -z * vol_daily * np.sqrt(holding_days)
    return var

vol = 0.02  # 日波动率2%
for days in [1, 5, 10, 20]:
    v = var_holding_period(vol, days, 0.95)
    print(f"{days}天持有期 VaR(95%): {v:.4f}")

# 输出:
# 1天持有期 VaR(95%): -0.0329
# 5天持有期 VaR(95%): -0.0736
# 10天持有期 VaR(95%): -0.1041
# 20天持有期 VaR(95%): -0.1472

避坑指南: 我曾经直接用√T把1天VaR换算成10天VaR,结果回测时发现实际风险被低估了15%。为什么?因为市场在10天内可能发生趋势性变化,而独立同分布假设忽略了这一点。所以,如果条件允许,直接用10天的收益率数据计算,别偷懒。

2.4 知识体系总览

下面这张图把本章的核心逻辑串起来了。你可以看到,VaR的数学原理其实就三条线:概率分布决定形状,分位数决定切割点,置信区间和持有期决定参数选择。

VaR数学原理知识体系 概率论基础 正态分布 / t分布 / 经验分布 分位数概念 左侧分位数 / 尾部风险 置信区间与持有期 95% vs 99% / 1天 vs 10天 VaR = -F⁻¹(1-α) × σ × √T 分位数 × 波动率 × 时间调整 市场风险VaR 信用风险VaR 操作风险VaR

2.5 实战中的选择逻辑

说了这么多理论,最后给点实在的。你在实际项目中怎么选这些参数?

  1. 监管要求优先:巴塞尔协议、银保监会的规定是硬约束。银行做市场风险VaR,必须用99%置信水平、10天持有期。
  2. 业务场景决定:交易部门看日VaR,投资组合看周VaR或月VaR。别拿日VaR去管长期持仓,那会低估风险。
  3. 数据质量兜底:如果数据只有1年,别硬算99.9% VaR——样本太少,分位数估计方差太大。我一般要求至少3年数据才敢用99%置信水平。

一句话总结: VaR的数学原理不复杂,复杂的是参数选择背后的业务判断。概率论给你工具,分位数给你方法,置信区间和持有期给你场景——三者缺一不可。

专注资料整理