2. 金融数据基础

在机器学习Alpha研究中,模型的上限往往由数据决定,而非算法。理解金融数据的来源、结构与处理要点,是构建可靠交易信号的第一道门槛。本节将系统梳理三类核心数据,并给出频率、复权、对齐、缺失值与异常值的实战处理框架。

一、三类数据的来源与结构

行情数据是量化研究中使用频率最高的数据,来源包括交易所直连、Wind/聚宽/Tushare等数据商、以及券商Level-2行情。其结构通常为时间戳、证券代码、开高低收、成交量、成交额、买卖盘口等字段。行情数据又可细分为日线、分钟线、Tick级三类,频率越高,噪声越大,但对微观结构信号的刻画越精细。

基本面数据来源于上市公司定期报告(年报、季报)、业绩预告、分析师一致预期等。其结构以“报告期+证券代码”为主键,包含营收、净利润、ROE、资产负债率等财务指标。关键难点在于:财报存在披露滞后,使用时必须按“公告日”而非“报告期”对齐,否则会引入未来函数。

另类数据包括新闻舆情、卫星图像、电商销量、招聘信息、供应链关系等。其结构高度异构,可能是文本、图像或图结构。另类数据的价值在于与传统因子低相关,但清洗成本高、覆盖度不稳定,需谨慎评估其可持续性。

金融数据三类来源与处理流向 行情数据 交易所 / 数据商 / Level-2 OHLCV · 盘口 · Tick 频率:日 / 分钟 / Tick 基本面数据 年报 / 季报 / 预告 / 预期 营收 · 利润 · ROE · 负债 主键:报告期 + 代码 另类数据 新闻 / 卫星 / 电商 / 招聘 文本 · 图像 · 图结构 异构 · 高清洗成本 统一处理层:频率对齐 · 复权 · 缺失值 · 异常值 输出:干净、对齐、可回测的特征矩阵 机器学习Alpha模型 → 交易信号

二、数据频率、复权与对齐要点

频率选择需与策略持有期匹配。日频因子适合周度调仓,分钟因子适合日内交易。跨频率使用时,必须统一到同一时间轴,通常采用“降频”而非“升频”,避免插值引入虚假信息。

复权处理是行情数据特有的关键步骤。除权除息会导致价格跳空,若不复权,均线、收益率等指标将严重失真。前复权适合回测(保持当前价格真实),后复权适合历史收益计算。实战中建议:用后复权价计算收益率,用前复权价展示K线。

数据对齐的核心是时间戳语义统一。行情数据用交易时间,基本面数据用公告时间,另类数据用采集时间。三者对齐时,必须确保“在决策时刻只能看到已发布的信息”。

# 示例:按公告日对齐基本面数据,避免未来函数
import pandas as pd

# 行情数据:交易日索引
price = pd.read_csv("price.csv", parse_dates=["trade_date"])

# 基本面数据:公告日 + 报告期
fund = pd.read_csv("fundamental.csv", parse_dates=["ann_date", "report_period"])

# 关键:用公告日做 merge_asof,而非报告期
merged = pd.merge_asof(
    price.sort_values("trade_date"),
    fund.sort_values("ann_date"),
    left_on="trade_date",
    right_on="ann_date",
    by="symbol",
    direction="backward"   # 只取已公告的数据
)

三、缺失值与异常值处理

金融数据缺失极为常见:停牌、新股上市、财报未披露、另类数据覆盖不全等。处理原则是先判断缺失机制,再选择填充策略。

  • 停牌缺失:不应填充价格,应标记为NaN并让模型学习“停牌状态”这一信息。
  • 财报缺失:可用前值填充(ffill),但需限制填充窗口,避免使用过期过久的数据。
  • 另类数据缺失:若覆盖度低于阈值(如60%),建议直接剔除该因子。

异常值方面,金融数据存在厚尾和极端事件。常用方法包括:MAD中位数绝对偏差、分位数截断(Winsorize)、以及基于波动率的动态阈值。切忌直接用3σ法则,因为收益率分布并非正态。

常见误区:用全样本均值填充缺失值,会引入未来信息;用报告期而非公告日对齐财报,是回测虚高的头号原因;对停牌价格做插值,会制造虚假交易信号。

四、实战案例与复盘清单

假设构建一个“财报超预期+动量”的日频Alpha因子。流程如下:

  1. 获取日线行情,计算后复权收益率与20日动量。
  2. 获取财报数据,按公告日对齐,计算净利润同比增速。
  3. 将财报因子前向填充至下一公告日,限制最长90天。
  4. 对动量因子做MAD去极值,对财报因子做分位数截断。
  5. 合并后检查缺失率,剔除缺失率>40%的股票。
处理环节 推荐做法 禁止做法
复权 后复权算收益,前复权画图 不复权直接算均线
财报对齐 按公告日merge_asof 按报告期直接合并
缺失值 按机制分类处理,限制填充窗口 全样本均值填充
异常值 MAD或分位数截断 直接删除所有极值
频率对齐 降频,统一到交易日 升频插值
复盘建议:每次因子回测前,先做“数据体检”——检查缺失率、极值分布、时间戳单调性、复权一致性。数据问题导致的回测偏差,远比模型过拟合更隐蔽、更致命。