2. 金融数据基础

在进入流水线工程之前,必须先建立对“金融数据”本身的清晰认知。金融数据不是单一形态的表格,而是横跨交易、行情、账户、风控、舆情等多域、多频率、多精度的异构集合。理解它的分类方式、来源特征与质量约束,决定了后续清洗规则的设计边界。

一、金融数据的四种基本类型

从数据结构与业务语义两个维度,可以把金融数据划分为四类,每类的清洗策略差异显著:

  • 结构化交易数据:订单、成交、持仓、资金流水。字段固定、有明确主键与时间戳,但存在撤单、冲正、重复回报等问题。
  • 时间序列行情数据:Tick、分钟线、日线,含 OHLCV 与盘口快照。核心挑战是缺失时点、异常跳变与交易所对时偏差。
  • 半结构化数据:JSON/XML 格式的报文、FIX 协议消息、日志。字段可嵌套、可选,需做模式推断与扁平化。
  • 非结构化数据:公告文本、研报、新闻、客服录音。清洗重点在于编码统一、去噪、实体抽取与时间对齐。
判断数据类型时,不要只看文件扩展名。一个 CSV 里可能同时混有行情快照与人工修正标记,应按“字段语义”而非“存储格式”分类。

二、常见数据源及其固有缺陷

金融数据源大致分为交易所直连、券商柜台、第三方数据商、公开网络与内部系统五类。不同来源的清洗前置动作不同:

数据源 典型内容 常见质量问题 清洗前置动作
交易所直连 逐笔委托、成交、盘口 对时偏差、序号跳变、撤单缺失 序号连续性校验、时钟校准
券商柜台 账户、持仓、资金流水 冲正重复、状态延迟、字段截断 业务主键去重、状态机校验
第三方数据商 复权因子、财务指标 口径不一致、更新滞后、缺失值填充 口径映射、版本比对
公开网络 公告、新闻、舆情 编码混乱、HTML 噪声、时间模糊 编码归一、正文抽取、时间解析
内部系统 风控评分、人工标注 命名不统一、精度丢失、逻辑冲突 字典对齐、精度统一、规则复核

三、数据质量的六个维度与金融特殊要求

通用数据质量通常关注完整性、准确性、一致性、及时性、唯一性与有效性。在金融场景中,这六个维度会被赋予更强的约束:

  1. 完整性:行情缺失一个 Tick 可能导致回测信号错位,因此不能简单丢弃,需区分“真实无成交”与“传输丢失”。
  2. 准确性:价格、数量、金额必须满足精度与量纲约束,例如价格最小变动单位、金额不能为负(除特定业务)。
  3. 一致性:同一证券在行情、持仓、风控系统中的代码、名称、复权口径必须一致,否则跨表关联会静默出错。
  4. 及时性:金融数据具有强时效,延迟到达的行情在实时风控中可能已失去价值,需打上“迟到”标记而非直接使用。
  5. 唯一性:交易回报可能因重发产生重复,必须基于业务主键(如订单号+成交编号)去重,而非整行去重。
  6. 有效性:字段取值必须落在业务允许域内,如买卖方向、订单状态、市场代码等枚举值。
金融场景中最危险的错误不是“明显脏数据”,而是“看起来合法但语义错误”的数据。例如复权因子被误用为不复权价格,数值本身在合理区间,却会导致收益计算整体偏移。

四、清洗在金融场景中的特殊要求

与通用数据清洗相比,金融清洗有三条不可妥协的原则:

  • 可追溯:每一条被修改、填充或删除的记录都必须保留原始值与操作原因,满足审计与合规要求。
  • 可回滚:清洗规则版本化,任何一批数据都能回溯到清洗前的状态,避免“洗坏无法复原”。
  • 业务语义优先:统计上的异常值不一定是错误,涨跌停、停牌、除权日都会产生“合法异常”,不能一律按离群点处理。

下面是一段典型的行情数据清洗配置片段,体现了精度、时间与业务域的联合约束:

cleaning_rules:
  price:
    min_tick: 0.01
    max_daily_change: 0.44   # 考虑科创板/创业板
    allow_zero_volume: true
  timestamp:
    timezone: Asia/Shanghai
    max_delay_ms: 3000
    monotonic: true
  dedup:
    key: [symbol, trade_date, trade_time, seq_no]
    keep: last
  audit:
    store_original: true
    rule_version: v2.3.1

五、一个真实场景:Tick 数据清洗中的“合法异常”

某日某股票在 14:57 出现价格从 10.00 跳至 10.50,涨幅 5%。若按通用离群点规则,该点会被标记为异常并平滑。但结合业务日历发现,当日为该股票除权除息日,10.50 是除权后参考价,属于合法跳变。正确做法是:先对齐除权事件表,再决定是否调整,而不是直接按统计阈值过滤。

这个案例说明,金融数据清洗流水线必须把“业务事件”作为一等输入,与数据本身一起参与规则判断。

金融数据质量六维约束与清洗动作映射 完整性 缺失区分与标记 准确性 精度与量纲校验 一致性 口径与代码对齐 及时性 延迟标记与分流 唯一性 业务主键去重 清洗规则引擎 业务事件表对齐 规则版本化 原始值留存 可回滚快照 异常分级处理 审计日志输出 干净数据层 可回测 / 可风控 隔离区 待人工复核 审计档案 原始值 + 规则版本

六、常见误区与复盘要点

在金融数据清洗实践中,以下误区反复出现,值得在项目启动前明确规避:

  • 用通用统计规则替代业务规则:把涨跌停、除权、停牌当作异常值处理,导致回测结果失真。
  • 去重时忽略业务主键:按整行去重会误删同一时刻不同订单的合法成交。
  • 缺失值一律填充:行情缺失与财务字段缺失语义不同,前者可能应标记为“无成交”,后者可能应保持空值。
  • 清洗后不留原始值:一旦规则有误,无法回溯,合规审计也无法通过。
  • 忽略时区与交易日历:跨市场数据对齐时,时区与交易日差异会制造大量伪异常。
复盘时建议问三个问题:这条规则是否依赖业务事件表?被修改的数据能否还原?异常处理是否区分了“错误”与“合法特殊”?能回答清楚,清洗流水线才算具备金融级可靠性。