2. 金融数据源概览
在多源金融数据的事件时间对齐中,第一步不是写代码,而是建立对数据源本身的“时间语义地图”。同一笔市场事件,在行情、交易、公告、新闻、财报、宏观六类数据源中,其被记录、被发布、被生效的时间往往并不一致。若忽略这些差异,后续对齐就会把“发布时间”误当“发生时间”,把“报告期”误当“披露时间”,导致特征穿越或事件错配。
一、六类数据源的时间语义与频率特征
下表从频率、典型时间字段、时间语义和主要对齐风险四个角度,对六类数据源进行横向对比。这是本章最需要先建立的整体认知。
| 数据源 | 典型频率 | 关键时间字段 | 时间语义 | 主要对齐风险 |
|---|---|---|---|---|
| 行情 | 毫秒~日频 | trade_time、quote_time、exchange_ts | 交易所撮合或快照生成时刻 | 交易所时钟与本地时钟偏差、快照非连续 |
| 交易 | 逐笔/订单级 | order_ts、exec_ts、cancel_ts | 订单与成交的实际发生时刻 | 撤单与成交乱序、回报延迟 |
| 公告 | 事件驱动 | publish_time、effective_date | 披露时刻与生效日期分离 | 盘后发布、次日生效,易造成前视 |
| 新闻 | 秒级~分钟级 | news_time、ingest_time | 媒体发布与系统入库不同步 | 转载、修订、时区不统一 |
| 财报 | 季度/年度 | report_period、announce_date | 报告期与披露日严格区分 | 把报告期当可用时间,严重前视 |
| 宏观 | 月/季/年 | period、release_time、revision | 统计期、初值、修正值多层 | 修正值回填、发布滞后 |
二、核心原理:三类时间与可用时间边界
无论数据源如何变化,事件时间对齐都围绕三类时间展开:事件时间(事情真实发生)、记录时间(系统写入)、可用时间(下游可安全使用)。行情和交易的记录时间通常接近事件时间,延迟以毫秒计;公告、新闻、财报、宏观则存在明显的“发布—生效—修正”链条,可用时间往往晚于事件时间数小时到数月。
因此,对齐时不能简单按事件时间排序,而应构造统一的“可用时间轴”。对每条记录,取所有时间字段中“最晚且真实可观测”的那个作为可用时间下界。例如财报的可用时间应取 announce_date 而非 report_period;宏观数据若存在修正,应保留 revision_time 并只使用当时已发布的版本。
三、方法流程:从数据源到统一时间轴
- 字段盘点:列出每个数据源的全部时间字段,标注其语义(发生/记录/发布/生效/修正)。
- 时区归一:统一为 UTC 或交易所本地时间,并记录原始时区,避免跨市场错位。
- 可用时间计算:按业务规则确定可用时间,如公告取 publish_time,财报取 announce_date,宏观取 release_time。
- 频率对齐:高频行情可降采样到决策频率,低频数据可前向填充,但填充只能使用已发布值。
- 乱序与重复处理:对逐笔和新闻按可用时间排序,处理重复转载与修订版本。
- 对齐验证:抽样检查是否存在“特征时间晚于标签时间”的穿越样本。
# 示例:统一可用时间字段(伪代码)
def resolve_available_time(row, source):
if source == "quote":
return row["exchange_ts"]
if source == "announcement":
return row["publish_time"]
if source == "financial_report":
return row["announce_date"] # 不是 report_period
if source == "macro":
return row["release_time"] # 不是 period
return row["ingest_time"]
四、案例场景:同一事件的六源时间线
假设某上市公司在 2024-04-25 收盘后发布年报,报告期为 2023-12-31,新闻在 19:30 转载,行情在次日 09:30 反应,宏观数据在 05-15 发布。若以报告期 2023-12-31 作为特征时间,模型会在 2024 年初就“提前知道”年报内容,形成严重前视。正确做法是以 announce_date 2024-04-25 作为可用时间,新闻和行情则按各自可用时间对齐到该事件之后。
五、误区与复盘
- 误区一:用报告期代替披露日。财报、宏观的 period 只是统计区间,真正可用时间是发布日,混用会造成数月级前视。
- 误区二:忽略时区。跨市场数据若未统一时区,行情与新闻可能错位数小时,事件窗口完全失真。
- 误区三:把入库时间当事件时间。新闻转载和系统补录会让 ingest_time 远晚于 news_time,需按业务选择。
- 误区四:忽略修正值。宏观数据初值与修正值差异显著,回填修正值等于使用未来信息。
建立六类数据源的时间语义地图,是后续事件时间对齐、特征工程和回测可信度的基础。只有先分清“何时发生”与“何时可用”,才能让多源数据在同一时间轴上安全汇合。