3、因子数据准备:数据源、清洗、对齐、去极值、标准化、中性化处理
因子数据准备是量化研究中最基础也最关键的环节。无论因子逻辑多么精巧、IC计算多么严谨,一旦底层数据存在幸存者偏差、未来函数、单位不统一或行业偏离,后续所有评价结论都将失真。本章围绕数据源选型、清洗规则、多表对齐、去极值、标准化与中性化六个模块展开,建立一套可复用的因子数据工程流水线。
3.1 数据源选型与基础要求
核心原理:因子研究的第一步是确定数据来源。不同供应商的数据在字段定义、复权方式、更新时效上存在差异,直接决定因子计算的准确性。常见数据源包括:行情数据(日/分钟/ tick)、财务数据(三大报表、业绩预告)、一致预期数据(分析师盈利预测)、另类数据(舆情、卫星、电商)。
| 数据类型 | 关键字段 | 频率 | 常见问题 |
|---|---|---|---|
| 行情数据 | 开高低收、成交量额、复权因子 | 日/分钟 | 复权不一致、停牌缺失 |
| 财务数据 | 营收、净利润、ROE、资产负债率 | 季报/年报 | 时点滞后、重述调整 |
| 一致预期 | 目标价、盈利预测、评级 | 周/月 | 样本偏差、更新频率 |
| 另类数据 | 舆情、搜索、卫星图像 | 日/实时 | 噪声大、覆盖不全 |
操作要点:优先选择权威供应商(如Wind、聚宽、通联、朝阳永续),并明确记录数据版本。对于复权价格,统一采用后复权进行因子计算,避免前复权导致的历史价格变动。财务数据必须使用实际披露日而非报告期,防止未来函数。
3.2 数据清洗:剔除脏数据与噪声
核心原理:原始数据中常包含停牌、ST、上市初期、退市整理等特殊状态股票,这些数据会严重扭曲因子分布。清洗的目标是保留正常交易、财务数据完整的股票,同时剔除明显的错误记录。
- 去重:按 [股票代码 + 交易日] 去重,保留最新更新时间。
- 剔除ST/*ST:在因子计算日剔除ST状态股票,避免涨跌停限制带来的偏差。
- 剔除上市未满60日:次新股波动大,且无足够历史数据计算因子。
- 剔除停牌:当日停牌股票无有效交易数据,直接置为NaN。
- 异常值检测:如成交量≤0、价格≤0、PE为负且值过大等。
3.3 多表对齐:构建标准因子矩阵
核心原理:因子计算需要将行情、财务、预期等多张表对齐到统一的 [日期 × 股票] 矩阵上。对齐的核心是时点一致性——财务数据必须使用最新可得值(point-in-time),而非报告期值。
对齐流程:
- 交易日历:使用交易所官方日历,剔除节假日和半日市。
- 股票池:每日动态生成,包含当日可交易且通过清洗的股票。
- 财务对齐:将季报数据映射到报告期后第一个交易日,并持续到下一报告期发布。
- 预期对齐:使用最新一致预期数据,注意分析师调整时点。
# 伪代码示例:财务数据时点对齐
for each trading_day in calendar:
for each stock in universe:
# 找到最新已披露的财报
latest_report = get_latest_report(stock, trading_day)
factor_matrix[trading_day, stock] = latest_report['ROE']
3.4 去极值:消除极端值干扰
核心原理:因子值中常出现极端异常(如PE=1000倍、单日涨幅20%),这些值会主导后续统计量。去极值通过截尾或缩尾方式,将极端值限制在合理范围内。
| 方法 | 公式 | 适用场景 | 优缺点 |
|---|---|---|---|
| MAD法 | 中位数 ± 3 × 1.4826 × MAD | 偏态分布 | 稳健,但计算稍复杂 |
| 分位数法 | 1% ~ 99% 分位数截尾 | 任意分布 | 直观,但丢失信息 |
| 标准差法 | 均值 ± 3 × 标准差 | 近似正态 | 简单,但受极端值影响 |
操作建议:优先使用MAD法,因其对异常值不敏感。处理方式可选择截尾(超出部分置为边界值)或缩尾(超出部分随机化),回测中建议使用截尾以保证可复现性。
3.5 标准化:统一因子量纲
核心原理:不同因子的量纲差异巨大(如PE为几十倍,ROE为百分比),直接比较或合成需要先标准化。最常用的是Z-Score标准化:
z = (x - mean) / std
替代方法:
- 排序标准化:将因子值转换为0~1的百分位排名,消除分布形态影响。
- 极差标准化:(x - min) / (max - min),将数据压缩到[0,1]区间。
选择依据:若因子近似正态分布,用Z-Score;若分布未知或偏态严重,用排序标准化更稳健。标准化同样按截面独立进行。
3.6 中性化:剥离行业与风格暴露
核心原理:因子值往往与行业属性、市值大小、贝塔等风格因素相关。中性化通过回归取残差的方式,剥离这些共同风险暴露,使因子反映纯粹的选股能力。
标准流程:
- 确定中性化变量:行业哑变量(申万一级/二级)、对数市值、贝塔、动量等。
- 构建回归模型:因子值 ~ 行业 + 市值 + 其他风格因子。
- 取残差:残差即为中性化后的因子值。
- 残差标准化:对残差再做一次Z-Score,便于后续使用。
注意事项:中性化变量不宜过多,否则会过度剥离因子信息。一般控制在3~5个变量(行业+市值+1~2个风格)。同时,中性化回归需使用加权最小二乘(WLS),以市值平方根为权重,避免小市值股票主导回归。
3.7 数据质量校验与复盘
核心原理:完成上述处理后,必须进行质量校验,确保因子矩阵可用。主要指标包括:
| 校验项 | 合格标准 | 排查方法 |
|---|---|---|
| 覆盖率 | ≥90% | 检查缺失值分布,定位缺失集中时段 |
| IC显著性 | IC均值 > 0.02,t值 > 2 | 计算IC序列并做t检验 |
| 换手率 | 多空组合周换手 < 50% | 观察因子值稳定性 |
| 分层单调性 | 5层组合收益单调 | 绘制分层收益图 |
复盘流程:若校验不通过,回溯检查清洗参数、对齐逻辑、去极值阈值是否合理。常见问题包括:财务数据未做时点对齐导致未来函数、去极值阈值过宽导致极端值残留、中性化变量遗漏重要风格因子。
总结:因子数据准备是量化研究的地基工程。数据源选型决定上限,清洗与对齐决定下限,去极值与标准化影响因子分布形态,中性化决定因子纯度。建议建立标准化的数据处理流水线,每次处理自动生成日志,确保可回溯、可复现。只有经过严格处理的数据,才能支撑后续的IC分析、分层回测与衰减研究。