2. 金融数据基础
在金融机器学习项目中,模型效果的上限往往在数据阶段就已经被决定。无论使用多么先进的算法,如果对金融数据的类型、来源、获取方式与质量问题缺乏系统认知,最终得到的很可能只是一个“在回测中漂亮、在实盘中失效”的模型。本节将围绕金融数据的四个核心维度展开:数据类型、数据源、数据获取方式、数据质量问题,为后续的特征工程与建模打下基础。
一、核心原理:金融数据的四种基本类型
金融数据并非单一形态,从机器学习的视角看,可以按“结构化程度”和“时间属性”划分为几类,每类数据的处理方式差异很大。
- 行情数据(Market Data):包括OHLCV(开盘、最高、最低、收盘、成交量)、买卖盘口、逐笔成交等。特点是高频、时间戳精确、数值型为主,是量化策略最常用的数据。
- 基本面数据(Fundamental Data):财务报表、盈利预测、估值指标等。特点是低频(季度/年度)、存在披露延迟、需要对齐“报告期”与“公告期”。
- 文本与舆情数据(Text & Sentiment):新闻、公告、研报、社交媒体帖子。特点是半结构化或非结构化,需要NLP处理,且噪声极大。
- 另类数据(Alternative Data):卫星图像、信用卡消费、App活跃度、供应链物流等。特点是获取成本高、覆盖范围有限,但可能包含独特alpha。
理解数据类型的关键在于:不同数据类型的“时间语义”不同。行情数据是“事件时间”,基本面数据是“报告期+公告期”,文本数据是“发布时间”。如果在特征工程中混用这些时间语义,就会引入未来信息,导致数据泄露。
二、数据源与获取方式:从免费到商业的完整谱系
金融数据源可以按“获取难度”和“成本”排列成一个谱系。初学者常犯的错误是直接使用免费数据源做高频策略,而忽略了数据延迟和覆盖度问题。
| 数据源类型 | 典型代表 | 获取方式 | 适用场景 |
|---|---|---|---|
| 免费公开API | Yahoo Finance、Alpha Vantage、Tushare | HTTP请求、Python SDK | 教学、低频策略原型 |
| 交易所直连 | 上交所、深交所、CME | 专线、FIX协议、Level-2行情 | 高频交易、做市 |
| 商业数据商 | Wind、Bloomberg、Refinitiv | 终端、API、FTP批量下载 | 机构投研、多因子模型 |
| 另类数据商 | 卫星影像、消费刷卡数据 | 定制合同、S3存储桶 | 对冲基金、独特alpha |
在获取方式上,常见的有三种模式:批量下载(适合历史回测)、实时流式订阅(适合实盘交易)、定时轮询(适合日频策略)。下面是一个使用Python获取日频行情数据的典型代码片段:
import pandas as pd
import yfinance as yf
# 批量获取多只股票的历史日频数据
tickers = ["AAPL", "MSFT", "GOOGL"]
data = yf.download(tickers, start="2020-01-01", end="2024-01-01")
# 检查数据完整性
print(data["Close"].isna().sum())
print(data["Close"].tail())
实践建议:在正式建模前,先用
df.info()、df.describe() 和 df.isna().sum() 对数据做一次“体检”,可以快速发现缺失、类型错误和异常值。
三、常见数据质量问题与识别方法
金融数据在采集、传输、存储过程中会产生多种质量问题,以下是最常见的五类:
- 缺失值:停牌、节假日、数据源故障都会导致缺失。处理方式包括前向填充、插值或直接剔除,但需注意填充可能引入偏差。
- 异常值:如价格突然为0或暴涨100倍,可能是数据错误或真实极端事件。需结合业务逻辑判断,不能盲目用3σ法则剔除。
- 时间戳错位:不同数据源的时间戳时区不一致,或基本面数据的“公告期”与“报告期”混淆,导致未来函数。
- 幸存者偏差:只使用当前仍在交易的股票,忽略了已退市股票,导致回测收益被高估。
- 复权问题:未复权价格在除权除息日会出现跳空,影响收益率计算。需使用前复权或后复权数据。
高频误区:很多初学者直接用
df.fillna(method='ffill') 填充所有缺失值,但在财报数据中,这会把“未披露”错误地变成“与上期相同”,严重扭曲基本面因子。
四、案例复盘:一次因数据质量问题导致的回测失真
某团队开发了一个基于动量因子的日频策略,回测年化收益达到35%。但在实盘运行三个月后,收益仅为4%。复盘发现三个数据问题:
- 使用了未复权价格计算动量,导致除权日出现虚假信号;
- 股票池只包含当前成分股,存在幸存者偏差;
- 财报数据使用了报告期而非公告期对齐,引入了未来信息。
修正后,回测年化收益降至12%,与实盘表现基本一致。这个案例说明:数据质量问题的代价,往往比模型选择错误更大。
总结来看,金融数据基础工作的核心不是“拿到数据”,而是理解数据的生成机制、时间语义和质量边界。只有在数据层面做到可追溯、可验证、可复现,后续的机器学习模型才具备真正的实战价值。