3. 行情数据质量核验指标体系设计

在异常行情数据质量核验中,最忌讳的是“凭感觉判断数据好坏”。一条行情记录到底算不算异常,必须由可量化、可复现、可追溯的指标来回答。指标体系的作用,就是把“完整性、准确性、一致性、及时性、唯一性”这些抽象维度,翻译成能直接计算、能设定阈值、能触发告警的具体度量。本节围绕这五个维度展开指标定义,并给出一个可落地的核验规则库结构。

五个维度的量化指标

完整性关注“该有的数据有没有到”。最基础的指标是缺失率:在统计窗口内,实际收到的记录数除以理论应到记录数。理论值需要按品种的交易时段、行情快照频率推算,例如某期货合约在日盘时段按每秒2笔快照推送,一个4小时交易时段理论应有28800笔,若实际收到28512笔,则缺失率为1%。除记录级缺失外,还要看字段级缺失,如某批次中“买一价”为空的比例。完整性指标适合按品种、按交易时段、按字段三个粒度分别统计,避免整体缺失率被大品种稀释。

准确性关注“数据值对不对”。常用指标包括跳变率与越界率。跳变率定义为相邻两笔快照价格变动幅度超过阈值的比例,阈值可按品种波动特性设定,例如股指期货单笔跳变超过0.5%计为一次跳变。越界率则统计价格、数量落在合理区间之外的记录占比,如价格为负、买一价高于卖一价、成交量为负等。准确性指标需要结合业务规则,不能只看统计分布。

一致性关注“多源或多字段之间是否自洽”。典型指标有价差一致率(买一价不高于卖一价的记录占比)、跨源偏差率(主备两路行情同一时间戳价格差异超过容忍度的比例)、时间戳单调率(同一合约时间戳严格递增的记录占比)。一致性指标往往需要多路数据对齐后才能计算,是发现“单路看似正常、多路对不上”问题的关键。

及时性关注“数据到得够不够快”。核心是延迟分布,而不是单一平均值。应统计P50、P95、P99延迟以及超时率(延迟超过阈值的记录占比)。延迟定义为本地接收时间减去行情源时间戳,需先统一时钟基准。仅看均值会掩盖长尾,P99延迟往往才是交易决策真正关心的。

唯一性关注“有没有重复”。重复率定义为同一合约、同一时间戳、同一价格数量组合出现多次的记录占比。重复可能来自重推、补发或链路重传,需区分“完全重复”与“键重复但内容不同”两种情况,后者往往意味着数据被篡改或拼接错误。

行情数据质量五维指标体系 → 核验规则库 完整性 缺失率 字段空值率 时段覆盖率 粒度:品种/时段/字段 准确性 跳变率 越界率 价格倒挂率 阈值按品种波动设定 一致性 价差一致率 跨源偏差率 时间戳单调率 需多路对齐后计算 及时性 P50/P95/P99延迟 超时率 延迟抖动 统一时钟基准 唯一性 完全重复率 键重复率 重推识别率 区分内容异同 核验规则库结构(单条规则字段) rule_id dimension metric threshold / window scope severity action owner / version 示例规则: R-COMP-001 | 完整性 | 缺失率 | 窗口=1个交易时段,阈值>1% | 范围=单合约 | 严重度=高 | 动作=告警+标记 R-TIME-003 | 及时性 | P99延迟 | 窗口=5分钟,阈值>200ms | 范围=全市场 | 严重度=中 | 动作=告警 R-UNIQ-002 | 唯一性 | 键重复率 | 窗口=1分钟,阈值>0.1% | 范围=单合约 | 严重度=高 | 动作=拦截+告警

指标设计中的三个关键约定

第一,统计窗口必须显式声明。缺失率按1分钟、5分钟还是整个交易时段统计,结论可能完全不同。建议规则库中每条规则都绑定窗口字段,且窗口与业务场景匹配:实时监控用短窗口,日终复盘用长窗口。

第二,阈值要分层。同一指标对不同品种、不同流动性水平应有不同阈值。例如跳变率阈值,对高流动性主力合约可设0.3%,对低流动性远月合约可放宽到1%。规则库应支持“默认阈值+品种覆盖”的继承机制,避免为每个品种重复配置。

第三,严重度与动作分离。严重度描述问题影响程度(高/中/低),动作描述系统响应(告警、标记、拦截、仅记录)。二者分离后,同一指标在不同场景下可复用同一计算逻辑,只调整动作策略。

可落地的规则库结构

规则库建议采用“规则元数据+计算表达式+阈值配置”的三段式结构。规则元数据包含rule_id、dimension、metric、scope、severity、owner、version;计算表达式描述指标如何从原始数据算出,可用SQL片段或DSL表达;阈值配置独立存储,支持按品种、时段覆盖。这样设计的好处是:新增品种只需增加阈值配置,不必改动规则本身;调整告警策略只需改动作字段,不影响指标计算。

下面给出一个规则配置的示例片段,展示字段如何组织:

{
  "rule_id": "R-COMP-001",
  "dimension": "completeness",
  "metric": "missing_rate",
  "scope": {"type": "contract", "value": "IF2409"},
  "window": "1 trading_session",
  "expression": "1 - actual_count / expected_count",
  "threshold": {"default": 0.01, "override": {"IF2409": 0.005}},
  "severity": "high",
  "action": ["alert", "mark_suspect"],
  "owner": "market_data_team",
  "version": "v1.2"
}

该结构中,expression字段保证指标可复算,threshold的override机制解决品种差异,action数组支持多动作组合。实际落地时,规则库通常以配置表形式存入数据库,由核验引擎定时加载并执行,执行结果写入质量明细表,供后续排障和报表使用。

指标设计完成后,建议先用历史数据做一次“回放校准”:把过去一周的行情重新跑一遍规则,观察各指标的分布和告警数量。若某条规则告警量过大或几乎不触发,说明阈值需要调整,而不是规则本身有问题。校准后的阈值才适合上线。

需要强调的是,五个维度并非孤立。缺失率升高往往伴随延迟分布恶化,重复率异常可能与重推机制相关。因此规则库应支持“关联规则”字段,允许把多条规则组合成复合判断,例如“缺失率超阈值且P99延迟超阈值”才触发高等级告警,从而降低误报。指标体系的价值不在于指标数量多,而在于每条指标都能对应一个明确的判断动作和处置路径。