3、因子数据准备:数据源、清洗、对齐、去极值、标准化、中性化处理

因子数据准备是量化研究中最基础也最关键的环节。无论因子逻辑多么精巧、IC计算多么严谨,一旦底层数据存在幸存者偏差、未来函数、单位不统一或行业偏离,后续所有评价结论都将失真。本章围绕数据源选型、清洗规则、多表对齐、去极值、标准化与中性化六个模块展开,建立一套可复用的因子数据工程流水线。

因子数据准备六步流水线 ① 数据源选型 行情/财务/一致预期 频率/复权/供应商 ② 数据清洗 去重/缺失/异常值 ST/停牌/上市未满 ③ 多表对齐 交易日/股票池/时点 财务数据时点对齐 ④ 去极值 MAD/分位数/标准差 截尾或缩尾处理 ⑤ 标准化 Z-Score/排序/极差 截面独立处理 ⑥ 中性化 行业/市值/风格暴露 回归取残差 干净因子矩阵 [日期 × 股票] 截面数据 质量校验 覆盖率/IC/换手率 关键原则 • 截面独立:每期单独处理 • 避免未来函数:只用当期信息 • 可回溯:处理参数固定 • 记录日志:每次处理留痕 迭代优化:质量不达标时回溯调整清洗/对齐参数

3.1 数据源选型与基础要求

核心原理:因子研究的第一步是确定数据来源。不同供应商的数据在字段定义、复权方式、更新时效上存在差异,直接决定因子计算的准确性。常见数据源包括:行情数据(日/分钟/ tick)、财务数据(三大报表、业绩预告)、一致预期数据(分析师盈利预测)、另类数据(舆情、卫星、电商)。

数据类型关键字段频率常见问题
行情数据开高低收、成交量额、复权因子日/分钟复权不一致、停牌缺失
财务数据营收、净利润、ROE、资产负债率季报/年报时点滞后、重述调整
一致预期目标价、盈利预测、评级周/月样本偏差、更新频率
另类数据舆情、搜索、卫星图像日/实时噪声大、覆盖不全

操作要点:优先选择权威供应商(如Wind、聚宽、通联、朝阳永续),并明确记录数据版本。对于复权价格,统一采用后复权进行因子计算,避免前复权导致的历史价格变动。财务数据必须使用实际披露日而非报告期,防止未来函数。

⚠️ 风险提示:不同供应商的财务数据可能存在口径差异(如归母净利润 vs 净利润),务必在因子计算前统一口径,并在文档中记录映射关系。

3.2 数据清洗:剔除脏数据与噪声

核心原理:原始数据中常包含停牌、ST、上市初期、退市整理等特殊状态股票,这些数据会严重扭曲因子分布。清洗的目标是保留正常交易、财务数据完整的股票,同时剔除明显的错误记录。

  1. 去重:按 [股票代码 + 交易日] 去重,保留最新更新时间。
  2. 剔除ST/*ST:在因子计算日剔除ST状态股票,避免涨跌停限制带来的偏差。
  3. 剔除上市未满60日:次新股波动大,且无足够历史数据计算因子。
  4. 剔除停牌:当日停牌股票无有效交易数据,直接置为NaN。
  5. 异常值检测:如成交量≤0、价格≤0、PE为负且值过大等。
📌 实战经验:清洗参数(如上市天数阈值、ST处理方式)应作为全局配置,在回测和实盘中保持一致。若在回测中剔除ST,实盘也必须剔除,否则因子表现会出现偏差。

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法,因其对异常值不敏感。处理方式可选择截尾(超出部分置为边界值)或缩尾(超出部分随机化),回测中建议使用截尾以保证可复现性。

⚠️ 注意:去极值必须在每个截面(每日)独立进行,不能跨期混合处理。否则会引入未来信息,导致因子IC虚高。

3.5 标准化:统一因子量纲

核心原理:不同因子的量纲差异巨大(如PE为几十倍,ROE为百分比),直接比较或合成需要先标准化。最常用的是Z-Score标准化:

z = (x - mean) / std

替代方法:

  • 排序标准化:将因子值转换为0~1的百分位排名,消除分布形态影响。
  • 极差标准化:(x - min) / (max - min),将数据压缩到[0,1]区间。

选择依据:若因子近似正态分布,用Z-Score;若分布未知或偏态严重,用排序标准化更稳健。标准化同样按截面独立进行。

3.6 中性化:剥离行业与风格暴露

核心原理:因子值往往与行业属性、市值大小、贝塔等风格因素相关。中性化通过回归取残差的方式,剥离这些共同风险暴露,使因子反映纯粹的选股能力。

标准流程:

  1. 确定中性化变量:行业哑变量(申万一级/二级)、对数市值、贝塔、动量等。
  2. 构建回归模型:因子值 ~ 行业 + 市值 + 其他风格因子。
  3. 取残差:残差即为中性化后的因子值。
  4. 残差标准化:对残差再做一次Z-Score,便于后续使用。
📌 案例拆解:某价值因子(EP)与市值高度负相关(小市值公司EP更高)。若不中性化,因子收益中混杂了市值风格收益。通过回归剥离市值暴露后,EP因子的IC从0.03提升至0.05,且多空组合的换手率下降20%,说明因子纯度显著提高。

注意事项:中性化变量不宜过多,否则会过度剥离因子信息。一般控制在3~5个变量(行业+市值+1~2个风格)。同时,中性化回归需使用加权最小二乘(WLS),以市值平方根为权重,避免小市值股票主导回归。

💡 经验总结:中性化不是万能的。若因子本身与市值强相关且你希望暴露市值风格,则不应中性化。决策依据是因子使用场景——纯选股因子建议中性化,风格配置因子则保留原始值。

3.7 数据质量校验与复盘

核心原理:完成上述处理后,必须进行质量校验,确保因子矩阵可用。主要指标包括:

校验项合格标准排查方法
覆盖率≥90%检查缺失值分布,定位缺失集中时段
IC显著性IC均值 > 0.02,t值 > 2计算IC序列并做t检验
换手率多空组合周换手 < 50%观察因子值稳定性
分层单调性5层组合收益单调绘制分层收益图

复盘流程:若校验不通过,回溯检查清洗参数、对齐逻辑、去极值阈值是否合理。常见问题包括:财务数据未做时点对齐导致未来函数、去极值阈值过宽导致极端值残留、中性化变量遗漏重要风格因子。

⚠️ 高频误区:① 全样本去极值(应截面独立);② 财务数据用报告期而非披露日;③ 中性化后忘记重新标准化;④ 清洗参数在回测和实盘不一致。这些错误会导致因子评价虚高,实盘失效。

总结:因子数据准备是量化研究的地基工程。数据源选型决定上限,清洗与对齐决定下限,去极值与标准化影响因子分布形态,中性化决定因子纯度。建议建立标准化的数据处理流水线,每次处理自动生成日志,确保可回溯、可复现。只有经过严格处理的数据,才能支撑后续的IC分析、分层回测与衰减研究。