4. 数据准备与治理
时间外验证与回放评估的结论是否可信,首先不取决于模型多复杂,而取决于数据底座是否可靠。行情、交易、风控三类数据来自不同系统,天然存在时间语义、字段口径、更新频率和缺失模式差异。若直接拼接回放,很容易把“未来信息”泄漏进历史场景,或把本应触发的风控规则误判为未触发。因此,数据准备与治理不是前置杂务,而是验证链路的第一道风控。
一、核心原理:三类数据的语义与对齐基准
行情数据描述市场状态,通常包含快照、逐笔委托、逐笔成交、K线等,具有高频、多源、可能乱序的特点;交易数据描述账户行为,包含订单、成交、撤单、资金持仓变化,强调业务事件顺序;风控日志描述规则判断过程,包含规则编号、输入参数、阈值、命中结果、处置动作,强调可解释与可追溯。三者对齐的核心是统一时间基准与事件顺序。
实践中建议采用“交易所时间戳为主、本地接收时间为辅、业务序列号为最终裁决”的三级对齐策略。行情以交易所时间戳排序,交易以订单/成交编号排序,风控日志以规则触发时的输入快照版本关联。对于跨源关联,不要只用秒级时间戳做等值连接,而应使用时间窗口加业务键的组合条件。
二、方法流程:采集、清洗、对齐、存储与版本管理
完整流程可归纳为五步,每一步都要留下可审计痕迹。
- 采集:行情通过专线或网关落盘,交易通过数据库变更日志或消息队列捕获,风控日志通过结构化日志输出。采集层要记录来源、采集时间、原始报文哈希。
- 清洗:处理重复、乱序、缺失、异常值。行情重点处理涨跌停与临时停牌造成的空档;交易重点处理废单与撤单;风控日志重点处理规则未加载或参数缺失导致的空判。
- 对齐:建立统一事件时间轴,按业务键关联。常用方法是先按时间窗口粗筛,再按订单号、账户号、规则编号精匹配。
- 存储:原始层保留不可变原始数据,清洗层保留标准化数据,服务层按回放场景建立宽表或事件流。冷热分层,原始数据长期归档。
- 版本管理:对数据快照、清洗规则、对齐逻辑、风控规则参数分别打版本,确保任意一次回放可复现。
下面是一个对齐与版本标记的伪代码示例,重点展示时间窗口与业务键的组合逻辑:
for each trade_event in trades:
window_start = trade_event.confirm_time - 500ms
window_end = trade_event.confirm_time + 500ms
candidates = market_snapshots.filter(
symbol == trade_event.symbol and
exchange_time between window_start and window_end
)
matched = candidates.sort_by(exchange_time).last_before(trade_event.confirm_time)
record = {
trade_id: trade_event.id,
market_snapshot_id: matched.id,
risk_log_id: risk_logs.match(trade_event.id, rule_version),
data_version: "market_v3_clean_v2_align_v1",
rule_version: "risk_rules_2024Q2"
}
persist(record)
三、案例/场景:一次回放偏差的定位
某团队在回放中发现某日风控拦截率异常偏低。排查后确认:行情清洗时把接收时间误当作交易所时间,导致部分快照被提前使用;同时风控日志未记录规则参数版本,回放时加载了新版阈值。修正后,行情按交易所时间重排,风控日志补充参数快照,拦截率恢复至合理区间。该案例说明,数据治理缺陷会直接伪装成策略或模型问题。
| 数据类别 | 关键字段 | 常见问题 | 治理要点 |
|---|---|---|---|
| 行情数据 | 交易所时间、接收时间、symbol、买卖盘 | 乱序、重复、快照缺失 | 按交易所时间排序,保留接收时间,标记空档 |
| 交易数据 | 订单号、成交号、账户、确认时间 | 废单、撤单、状态不一致 | 以业务编号为准,保留状态变更链 |
| 风控日志 | 规则编号、参数、阈值、命中结果 | 规则版本缺失、空判 | 记录规则与参数版本,保留输入快照 |
| 版本管理 | 数据版本、清洗版本、对齐版本 | 无法复现历史回放 | 每次回放绑定完整版本组合 |
四、误区与复盘
- 误区一:只清洗不记录。清洗后覆盖原始数据,导致问题无法回溯。应保留原始层与清洗层双份。
- 误区二:用接收时间做回放基准。接收时间受网络抖动影响,会引入未来信息。应以交易所时间为主。
- 误区三:风控日志只记结果不记输入。没有输入快照,无法判断是规则未命中还是数据缺失。
- 误区四:版本管理只覆盖代码。数据、规则、参数、对齐逻辑都要版本化,否则回放不可复现。
把数据准备与治理做扎实,时间外验证才有意义。行情、交易、风控日志三者的采集、清洗、对齐、存储与版本管理,本质上是在为回放评估建立一条可信的时间线。只有这条时间线可审计、可复现,后续的验证结论才具备决策价值。