4、数据准备与清洗:收益率计算、数据频率选择、缺失值处理、异常值识别与调整
历史模拟法的核心逻辑是“用过去的真实分布推断未来的风险”,因此数据的质量直接决定了VaR(风险价值)估计的可靠性。如果输入数据存在偏差、缺失或异常,无论后续的模型参数如何精妙,输出的风险计量结果都可能严重失真。本章将系统拆解数据准备与清洗的四大关键环节:收益率计算、数据频率选择、缺失值处理以及异常值识别与调整,帮助学员建立一套严谨、可复用的数据工程流程。
上图展示了数据准备与清洗的完整工程链路。从原始行情数据出发,经过收益率计算、频率选择与缺失值处理、异常值识别与调整,最终形成可用于风险计量的干净收益率序列。每一个环节都有其特定的方法论和注意事项,下面将逐一深入展开。
4.1 收益率计算:简单收益率与对数收益率的选择
核心原理:收益率是风险计量的基础输入。在金融计量中,常用的收益率有两种:简单收益率(算术收益率)和对数收益率(连续复利收益率)。简单收益率定义为 R_t = (P_t - P_{t-1}) / P_{t-1},直观反映了资产价格的变化百分比;对数收益率定义为 r_t = ln(P_t / P_{t-1}),其数学性质更优,尤其在多期收益率的加总上具有可加性。
判断方法:对于历史模拟法,选择哪种收益率取决于资产特性和分析目标。对数收益率在统计上更接近正态分布,且时间可加性使得多期VaR计算更为便捷。然而,对于包含分红、拆股等公司行为的个股,简单收益率在调整后更易解释。实务中,若组合包含大量衍生品或需要高频计算,对数收益率是首选;若仅需日频VaR且资产价格无极端跳跃,两者差异不大。
| 维度 | 简单收益率 | 对数收益率 |
|---|---|---|
| 公式 | (P_t - P_{t-1}) / P_{t-1} | ln(P_t / P_{t-1}) |
| 多期加总 | 需连乘后减1 | 直接相加 |
| 分布特征 | 右偏,有下限 -100% | 近似对称,无下限 |
| 适用场景 | 单期收益、业绩归因 | 多期VaR、时间序列建模 |
| 极端值影响 | 对极端下跌更敏感 | 平滑极端波动 |
4.2 数据频率选择:日频、周频与月频的权衡
核心原理:数据频率决定了历史模拟法使用的样本窗口长度和VaR估计的时效性。高频数据(如日频)能捕捉更多市场波动细节,但可能引入微观结构噪声(如买卖价差、收盘价异常);低频数据(如月频)虽然噪声少,但样本量不足,导致VaR估计的置信区间过宽。
操作流程:选择频率时需考虑三个因素:持有期(监管要求通常为1天或10天)、样本量(至少需要250-500个观测值)、数据可得性。若持有期为1天,应使用日频数据;若持有期为10天,可使用日频数据滚动计算,或直接使用10日收益率(但样本量会急剧减少)。
- 日频数据:样本量大(一年约250个交易日),能反映短期波动聚集,但需处理隔夜跳空和节假日效应。
- 周频数据:通常取每周最后一个交易日的收盘价,样本量适中(一年约52个),能平滑部分噪声,但可能遗漏周内极端波动。
- 月频数据:样本量小(一年12个),仅适用于长期资本配置或低流动性资产,VaR估计的置信区间极宽。
4.3 缺失值处理:插值、删除与填充策略
核心原理:缺失值在金融数据中不可避免,原因包括停牌、休市、数据供应商错误、交易所延迟等。若直接忽略缺失值,可能导致收益率序列的时间戳错位,进而扭曲相关性结构和VaR排序。
判断方法:处理缺失值前,需先判断缺失机制:是随机缺失(MAR)还是完全随机缺失(MCAR),亦或是非随机缺失(MNAR)。对于停牌导致的缺失,通常属于非随机缺失,因为停牌往往与重大消息相关。
- 删除法:若缺失比例低于5%且为随机缺失,可直接删除该时点数据,但需确保前后收益率计算正确(使用前一个有效价格)。
- 插值法:线性插值适用于价格序列,但会低估波动率;更推荐使用前向填充(Forward Fill)或后向填充(Backward Fill),即用最近的有效价格填充缺失值,收益率计算时自动跳过。
- 模型填充:对于重要资产,可使用市场模型(如CAPM)或时间序列模型(ARIMA)预测缺失值,但需谨慎引入模型风险。
# Python示例:使用前向填充处理停牌缺失
import pandas as pd
# 假设df包含日期和收盘价,停牌日价格为NaN
df['price_ffill'] = df['price'].fillna(method='ffill')
# 计算收益率时,使用填充后的价格,但需标记填充点
df['is_filled'] = df['price'].isna()
# 收益率计算:仅使用非填充点之间的真实价格变化
df['return'] = df['price'].pct_change()
# 若填充点过多,建议剔除该时点的收益率
4.4 异常值识别与调整:统计方法与业务规则结合
核心原理:异常值(Outliers)是指显著偏离正常分布的观测值,可能源于数据录入错误、市场操纵、流动性枯竭或真实的极端事件(如2020年3月美股熔断)。在历史模拟法中,异常值会直接影响VaR的分位数估计,尤其是尾部风险。
操作流程:异常值识别需结合统计检验和业务逻辑,不能单纯依赖数学规则。
- 统计方法:使用Z-score(|Z| > 3)、修正的Z-score(MAD法)或IQR(四分位距)规则。对于收益率序列,IQR规则通常设定为
Q1 - 3*IQR和Q3 + 3*IQR为异常边界。 - 业务规则:单日收益率超过±20%(股票)或±10%(外汇)需人工复核;检查是否对应除权除息、拆股或重大公告。
- 调整方法:若确认是数据错误,直接修正或删除;若为真实极端事件,可选择保留(因为历史模拟法本应包含尾部风险)或进行Winsorize处理(将极端值缩尾至指定分位数,如1%和99%)。
| 异常值类型 | 识别方法 | 处理策略 | 对VaR的影响 |
|---|---|---|---|
| 数据录入错误 | 价格跳变超过50%且无公告 | 修正或删除 | 高估VaR |
| 真实极端事件 | 市场指数同步暴跌 | 保留(或Winsorize) | 合理反映尾部风险 |
| 流动性枯竭 | 成交量极低但价格微变 | 剔除或使用中间价 | 低估VaR |
| 除权除息未调整 | 价格跳空但指数未变 | 使用复权价格 | 扭曲收益率 |
4.5 数据清洗的完整流程与质量校验
核心原理:数据清洗不是孤立的步骤,而是一个迭代的工程过程。建议建立标准化的清洗流水线,并输出数据质量报告,供风险管理人员审阅。
操作流程:
- 数据获取与对齐:将不同来源的数据按统一交易日历对齐,确保时间戳一致。
- 收益率计算:选择对数收益率,并处理公司行为(使用复权因子)。
- 缺失值处理:标记缺失原因,采用前向填充或剔除。
- 异常值识别:运行统计规则和业务规则,生成异常值清单。
- 人工复核:风险分析师逐条确认异常值,决定保留、修正或剔除。
- 数据质量报告:输出缺失率、异常值比例、处理方式等指标,存档备查。