4、正态分布假设:正态性检验与QQ图绘制
做VaR模型,绕不开一个核心假设——收益率服从正态分布。
说实话,我在刚入行那几年,对这个假设深信不疑。教科书上这么写,论文里这么用,那肯定没问题吧?直到我第一次用真实的市场数据跑回测,结果惨不忍睹。后来我才明白:金融数据天生就是厚尾的,正态分布只是一个理想化的起点。
但话说回来,我们做量化风控,不能因为假设不完美就放弃检验。恰恰相反,检验正态性,是为了知道我们的模型在什么条件下会失效。今天我就带大家过一遍最常用的三种方法:Jarque-Bera检验、Shapiro-Wilk检验,还有最直观的QQ图。
4.1 为什么要做正态性检验?
你想想看,VaR模型的核心逻辑是:给定一个置信水平,找到分布左侧的分位数。如果数据不是正态的,那这个分位数就是错的。错得有多离谱?
我举个例子。假设你用正态分布算出来95% VaR是-2%,但实际数据是厚尾的,真实5%分位数可能是-3.5%。这意味着你的模型会系统性低估风险。嗯,这就是为什么监管机构要求我们做正态性检验——不是走形式,是真的会出人命。
4.2 Jarque-Bera检验
JB检验是我个人最常用的方法。为什么?因为它简单、快速,而且只依赖两个统计量:偏度(Skewness)和峰度(Kurtosis)。
偏度衡量分布的对称性。正态分布的偏度是0。如果偏度大于0,说明右尾更长;小于0,左尾更长。峰度衡量分布的"尖峭"程度。正态分布的峰度是3。峰度大于3,说明尾部更厚——这正是金融数据的典型特征。
JB统计量的公式长这样:
JB = n/6 * (S² + (K-3)²/4)
其中n是样本量,S是偏度,K是峰度。JB统计量服从卡方分布(自由度2)。如果p值小于0.05,我们就拒绝正态性假设。
Python实现非常简单:
import numpy as np
from scipy import stats
# 模拟收益率数据
np.random.seed(42)
returns = np.random.randn(1000) # 正态分布
# Jarque-Bera检验
jb_stat, jb_p = stats.jarque_bera(returns)
print(f"JB统计量: {jb_stat:.4f}")
print(f"p值: {jb_p:.4f}")
# 如果p值 < 0.05,拒绝正态性假设
if jb_p < 0.05:
print("拒绝正态性假设:数据不服从正态分布")
else:
print("无法拒绝正态性假设:数据可能服从正态分布")
4.3 Shapiro-Wilk检验
Shapiro-Wilk检验是另一个常用的方法。它的原理比较绕,但你可以简单理解为:它把样本排序后,和理论上的正态分位数做相关性分析。相关性越高,越像正态分布。
我个人觉得,SW检验比JB检验更可靠,尤其是在小样本(n < 50)的情况下。但它的缺点是计算量稍大,而且对重复值敏感。
代码实现:
# Shapiro-Wilk检验
sw_stat, sw_p = stats.shapiro(returns[:100]) # 取前100个样本
print(f"SW统计量: {sw_stat:.4f}")
print(f"p值: {sw_p:.4f}")
if sw_p < 0.05:
print("拒绝正态性假设")
else:
print("无法拒绝正态性假设")
4.4 QQ图:最直观的"照妖镜"
说实话,统计检验再漂亮,也不如一张图来得直观。QQ图(Quantile-Quantile Plot)就是干这个的。
原理很简单:把样本的分位数和理论正态分布的分位数画在同一个坐标系里。如果数据是正态的,点应该落在45度对角线上。如果偏离了,就能看出是左偏、右偏,还是厚尾。
我在项目中遇到过最典型的案例:某只股票的日收益率QQ图,中间部分贴着对角线走,但两端明显翘起。这就是典型的"中间正态,两端厚尾"——用正态分布算VaR,中间部分没问题,但极端情况全错。
import matplotlib.pyplot as plt
import scipy.stats as stats
# 生成QQ图
plt.figure(figsize=(8, 6))
stats.probplot(returns, dist="norm", plot=plt)
plt.title("QQ图:正态性检验")
plt.xlabel("理论分位数")
plt.ylabel("样本分位数")
plt.grid(True, alpha=0.3)
plt.show()
- 点落在对角线上 → 正态分布
- 两端向上翘起 → 厚尾(峰度 > 3)
- 整体呈S形 → 偏态分布
- 中间贴合、两端偏离 → 中间正态,极端值异常
4.5 知识体系图
下面这张图总结了正态性检验的完整流程。我建议你把它存下来,做VaR模型时对照着用。
4.6 实战建议
说了这么多,最后给几条实在的建议:
- 不要只看一个检验。我习惯同时跑JB检验和SW检验,再画一张QQ图。三个结果互相印证,比单一指标靠谱得多。
- 注意样本量。样本量小于50,优先用SW检验;样本量在50-5000之间,JB和SW都可以;样本量超过5000,QQ图比统计检验更有参考价值。
- 拒绝正态性不等于模型不能用。我曾经处理过一个组合,JB检验p值只有0.001,但QQ图显示偏离主要发生在尾部。这种情况下,我选择用t分布替代正态分布,效果反而更好。
- 动态检验。别只做一次检验就完事。市场环境会变,我建议每季度重新跑一次正态性检验,看看假设是否还成立。
好了,正态性检验这部分就讲到这里。记住一句话:检验不是为了证明,而是为了理解。理解了数据的真实分布,你才能做出靠谱的VaR模型。
公众号:蓝海资料掘金营,微信deep3321