第2章 VaR核心概念:置信水平、持有期、损失分布、分位数
好,咱们直接进入正题。上一章我们聊了VaR是什么——说白了就是在一定概率下,你最多亏多少钱。但光知道定义远远不够,你得理解它背后的四个核心零件:置信水平、持有期、损失分布、分位数。这四个东西,就像汽车的四个轮子,少一个VaR都跑不起来。
我个人习惯,讲概念之前先画个图,把关系理清楚。你看下面这张图,就是这四个概念之间的逻辑链条:
嗯,这张图你看懂了吗?从左到右,先定置信水平,再定持有期,然后构建损失分布,最后用分位数切出VaR值。下面我一个一个拆开讲。
2.1 置信水平:你有多确定?
置信水平,英文叫confidence level。说白了就是——你希望你的预测有多"靠谱"。
举个例子。我说"明天有90%的概率不下雨",那10%的概率就是下雨的风险。在VaR里,95%的置信水平意味着:100天里,有95天你的亏损不会超过VaR值。剩下5天,嗯,可能会亏得更多。
核心公式:
VaR(95%) = 在95%的情况下,最大可能亏损
或者说:只有5%的概率会亏超过这个数
我在项目中遇到过不少新手,上来就选99%的置信水平,觉得"越保守越好"。其实不是这样的。你想想看,99%意味着你只关注那1%的极端情况,但现实中很多风险恰恰藏在95%到99%之间。我个人的经验是:做日常风控用95%就够了,做压力测试才用99%。
| 置信水平 | 含义 | 常见场景 |
|---|---|---|
| 95% | 20天中有1天可能超限 | 日常风控、交易限额 |
| 99% | 100天中有1天可能超限 | 监管要求、巴塞尔协议 |
| 99.9% | 1000天中有1天可能超限 | 极端压力测试 |
💡 我的小技巧:选置信水平时,先问问自己——"我能接受多久出一次事?"如果每天交易100笔,95%意味着每天可能有5笔超限,这个频率你能接受吗?
2.2 持有期:看多久?
持有期,holding period,就是你的"观察窗口"。你是看一天的风险?还是一周?一个月?
这个参数直接影响VaR的大小。为什么?因为时间越长,不确定性越大。你想想看,预测明天股价和预测明年股价,难度能一样吗?
这里有个重要的数学关系:如果假设收益率独立同分布,那么VaR与持有期的平方根成正比。
# 持有期换算示例
# 假设日VaR为100万,持有期10天
import math
daily_var = 100 # 单位:万
holding_period = 10
ten_day_var = daily_var * math.sqrt(holding_period)
print(f"10天VaR ≈ {ten_day_var:.1f}万")
# 输出:10天VaR ≈ 316.2万
嗯,这里要注意——这个平方根法则有个前提:收益率是独立同分布的。但现实中,市场有自相关性,有波动率聚集效应。我曾经吃过这个亏,直接用平方根把日VaR换算成年VaR,结果被审计追着问。后来我学乖了,能用实际数据算就别偷懒用公式。
⚠️ 避坑指南:我曾经用平方根法则把1天VaR换算成10天VaR,结果低估了风险。因为市场在压力时期往往有"记忆效应"——今天跌了明天可能接着跌。这种情况下,平方根法则会低估真实风险。
2.3 损失分布:数据长啥样?
损失分布,loss distribution,这是VaR计算的核心原料。没有分布,你什么都算不出来。
损失分布有两种来源:
- 历史分布:直接用过去的数据,假设历史会重演
- 参数分布:假设数据服从某种分布(如正态分布),然后估计参数
我个人更偏爱历史分布,因为它不需要做太多假设。但历史分布有个致命弱点——如果过去10年都没发生过金融危机,那它根本预测不了金融危机。
你看下面这个例子,假设我们有某股票过去100天的日收益率数据:
import numpy as np
import matplotlib.pyplot as plt
# 模拟100天的日收益率(单位:%)
np.random.seed(42)
returns = np.random.normal(0.05, 1.5, 100)
# 排序后看分布
sorted_returns = np.sort(returns)
print("最小5个收益率:", sorted_returns[:5])
print("最大5个收益率:", sorted_returns[-5:])
运行这段代码,你会发现收益率大致集中在0附近,但两端会有一些"尾巴"。这些尾巴,就是风险所在。
关键认知:金融数据的损失分布通常有"厚尾"特征——极端事件发生的概率比正态分布预测的要高。这也是为什么2008年金融危机时,很多银行的VaR模型都失效了——他们用了正态分布假设。
2.4 分位数:切在哪儿?
分位数,quantile,就是一把刀。你把损失分布画出来,然后用分位数这把刀切下去,切点左边的面积就是置信水平,切点对应的数值就是VaR。
举个例子。假设我们有100个历史收益率数据,要算95% VaR:
- 把收益率从小到大排序
- 找到第5个最小的收益率(因为100 × 5% = 5)
- 这个收益率就是95% VaR
# 计算95% VaR(历史模拟法)
import numpy as np
returns = np.random.normal(0.05, 1.5, 1000)
confidence_level = 0.95
var_95 = np.percentile(returns, (1 - confidence_level) * 100)
print(f"95% VaR = {var_95:.2f}%")
# 输出类似:95% VaR = -2.41%
这个-2.41%是什么意思?意思是:在95%的情况下,你的日亏损不会超过2.41%。或者说,只有5%的概率会亏超过2.41%。
💡 我的经验:算分位数时,数据量不能太少。我一般要求至少500个数据点,否则分位数估计的误差会很大。如果数据不够,可以考虑用bootstrap方法增加样本量。
2.5 四个概念如何协同工作?
好了,四个概念都讲完了。它们是怎么配合的?我给你捋一遍:
- 先定置信水平:比如95%,告诉市场"我有95%的把握"
- 再定持有期:比如1天,告诉系统"我看的是日频风险"
- 构建损失分布:用历史数据或参数模型,画出收益率的分布形状
- 找分位数:在分布上切一刀,切出VaR值
你看,整个过程就像做菜——先定口味(置信水平),再定分量(持有期),然后准备食材(损失分布),最后下刀切菜(分位数)。每一步都影响最终的味道。
一句话总结:VaR = 在给定置信水平和持有期下,损失分布上对应的分位数值。
嗯,这一章的内容就到这儿。四个概念你记住了吗?下一章我们会用这些概念,动手算一个真实的VaR案例。到时候你会发现,理论懂了,动手也不难。
公众号:蓝海资料掘金营,微信deep3321