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() 对数据做一次“体检”,可以快速发现缺失、类型错误和异常值。

三、常见数据质量问题与识别方法

金融数据在采集、传输、存储过程中会产生多种质量问题,以下是最常见的五类:

  1. 缺失值:停牌、节假日、数据源故障都会导致缺失。处理方式包括前向填充、插值或直接剔除,但需注意填充可能引入偏差。
  2. 异常值:如价格突然为0或暴涨100倍,可能是数据错误或真实极端事件。需结合业务逻辑判断,不能盲目用3σ法则剔除。
  3. 时间戳错位:不同数据源的时间戳时区不一致,或基本面数据的“公告期”与“报告期”混淆,导致未来函数。
  4. 幸存者偏差:只使用当前仍在交易的股票,忽略了已退市股票,导致回测收益被高估。
  5. 复权问题:未复权价格在除权除息日会出现跳空,影响收益率计算。需使用前复权或后复权数据。
高频误区:很多初学者直接用 df.fillna(method='ffill') 填充所有缺失值,但在财报数据中,这会把“未披露”错误地变成“与上期相同”,严重扭曲基本面因子。

四、案例复盘:一次因数据质量问题导致的回测失真

某团队开发了一个基于动量因子的日频策略,回测年化收益达到35%。但在实盘运行三个月后,收益仅为4%。复盘发现三个数据问题:

  • 使用了未复权价格计算动量,导致除权日出现虚假信号;
  • 股票池只包含当前成分股,存在幸存者偏差;
  • 财报数据使用了报告期而非公告期对齐,引入了未来信息。

修正后,回测年化收益降至12%,与实盘表现基本一致。这个案例说明:数据质量问题的代价,往往比模型选择错误更大。

金融数据质量问题的传导路径 数据源层 缺失 / 延迟 / 覆盖不足 采集与存储层 时间戳错位 / 复权错误 特征工程层 未来函数 / 幸存者偏差 模型层 过拟合 回测失真:年化35% → 实盘4% 数据问题被模型“记住”并放大 修正后:年化12%,与实盘一致 复权 + 全样本 + 公告期对齐

总结来看,金融数据基础工作的核心不是“拿到数据”,而是理解数据的生成机制、时间语义和质量边界。只有在数据层面做到可追溯、可验证、可复现,后续的机器学习模型才具备真正的实战价值。