3、风险因子数据基础:数据来源、数据清洗、频率对齐、缺失值处理、异常值检测与修正
风险因子映射与敏感度聚合的精度,从根本上取决于底层数据的质量。若数据源不可靠、清洗规则不一致、频率错配或缺失值处理粗糙,后续的敏感度计算、VaR估计与压力测试都将失去可信基础。本章围绕风险因子数据的完整生命周期,系统讲解数据来源分类与准入标准、清洗流程、多源频率对齐方法、缺失值插补技术以及异常值检测与修正策略,并给出可落地的操作框架与实战案例。
3.1 数据来源分类与准入标准
核心原理
风险因子数据来源可划分为四个层级:内部系统数据(交易系统、持仓系统、风控系统)、外部市场数据(交易所行情、指数供应商、OTC经纪商报价)、参考数据(信用评级、宏观指标、行业分类)、另类数据(舆情、卫星图像、供应链数据)。不同来源的数据在时效性、精度、覆盖范围和成本上差异显著,必须建立统一的准入标准。
准入评估维度
| 评估维度 | 关键指标 | 最低准入标准 | 备注 |
|---|---|---|---|
| 完整性 | 字段缺失率 | ≤5%(核心字段) | 超过30%需重新评估数据源 |
| 准确性 | 与权威源交叉验证误差 | 价格误差≤0.1% | 抽样验证,每周一次 |
| 及时性 | 数据延迟 | 日频数据T+1 08:00前 | 高频数据需实时推送 |
| 一致性 | 历史数据修订频率 | 修订次数≤2次/年 | 需保留修订日志 |
| 可追溯性 | 原始数据保留 | 至少保留7年 | 满足监管审计要求 |
3.2 数据清洗流程与规则
操作流程
- 格式标准化:统一日期格式(YYYY-MM-DD)、数字精度(价格保留4位小数)、代码体系(ISIN/FIGI/CUSIP映射)。
- 去重处理:按“数据源+证券代码+时间戳”去重,保留最新版本;对同一时点的多源数据,按优先级规则选择。
- 业务规则校验:价格必须为正数;利率不得为负(除负利率环境外需特殊标记);波动率不得为负;买卖价差不得为负。
- 代码映射统一:建立内部证券主数据表,将不同来源的证券代码统一映射到内部唯一标识。
案例拆解:某资管公司债券数据清洗
背景:某资管公司管理约2000只信用债,数据来源包括中债估值、Wind、交易对手报价三个渠道。初始数据存在以下问题:同一只债券在不同来源的到期收益率差异最高达35bp;部分报价数据存在明显录入错误(如收益率-5%);不同来源的债券代码格式不统一。
清洗规则设计:
- 以中债估值为基准数据源,Wind为校验源,交易对手报价为参考源;
- 对同一债券同一日期的多源数据,若差异≤10bp,取中位数;若差异>10bp,标记为“待人工复核”;
- 收益率超出[0%, 15%]区间的记录自动标记为异常;
- 代码映射通过ISIN+到期日+票面利率三重匹配。
结果:清洗后数据质量显著提升,异常标记率从初始的8.3%降至0.7%,人工复核工作量可控。复盘发现,大部分异常来自交易对手报价的键盘录入错误和部分新上市债券的估值偏差。
3.3 频率对齐策略
核心原理
不同风险因子的数据频率天然不同:股票价格通常为日频或分钟频,信用利差可能为周频,宏观因子(如GDP)为季度频。敏感度聚合要求所有因子在同一时间轴上对齐,否则协方差矩阵估计将产生偏差。
对齐方法选择
| 对齐方向 | 方法 | 适用场景 | 注意事项 |
|---|---|---|---|
| 高频→低频 | 聚合(均值/末值/加权) | 日频股票→月频组合 | 使用末值法需注意月末是否为交易日 |
| 低频→高频 | 前向填充(Last Observation Carried Forward) | 月频宏观因子→日频 | 避免使用未来数据(后向填充) |
| 混合频率 | 插值法(线性/样条) | 季度GDP→月度 | 插值会引入平滑效应,降低波动率估计 |
| 事件驱动 | 对齐到事件窗口 | 财报发布、评级调整 | 需定义事件窗口长度 |
实战场景:多因子模型的数据对齐
某量化团队构建包含200个因子的多因子模型,因子频率包括日频(动量、波动率)、周频(分析师预期调整)、月频(估值因子)。团队采用“主日历+分层填充”策略:以交易日历为主轴,日频因子直接映射;周频因子按“最近一个周五”对齐;月频因子使用前向填充,并在月末最后交易日重新对齐。同时,对每个因子记录“数据可用日期”而非“数据所属日期”,确保回测时不会引入未来信息。
3.4 缺失值处理技术
缺失机制分类
- 完全随机缺失(MCAR):缺失与任何变量无关,可直接删除或简单插补。
- 随机缺失(MAR):缺失与其他已观测变量相关,需使用模型插补。
- 非随机缺失(MNAR):缺失与缺失值本身相关,处理难度最大,需业务判断。
插补方法对比
| 方法 | 原理 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| 删除法 | 删除含缺失的记录 | 简单 | 损失信息,可能引入偏差 | 缺失率<5%且MCAR |
| 均值/中位数插补 | 用全局或分组均值填充 | 快速 | 低估方差,扭曲分布 | 初步探索性分析 |
| 线性插值 | 利用前后时点线性估计 | 保留时间趋势 | 对非线性数据效果差 | 价格、利率等连续变量 |
| 样条插值 | 分段多项式拟合 | 平滑性好 | 过拟合风险 | 收益率曲线构建 |
| 回归插补 | 用其他变量预测缺失值 | 利用变量间关系 | 可能放大共线性 | 多因子模型 |
| 多重插补(MICE) | 多次插补生成多个数据集 | 反映插补不确定性 | 计算量大 | 监管报送、压力测试 |
3.5 异常值检测与修正
检测方法体系
- 统计方法:Z-Score(|Z|>3)、IQR(超出Q1-1.5×IQR或Q3+1.5×IQR)、MAD(中位数偏差)。
- 机器学习方法:Isolation Forest(孤立森林)、DBSCAN(密度聚类)、LOF(局部离群因子)。
- 业务规则法:涨跌停限制、价格上下限、波动率突变阈值(如单日波动率超过历史99%分位数)。
- 时序方法:基于ARIMA或GARCH模型的残差检测,适用于波动率聚集特征明显的金融数据。
修正策略
| 异常类型 | 修正方法 | 适用场景 |
|---|---|---|
| 录入错误 | 直接修正为正确值 | 人工复核确认 |
| 极端但真实 | 保留,但标记 | 市场崩盘、黑天鹅事件 |
| 数据源故障 | 用备用数据源替换 | 交易所断线、供应商故障 |
| 统计离群 | Winsorize(缩尾处理) | 将极端值压缩至指定分位数 |
| 无法确认 | 剔除并插补 | 避免污染后续计算 |
案例拆解:利率互换曲线异常值处理
背景:某银行衍生品交易台在构建利率互换曲线时,发现2024年3月15日某期限点的报价较前一日跳升25bp,而其他期限点仅变动2-3bp。初步判断为异常值。
分析过程:
- 检查原始报价记录:发现该报价来自某中小型经纪商,且报价时间为16:57(接近收盘);
- 交叉验证:对比另外两家经纪商报价,差异均在3bp以内;
- 查询市场事件:当日无重大宏观数据发布,无流动性冲击;
- 结论:判定为经纪商报价错误或流动性不足导致的失真报价。
处理措施:剔除该异常报价,使用其余报价的加权平均(按交易量加权)替代;同时将该经纪商标记为“低可信度”,未来报价权重下调30%。
复盘:事后确认该经纪商当日系统故障导致报价计算错误。此次处理避免了曲线扭曲对敏感度计算的传导影响。若未处理,该异常点将导致关键期限的DV01偏差约8%。
3.6 数据质量监控与治理闭环
监控指标体系
- 覆盖率:实际数据量/应有数据量,目标≥99%;
- 及时率:按时到达的数据比例,目标≥98%;
- 异常率:被标记为异常的数据比例,正常范围0.1%-1%;
- 修正率:经人工复核确认并修正的比例,反映检测准确率。
治理闭环流程
- 每日自动生成数据质量报告,按数据源、因子类型、业务线三个维度汇总;
- 异常数据自动触发告警,推送至数据治理团队;
- 每周召开数据质量评审会,讨论高频问题根因;
- 每月更新清洗规则和异常检测阈值,适应市场变化;
- 每季度进行数据源绩效评估,淘汰低质量供应商。