3. 数据准备

数据准备 学习卡片

因子研究的第一道分水岭,往往不在模型,而在数据。因子检验、中性化与衰减诊断的结论是否可信,取决于输入数据是否干净、对齐是否正确、极值是否被合理处理。本章围绕数据准备的全流程展开,目标是让你建立一套可复用、可审计的数据处理规范。

一、核心原理:数据质量决定因子结论的上限

金融数据具有三个天然特征:非平稳、低信噪比、强噪声。价格序列受宏观、行业、情绪、流动性等多重因素驱动,单日收益率中真正可被因子解释的部分通常很小。若数据准备阶段引入偏差,后续无论用IC、分层回测还是回归检验,都会得到看似显著但不可复现的结论。

数据准备的核心目标可以概括为四点:可得性、一致性、可比性、稳健性。可得性指数据在时间与截面上完整覆盖;一致性指字段口径、复权方式、币种、单位统一;可比性指不同标的、不同时期可横向纵向比较;稳健性指极端值不会主导统计量。理解这四点,后续每一步操作都有明确依据。

关键认知:数据清洗不是“把数据变好看”,而是让因子暴露与未来收益之间的统计关系尽可能接近真实生成过程。任何平滑、填充、去极值都会改变分布,必须记录并评估其影响。

二、方法流程:从获取到频率选择

1. 数据获取

常见来源包括行情数据库、财务数据库、另类数据接口。获取阶段要明确:复权方式(前复权、后复权、不复权)、时间戳含义(交易日、公告日、生效日)、字段单位(元、万元、百分比)。建议在获取层就保留原始字段与元数据,避免后续无法追溯。

2. 清洗与对齐

清洗包括去除重复记录、修正明显错误、统一代码与日期格式。对齐是金融数据准备中最容易被低估的环节,需区分三类对齐:

  • 时间对齐:将不同频率数据映射到统一交易日历,避免未来函数。
  • 截面对齐:确保同一时点所有标的字段齐全,避免幸存者偏差。
  • 逻辑对齐:财务数据按公告日而非报告期对齐,防止信息提前泄露。

3. 缺失值处理

缺失并非随机。财务指标缺失可能意味着亏损、停牌或未披露。常用策略:

  1. 删除缺失比例过高的标的或字段;
  2. 截面中位数/行业中位数填充;
  3. 时间序列前向填充,但需限制最大填充天数;
  4. 保留缺失标记,作为独立特征或过滤条件。

4. 异常值检测与去极值

异常值可能来自数据错误,也可能是真实极端事件。常用检测方法包括MAD、分位数法、Z-Score。去极值常用中位数绝对偏差法(MAD)与分位数截断(Winsorize)。下面给出一个可复用的MAD去极值示例:

import numpy as np
import pandas as pd

def mad_winsorize(series, n=5):
    median = series.median()
    mad = (series - median).abs().median()
    if mad == 0:
        return series
    upper = median + n * 1.4826 * mad
    lower = median - n * 1.4826 * mad
    return series.clip(lower, upper)

# 对每个截面日期分组去极值
df['factor_clean'] = (
    df.groupby('date')['factor']
      .transform(lambda x: mad_winsorize(x, n=5))
)

5. 数据频率选择

频率选择需权衡信号衰减速度、交易成本、样本量、计算复杂度。高频数据样本多但噪声大、换手高;低频数据稳定但可能错过快速衰减的因子。实务中常见做法是:因子计算用日频,检验用周频或月频,以降低换手与噪声影响。

频率优点缺点适用场景
日频样本量大,反应快噪声高,换手高短周期因子、高频交易
周频噪声与成本折中样本量中等多数量价因子检验
月频稳定,成本低样本少,衰减慢基本面因子、长期配置

三、案例/场景:一个因子从原始数据到可用面板

假设我们要检验“20日动量因子”。原始数据包含A股全市场日行情,存在停牌、涨跌停、新股上市不足20日等问题。处理流程如下:

  • 获取后复权收盘价,避免除权跳空;
  • 按交易日历对齐,停牌日保留缺失;
  • 剔除上市不足60日的标的,避免新股异常;
  • 计算20日收益率,按日截面MAD去极值;
  • 缺失值用行业中位数填充,并记录填充比例;
  • 输出周频面板,用于IC与分层回测。
经验提示:去极值参数n不宜过小。n=3会过度压缩真实极端收益,n=5或n=6在A股中更稳健。建议对n做敏感性测试,观察IC均值与ICIR是否稳定。

四、误区/复盘:数据准备中最常见的五个坑

  1. 未来函数:用报告期而非公告日对齐财务数据,导致回测虚高。
  2. 幸存者偏差:只保留当前仍上市的标的,忽略退市与停牌样本。
  3. 过度填充:长时间前向填充掩盖了真实缺失,使因子暴露失真。
  4. 去极值不一致:训练集与测试集使用不同参数,导致分布漂移。
  5. 频率混用:用日频因子暴露对应月频收益,却未做时间聚合,造成信息错配。
复盘建议:每次数据准备后,输出一份数据质量报告,包括缺失率、去极值前后分布对比、对齐失败样本数、频率转换日志。这份报告是因子结论可复现的前提。

数据准备不是一次性工作,而是贯穿因子研究全生命周期的工程。把获取、清洗、对齐、缺失、异常、频率六个环节标准化,你才能在后续的中性化与衰减诊断中,把精力真正放在因子逻辑本身,而不是反复排查数据问题。