3、因子数据获取:数据源选择、数据清洗、数据对齐

做多因子模型,第一步就是搞数据。这一步要是没做好,后面再牛的模型也是白搭。我见过太多人把精力全花在因子挖掘和模型调参上,结果数据源选错了、数据没洗干净、时间对不齐——最后回测曲线漂亮得不行,实盘一跑就崩。

说白了,数据是量化投资的「原材料」。原材料有问题,菜做得再好看也是毒药。今天我就把这块掰开了讲清楚。

3.1 数据源选择:选对工具,事半功倍

国内常用的数据源,我接触过的有三类:Wind、Tushare、聚宽。各有各的脾气。

数据源 优点 缺点 适合场景
Wind 数据全、更新快、机构认可度高 贵(一年几万块)、API 有点老 机构、私募、专业团队
Tushare 免费/低价、社区活跃、接口灵活 数据质量参差不齐、有调用限制 个人研究、小团队、快速验证
聚宽 一站式平台、因子库内置、回测方便 数据导出受限、本地化不够灵活 策略开发、回测、初学者

我个人习惯是:机构用 Wind,个人用 Tushare,做原型用聚宽。但不管你选哪个,都要注意一个问题——数据源之间的字段定义可能不一样。比如「复权因子」这个概念,Wind 和 Tushare 的计算方式就有细微差别。我在项目中遇到过,同一个因子用不同数据源算出来,相关系数只有 0.85。嗯,这差距足以让一个策略从赚钱变成亏钱。

核心原则:选定一个数据源后,尽量别混用。如果非要混用,一定要做交叉验证。

3.2 数据清洗:脏数据是量化的大敌

数据拿到手,第一件事不是算因子,而是洗数据。你想想看,A股市场里停牌、涨跌停、新股上市、退市整理期……这些特殊状态都会让数据变得「不干净」。

我一般按以下步骤来洗:

  1. 去重——同一个股票同一天出现多条记录,保留最新一条
  2. 处理缺失值——停牌日的数据是 NaN,用前值填充还是直接剔除?我建议:如果是日频因子,用前值填充;如果是高频因子,直接剔除
  3. 异常值处理——比如某天某只股票的换手率突然飙到 100%,这明显是数据错误。我一般用 3-sigma 或者分位数法来识别
  4. 特殊状态标记——ST 股票、新股(上市不满 60 天)、退市整理期股票,这些都要单独标记,不能直接扔进模型

举个例子,我曾经用 Tushare 拉了一批数据,发现某只股票的市盈率突然变成 -9999。查了一下,原来是那天公司发布了亏损预告,系统自动填充了一个占位符。这种数据如果不处理,算出来的因子值会直接把模型带偏。

小技巧:洗数据的时候,建议把每一步的操作都记录下来。比如「2024-01-01 至 2024-06-30 期间,剔除 ST 股票 23 只,填充缺失值 156 条」。这样后面复盘的时候,你能知道数据到底经历了什么。

3.3 数据对齐:时间轴必须统一

数据对齐,说白了就是让所有因子在同一个时间点上「说话」。比如你有一个动量因子(用过去 20 天的收益率算的),还有一个估值因子(用最新的市盈率算的),这两个因子在时间上天然就不一样。

动量因子用的是 T-20 到 T-1 的数据,估值因子用的是 T 日的数据。如果你不做对齐,直接拿 T 日的估值和 T 日的动量去预测 T+1 日的收益,那就犯了「未来函数」的错误。

我常用的对齐方法是:

  • 截面对齐:每个交易日,所有股票在同一时间点上的因子值必须可用。如果某只股票当天停牌,因子值用前一天的
  • 时间序列对齐:因子计算所用的数据窗口必须一致。比如计算 20 日动量,所有股票都用过去 20 个交易日的数据,不能有的用 18 天,有的用 22 天
  • 频率对齐:日频因子和月频因子不能混用。如果你要构建周频模型,那就把所有因子都统一到周频上

我记得有一次,一个同事跑出来的回测曲线特别漂亮,年化收益 40%+。我一看代码,发现他把 T 日的因子值和 T 日的收益率放在一起回归了。这其实就是用当天的数据预测当天的收益,典型的未来函数。嗯,这种错误新手特别容易犯。

避坑指南:我曾经因为数据对齐没做好,导致一个因子在回测中表现极好,实盘却完全失效。后来发现,是因为我用的是后复权价格计算因子,而收益率用的是前复权价格。两种复权方式的时间窗口不一样,因子和收益率天然就错位了。

3.4 知识体系总览

下面这张图,是我自己总结的因子数据获取全流程。你可以把它当成一个检查清单,每次做数据的时候对照着来。

因子数据获取全流程 数据源选择 Wind / Tushare / 聚宽 数据清洗 去重 / 缺失值 / 异常值 特殊状态标记 数据对齐 截面 / 时间序列 / 频率 避免未来函数 每个环节的关键要点 数据源选择 • 机构用Wind • 个人用Tushare • 原型用聚宽 数据清洗 • 去重保留最新 • 缺失值前值填充 • 异常值3-sigma处理 数据对齐 • 截面统一 • 窗口一致 • 频率匹配 最终目标:干净、对齐、无未来函数的因子数据 这是所有多因子模型的基础,也是量化投资的起点

这张图把整个流程串起来了。从数据源选择,到数据清洗,再到数据对齐,每一步都有具体的操作要点。你可以把它打印出来贴在工位上,每次做数据的时候看一眼,能少踩很多坑。

我的习惯:每次拿到新数据,我都会先跑一个简单的「数据质量报告」。报告里包含:数据量、缺失率、异常值数量、时间跨度、股票数量等。这样一眼就能看出数据有没有大问题。这个习惯帮我省了不少时间。

好了,数据获取这块就讲到这里。记住一句话:数据质量决定了因子上限,模型只是把上限兑现出来。下一章我们会聊因子计算的具体方法,到时候见。


专注资料整理