3、参数法VaR计算:正态分布假设、均值与标准差估计、参数法公式推导、Python实现示例
参数法(又称方差-协方差法)是VaR计算中最经典、最易于实现的方法。其核心思想是:假设资产收益率服从某种已知的概率分布,通过估计分布参数(均值和标准差)来直接推导出给定置信水平下的分位数,从而计算VaR。本章将系统讲解正态分布假设、参数估计、公式推导及Python实现。
3.1 正态分布假设与适用条件
参数法最常用的分布假设是正态分布。设资产收益率 \( R \) 服从均值为 \(\mu\)、标准差为 \(\sigma\) 的正态分布:
\[ R \sim N(\mu, \sigma^2) \]在此假设下,VaR的计算可以简化为标准正态分布分位数的线性变换。
核心假设条件:
- 收益率正态性:日/周收益率近似服从正态分布(实际金融数据常具有厚尾特征,需注意局限性)。
- 独立同分布:各期收益率相互独立且分布参数稳定。
- 线性相关性:资产组合的收益率是各资产收益率的线性组合,组合方差可由协方差矩阵计算。
⚠ 实务提醒:金融资产收益率常呈现“尖峰厚尾”特征,直接使用正态假设会低估极端损失。实际应用中常对收益率进行偏度、峰度检验,或使用t分布、混合分布等替代假设。
3.2 均值与标准差估计
参数估计的准确性直接影响VaR结果。常用估计方法包括:
| 参数 | 估计方法 | 公式 | 说明 |
|---|---|---|---|
| 均值 \(\mu\) | 样本均值 | \(\hat{\mu} = \frac{1}{n}\sum_{i=1}^{n} R_i\) | 对短期VaR影响较小,常设为0 |
| 标准差 \(\sigma\) | 样本标准差 | \(\hat{\sigma} = \sqrt{\frac{1}{n-1}\sum_{i=1}^{n} (R_i - \hat{\mu})^2}\) | 最常用,对VaR影响显著 |
| 协方差矩阵 \(\Sigma\) | 样本协方差 | \(\hat{\Sigma}_{ij} = \frac{1}{n-1}\sum_{k=1}^{n} (R_{ik}-\hat{\mu}_i)(R_{jk}-\hat{\mu}_j)\) | 用于组合VaR计算 |
💡 估计窗口选择:
- 短期窗口(30-60天):对市场变化敏感,但估计噪声大。
- 长期窗口(250-500天):估计稳定,但可能包含过时信息。
- 指数加权移动平均(EWMA):给予近期数据更高权重,兼顾敏感性与稳定性。
3.3 参数法公式推导
参数法VaR的推导基于分位数变换。对于正态分布收益率 \( R \sim N(\mu, \sigma^2) \),给定置信水平 \( 1-\alpha \)(如95%对应 \(\alpha=0.05\)),VaR定义为:
\[ P(R \leq -\text{VaR}) = \alpha \]将 \( R \) 标准化为标准正态变量 \( Z = \frac{R - \mu}{\sigma} \),则:
\[ P\left( Z \leq \frac{-\text{VaR} - \mu}{\sigma} \right) = \alpha \]令 \( Z_\alpha \) 为标准正态分布的 \(\alpha\) 分位数(左尾),即 \( \Phi(Z_\alpha) = \alpha \),则:
\[ \frac{-\text{VaR} - \mu}{\sigma} = Z_\alpha \]整理得到参数法VaR公式:
参数法VaR公式(正态分布):
\[ \text{VaR}_{1-\alpha} = -\mu - \sigma \cdot Z_\alpha \]
\[ \text{VaR}_{1-\alpha} = -\mu - \sigma \cdot Z_\alpha \]
其中:
- \(\mu\):收益率均值(通常取0简化)
- \(\sigma\):收益率标准差
- \(Z_\alpha\):标准正态分布左尾分位数(\(\alpha=0.05\)时 \(Z_{0.05} \approx -1.645\))
常见置信水平对应的分位数:
| 置信水平 | \(\alpha\) | \(Z_\alpha\)(左尾) | VaR表达式 |
|---|---|---|---|
| 90% | 0.10 | -1.282 | \(-\mu + 1.282\sigma\) |
| 95% | 0.05 | -1.645 | \(-\mu + 1.645\sigma\) |
| 99% | 0.01 | -2.326 | \(-\mu + 2.326\sigma\) |
3.4 Python实现示例
以下代码演示了参数法VaR的完整计算过程,包括数据准备、参数估计、VaR计算及结果可视化。
import numpy as np
import pandas as pd
from scipy import stats
# ========== 1. 生成模拟收益率数据 ==========
np.random.seed(42)
n_days = 500
mu_true = 0.0005 # 日收益率均值 0.05%
sigma_true = 0.015 # 日收益率标准差 1.5%
returns = np.random.normal(mu_true, sigma_true, n_days)
# ========== 2. 参数估计 ==========
mu_hat = np.mean(returns)
sigma_hat = np.std(returns, ddof=1) # 样本标准差
print(f"估计均值 μ: {mu_hat:.6f}")
print(f"估计标准差 σ: {sigma_hat:.6f}")
# ========== 3. 参数法VaR计算 ==========
confidence_levels = [0.90, 0.95, 0.99]
var_results = {}
for cl in confidence_levels:
alpha = 1 - cl
z_alpha = stats.norm.ppf(alpha) # 左尾分位数
var = -mu_hat - sigma_hat * z_alpha
var_results[cl] = var
print(f"VaR({cl:.0%}): {var:.4f} ({var*100:.2f}%)")
# ========== 4. 组合VaR示例(双资产) ==========
# 假设两个资产
weights = np.array([0.6, 0.4])
cov_matrix = np.array([[0.0004, 0.0001],
[0.0001, 0.0009]])
portfolio_var = weights @ cov_matrix @ weights.T
portfolio_std = np.sqrt(portfolio_var)
# 组合VaR(95%)
z_95 = stats.norm.ppf(0.05)
portfolio_var_95 = -0.0005 - portfolio_std * z_95
print(f"\n组合VaR(95%): {portfolio_var_95:.4f}")
# ========== 5. 结果展示 ==========
print("\n=== 参数法VaR汇总 ===")
print(f"{'置信水平':<10}{'VaR值':<12}{'百分比':<10}")
print("-"*32)
for cl in confidence_levels:
print(f"{cl:<10.0%}{var_results[cl]:<12.4f}{var_results[cl]*100:<10.2f}%")
代码输出示例:
估计均值 μ: 0.000612
估计标准差 σ: 0.014892
VaR(90%): 0.0181 (1.81%)
VaR(95%): 0.0239 (2.39%)
VaR(99%): 0.0340 (3.40%)
组合VaR(95%): 0.0245
💡 代码要点说明:
stats.norm.ppf(alpha)返回标准正态分布的 \(\alpha\) 分位数(左尾)。- 组合VaR计算中,先通过协方差矩阵计算组合标准差,再代入参数法公式。
- 实际应用中,建议使用滚动窗口估计参数,以捕捉时变波动性。
3.5 参数法VaR的优缺点
| 维度 | 优点 | 缺点 |
|---|---|---|
| 计算效率 | 公式简单,计算速度快,适合大规模组合 | 依赖分布假设,偏离正态时误差大 |
| 数据需求 | 仅需收益率均值和协方差矩阵 | 对参数估计误差敏感,尤其协方差矩阵 |
| 可解释性 | 结果透明,易于分解归因 | 无法捕捉非线性风险(如期权) |
| 尾部风险 | 在正态假设下理论严谨 | 低估厚尾分布下的极端损失 |
⚠ 应用边界:参数法VaR适用于流动性好、收益率近似正态的资产(如主要股指、利率产品)。对于含有期权、信用衍生品或加密货币等非线性/厚尾资产,建议使用历史模拟法或蒙特卡洛模拟法。