2. 金融数据基础
在进入流水线工程之前,必须先建立对“金融数据”本身的清晰认知。金融数据不是单一形态的表格,而是横跨交易、行情、账户、风控、舆情等多域、多频率、多精度的异构集合。理解它的分类方式、来源特征与质量约束,决定了后续清洗规则的设计边界。
一、金融数据的四种基本类型
从数据结构与业务语义两个维度,可以把金融数据划分为四类,每类的清洗策略差异显著:
- 结构化交易数据:订单、成交、持仓、资金流水。字段固定、有明确主键与时间戳,但存在撤单、冲正、重复回报等问题。
- 时间序列行情数据:Tick、分钟线、日线,含 OHLCV 与盘口快照。核心挑战是缺失时点、异常跳变与交易所对时偏差。
- 半结构化数据:JSON/XML 格式的报文、FIX 协议消息、日志。字段可嵌套、可选,需做模式推断与扁平化。
- 非结构化数据:公告文本、研报、新闻、客服录音。清洗重点在于编码统一、去噪、实体抽取与时间对齐。
判断数据类型时,不要只看文件扩展名。一个 CSV 里可能同时混有行情快照与人工修正标记,应按“字段语义”而非“存储格式”分类。
二、常见数据源及其固有缺陷
金融数据源大致分为交易所直连、券商柜台、第三方数据商、公开网络与内部系统五类。不同来源的清洗前置动作不同:
| 数据源 | 典型内容 | 常见质量问题 | 清洗前置动作 |
|---|---|---|---|
| 交易所直连 | 逐笔委托、成交、盘口 | 对时偏差、序号跳变、撤单缺失 | 序号连续性校验、时钟校准 |
| 券商柜台 | 账户、持仓、资金流水 | 冲正重复、状态延迟、字段截断 | 业务主键去重、状态机校验 |
| 第三方数据商 | 复权因子、财务指标 | 口径不一致、更新滞后、缺失值填充 | 口径映射、版本比对 |
| 公开网络 | 公告、新闻、舆情 | 编码混乱、HTML 噪声、时间模糊 | 编码归一、正文抽取、时间解析 |
| 内部系统 | 风控评分、人工标注 | 命名不统一、精度丢失、逻辑冲突 | 字典对齐、精度统一、规则复核 |
三、数据质量的六个维度与金融特殊要求
通用数据质量通常关注完整性、准确性、一致性、及时性、唯一性与有效性。在金融场景中,这六个维度会被赋予更强的约束:
- 完整性:行情缺失一个 Tick 可能导致回测信号错位,因此不能简单丢弃,需区分“真实无成交”与“传输丢失”。
- 准确性:价格、数量、金额必须满足精度与量纲约束,例如价格最小变动单位、金额不能为负(除特定业务)。
- 一致性:同一证券在行情、持仓、风控系统中的代码、名称、复权口径必须一致,否则跨表关联会静默出错。
- 及时性:金融数据具有强时效,延迟到达的行情在实时风控中可能已失去价值,需打上“迟到”标记而非直接使用。
- 唯一性:交易回报可能因重发产生重复,必须基于业务主键(如订单号+成交编号)去重,而非整行去重。
- 有效性:字段取值必须落在业务允许域内,如买卖方向、订单状态、市场代码等枚举值。
金融场景中最危险的错误不是“明显脏数据”,而是“看起来合法但语义错误”的数据。例如复权因子被误用为不复权价格,数值本身在合理区间,却会导致收益计算整体偏移。
四、清洗在金融场景中的特殊要求
与通用数据清洗相比,金融清洗有三条不可妥协的原则:
- 可追溯:每一条被修改、填充或删除的记录都必须保留原始值与操作原因,满足审计与合规要求。
- 可回滚:清洗规则版本化,任何一批数据都能回溯到清洗前的状态,避免“洗坏无法复原”。
- 业务语义优先:统计上的异常值不一定是错误,涨跌停、停牌、除权日都会产生“合法异常”,不能一律按离群点处理。
下面是一段典型的行情数据清洗配置片段,体现了精度、时间与业务域的联合约束:
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 是除权后参考价,属于合法跳变。正确做法是:先对齐除权事件表,再决定是否调整,而不是直接按统计阈值过滤。
这个案例说明,金融数据清洗流水线必须把“业务事件”作为一等输入,与数据本身一起参与规则判断。
六、常见误区与复盘要点
在金融数据清洗实践中,以下误区反复出现,值得在项目启动前明确规避:
- 用通用统计规则替代业务规则:把涨跌停、除权、停牌当作异常值处理,导致回测结果失真。
- 去重时忽略业务主键:按整行去重会误删同一时刻不同订单的合法成交。
- 缺失值一律填充:行情缺失与财务字段缺失语义不同,前者可能应标记为“无成交”,后者可能应保持空值。
- 清洗后不留原始值:一旦规则有误,无法回溯,合规审计也无法通过。
- 忽略时区与交易日历:跨市场数据对齐时,时区与交易日差异会制造大量伪异常。
复盘时建议问三个问题:这条规则是否依赖业务事件表?被修改的数据能否还原?异常处理是否区分了“错误”与“合法特殊”?能回答清楚,清洗流水线才算具备金融级可靠性。