4. 数据准备与治理

时间外验证与回放评估的结论是否可信,首先不取决于模型多复杂,而取决于数据底座是否可靠。行情、交易、风控三类数据来自不同系统,天然存在时间语义、字段口径、更新频率和缺失模式差异。若直接拼接回放,很容易把“未来信息”泄漏进历史场景,或把本应触发的风控规则误判为未触发。因此,数据准备与治理不是前置杂务,而是验证链路的第一道风控。

一、核心原理:三类数据的语义与对齐基准

行情数据描述市场状态,通常包含快照、逐笔委托、逐笔成交、K线等,具有高频、多源、可能乱序的特点;交易数据描述账户行为,包含订单、成交、撤单、资金持仓变化,强调业务事件顺序;风控日志描述规则判断过程,包含规则编号、输入参数、阈值、命中结果、处置动作,强调可解释与可追溯。三者对齐的核心是统一时间基准与事件顺序。

实践中建议采用“交易所时间戳为主、本地接收时间为辅、业务序列号为最终裁决”的三级对齐策略。行情以交易所时间戳排序,交易以订单/成交编号排序,风控日志以规则触发时的输入快照版本关联。对于跨源关联,不要只用秒级时间戳做等值连接,而应使用时间窗口加业务键的组合条件。

关键原则:任何回放中,某一时刻可用的数据必须严格限定为该时刻之前已到达且未被撤销的数据。行情快照要区分“生成时间”与“接收时间”,交易要区分“委托时间”与“确认时间”,风控日志要保留“规则版本”与“参数版本”。

二、方法流程:采集、清洗、对齐、存储与版本管理

完整流程可归纳为五步,每一步都要留下可审计痕迹。

  1. 采集:行情通过专线或网关落盘,交易通过数据库变更日志或消息队列捕获,风控日志通过结构化日志输出。采集层要记录来源、采集时间、原始报文哈希。
  2. 清洗:处理重复、乱序、缺失、异常值。行情重点处理涨跌停与临时停牌造成的空档;交易重点处理废单与撤单;风控日志重点处理规则未加载或参数缺失导致的空判。
  3. 对齐:建立统一事件时间轴,按业务键关联。常用方法是先按时间窗口粗筛,再按订单号、账户号、规则编号精匹配。
  4. 存储:原始层保留不可变原始数据,清洗层保留标准化数据,服务层按回放场景建立宽表或事件流。冷热分层,原始数据长期归档。
  5. 版本管理:对数据快照、清洗规则、对齐逻辑、风控规则参数分别打版本,确保任意一次回放可复现。

下面是一个对齐与版本标记的伪代码示例,重点展示时间窗口与业务键的组合逻辑:

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、买卖盘乱序、重复、快照缺失按交易所时间排序,保留接收时间,标记空档
交易数据订单号、成交号、账户、确认时间废单、撤单、状态不一致以业务编号为准,保留状态变更链
风控日志规则编号、参数、阈值、命中结果规则版本缺失、空判记录规则与参数版本,保留输入快照
版本管理数据版本、清洗版本、对齐版本无法复现历史回放每次回放绑定完整版本组合

四、误区与复盘

  • 误区一:只清洗不记录。清洗后覆盖原始数据,导致问题无法回溯。应保留原始层与清洗层双份。
  • 误区二:用接收时间做回放基准。接收时间受网络抖动影响,会引入未来信息。应以交易所时间为主。
  • 误区三:风控日志只记结果不记输入。没有输入快照,无法判断是规则未命中还是数据缺失。
  • 误区四:版本管理只覆盖代码。数据、规则、参数、对齐逻辑都要版本化,否则回放不可复现。
复盘检查清单:回放前确认数据版本、清洗版本、对齐版本、规则版本、参数版本五者齐全;回放中确认无未来数据泄漏;回放后确认结果可复现且差异可解释。

把数据准备与治理做扎实,时间外验证才有意义。行情、交易、风控日志三者的采集、清洗、对齐、存储与版本管理,本质上是在为回放评估建立一条可信的时间线。只有这条时间线可审计、可复现,后续的验证结论才具备决策价值。