数据质量初探:常见数据质量问题与评估指标
做期权做市,数据就是你的弹药。弹药质量不行,枪法再好也白搭。今天咱们聊聊数据质量那些坑——我踩过的、你可能会踩的、以及怎么避开它们。
核心观点:数据清洗不是锦上添花,是生存底线。期权做市对数据质量的要求,比股票交易高一个量级。
一、常见数据质量问题
我刚开始做期权做市那会儿,天真地以为交易所给的数据都是干净的。直到有一次策略回测跑出惊人收益,结果发现是数据里多了几个零……嗯,从那以后我再也不敢对数据掉以轻心。
1. 缺失值
缺失值是最常见的问题。期权数据里,缺失值通常出现在这几个地方:
- 行情快照缺失:某几秒的买卖报价没收到
- 合约字段缺失:比如行权价、到期日等信息不全
- 计算指标缺失:隐含波动率算不出来,因为中间某个参数丢了
我个人习惯,先看缺失比例。低于5%的,用前向填充或者插值处理。超过20%的,直接扔掉那段时间的数据——别心疼,留着反而污染模型。
避坑指南:我曾经遇到过一个坑——某只深度虚值期权,连续半小时没有成交,系统自动填充了上一笔价格。结果回测时策略疯狂买入这只期权,因为"价格一直没变"……实际上市场根本没流动性。
2. 异常值
异常值比缺失值更隐蔽。缺失值至少你知道它没了,异常值是你以为它正常,其实它有毒。
期权数据里常见的异常值:
- 价格突变:上一笔0.5,下一笔5000——明显是输入错误
- 买卖价差异常:正常价差0.01,突然变成10块钱
- 隐含波动率爆表:算出来500%的IV,市场不可能这样
怎么检测?我一般用3σ原则或者IQR(四分位距)方法。说白了,就是找出那些"跟周围数据画风不一样"的点。
# 一个简单的异常值检测
import numpy as np
def detect_outliers_iqr(data, factor=1.5):
Q1 = np.percentile(data, 25)
Q3 = np.percentile(data, 75)
IQR = Q3 - Q1
lower = Q1 - factor * IQR
upper = Q3 + factor * IQR
return (data < lower) | (data > upper)
注意:期权数据天然就有"肥尾"特征,尤其是临近到期的合约。别把正常的极端值当成异常值给删了。我建议结合合约状态来判断——快到期的期权,价格波动大是正常的。
3. 重复值
重复值看起来简单,其实挺烦人。你想想看,同一笔数据出现两次,回测时相当于给这个样本多了一倍权重。
重复值的来源:
- 数据源重复推送:交易所发了两次同样的快照
- 数据拼接错误:合并多个文件时没去重
- 时间戳精度问题:毫秒级精度不够,导致不同数据被当成同一笔
处理方式很简单:按时间戳+合约代码去重。但要注意——有些重复是"伪重复",比如同一秒内两次不同的报价,只是时间戳精度不够。这种情况我建议保留最后一次,或者取均值。
4. 时间戳错乱
这个坑我踩得最深。时间戳错乱会导致你的策略时序完全乱掉。
常见表现:
- 时间倒流:后一条数据的时间戳比前一条还早
- 时间跳跃:中间缺了一大段时间
- 时区混乱:有的用UTC,有的用北京时间,混在一起
我记得有一次,策略在下午3点突然大量开仓,查了半天发现是数据源把下午3点的数据标记成了上午9点……策略以为开盘了,其实都快收盘了。
我的习惯:拿到数据第一件事,先画个时间戳分布图。一眼就能看出有没有缺失、有没有跳跃。别急着跑策略,先看看数据长什么样。
二、数据质量评估指标
光知道问题还不够,你得有量化指标来衡量数据质量。我一般用这四个维度:
| 指标 | 含义 | 期权场景下的应用 |
|---|---|---|
| 完整性 | 数据是否齐全 | 每个合约在每个时间点是否有报价 |
| 准确性 | 数据是否真实 | 价格是否在合理范围内,买卖价差是否合理 |
| 一致性 | 数据是否自洽 | 同一合约在不同数据源是否一致,期权价格与理论价格是否匹配 |
| 时效性 | 数据是否及时 | 数据延迟是否在可接受范围内 |
完整性
完整性说白了就是"该有的数据有没有"。我一般用这个公式:
完整性 = 实际数据量 / 预期数据量 × 100%
比如一天240分钟的交易时间,每5秒一条快照,预期应该有2880条。如果实际只有2500条,完整性就是86.8%。低于90%我就要警惕了。
准确性
准确性最难量化。我通常用两种方法:
- 范围检查:价格不能为负,隐含波动率不能超过200%
- 交叉验证:用期权平价公式检查看涨看跌价格是否一致
举个例子,如果同一行权价、同一到期日的看涨和看跌期权,用平价公式算出来的理论价格和实际价格差太多,那数据大概率有问题。
一致性
一致性关注的是"不同数据源之间是否打架"。做市商通常会接入多个数据源,如果两个数据源对同一合约的报价差了0.5个tick,你得知道该信谁。
我个人的做法:
- 以交易所直连数据为准
- 其他数据源作为校验
- 偏差超过阈值时标记为"可疑数据"
时效性
做市对时效性要求极高。延迟100毫秒可能就错过一笔好交易。我一般监控两个指标:
- 数据延迟:从交易所发出到系统收到的时间差
- 数据抖动:延迟的波动程度
延迟大但稳定,还能接受。延迟忽大忽小,那策略就惨了——你永远不知道当前看到的数据是100毫秒前的还是1秒前的。
三、知识体系总览
下面这张图,是我自己整理的数据质量评估框架。每次拿到新数据,我都会按这个流程走一遍:
这张图的核心逻辑很简单:从原始数据出发,经过四个维度的检验,把有问题的数据标记出来、处理掉,最后得到能用的高质量数据。每一步都有对应的技术手段,后面几章我会详细展开。
总结一下:数据质量不是一次性工作,而是持续的过程。我每天开盘前都会跑一遍数据质量检查脚本,确保今天用的数据没问题。养成这个习惯,能帮你省掉无数个"为什么策略又亏钱了"的深夜。
公众号:蓝海资料掘金营,微信deep3321