4. 异常识别入门
在Tick级行情数据中,异常值往往不是“明显错误”,而是隐藏在正常波动中的“不合理”。例如某只股票在连续竞价阶段突然出现一笔成交价偏离当前中间价3%的Tick,或某秒内成交量是前10秒均值的50倍。这些异常可能来自数据源错误、交易所撮合延迟、网络丢包,也可能是真实的市场冲击。识别它们,是修复和后续策略开发的前提。本节从统计与可视化两条路径入手,建立可落地的异常识别入门能力。
一、核心原理:异常的本质是“偏离预期”
异常识别的前提是建立“正常”的基准。在Tick数据中,正常通常表现为:价格围绕中间价小幅波动、成交量符合日内节奏、买卖价差稳定、成交间隔均匀。异常则是这些统计特征被显著破坏。统计方法用数值阈值量化“显著”,可视化方法用图形直观暴露“破坏”。两者互补:统计给出可复现的判定规则,可视化帮助发现规则未覆盖的模式。
关键认知:没有绝对异常,只有相对于某个基准的异常。基准可以是全市场、同板块、同股票历史、或滚动窗口。选择不同基准,异常集合会完全不同。
二、统计方法:均值、标准差、分位数
统计方法的核心是构造一个统计量,并设定阈值。常用三种:
- 均值与标准差(Z-Score):假设某特征(如成交量、价差)近似正态分布,计算
z = (x - μ) / σ,当 |z| > 3 时标记为异常。适合成交量、成交笔数等右偏不严重的数据。 - 分位数(Quantile):不依赖分布假设,直接取历史数据的1%和99%分位作为阈值。适合价格变动、买卖价差等厚尾分布。例如,若某Tick的价差超过过去1分钟价差的99%分位,则视为异常。
- 滚动窗口统计:用过去N秒或N笔Tick计算μ和σ,避免用全历史导致对近期变化不敏感。窗口长度是关键参数,通常取30秒到5分钟。
下面是一个Python示例,对成交量做滚动Z-Score异常标记:
import pandas as pd
import numpy as np
# 假设df包含列:timestamp, price, volume
df['vol_mean'] = df['volume'].rolling(window=100).mean()
df['vol_std'] = df['volume'].rolling(window=100).std()
df['vol_z'] = (df['volume'] - df['vol_mean']) / df['vol_std']
df['vol_anomaly'] = df['vol_z'].abs() > 3
# 分位数方法:滚动99%分位
df['vol_q99'] = df['volume'].rolling(window=100).quantile(0.99)
df['vol_anomaly_q'] = df['volume'] > df['vol_q99']
统计方法的优点是自动化、可批量处理,但阈值需要根据品种和时段调整。例如开盘集合竞价阶段成交量天然放大,若用全天的均值阈值,会误报大量正常Tick。
三、可视化方法:K线图、散点图、热力图
可视化不是“画图好看”,而是用视觉编码快速定位异常区域。三种图各有侧重:
| 图型 | 适用异常 | 关键视觉线索 | 注意事项 |
|---|---|---|---|
| K线图(Tick级) | 价格跳空、影线异常、成交量突增 | 长上/下影线、实体与成交量不匹配 | 需按时间聚合,避免单Tick噪声 |
| 散点图 | 价差与成交量的关系偏离、离群点 | 远离主簇的孤立点、密度断层 | 坐标轴用对数可暴露小值异常 |
| 热力图 | 日内时段性异常、多股票同步异常 | 颜色突变、局部高亮区块 | 需统一色标,否则跨图不可比 |
以散点图为例,横轴为买卖价差,纵轴为成交量,正常Tick会聚集在左下区域;若出现价差极大但成交量也极大的点,可能是数据错误或极端行情。热力图则适合展示“时间×股票”的异常密度,例如某分钟某股票异常Tick数突然变红。
技巧:先用统计方法生成异常标记,再用可视化叠加显示。例如在K线图上用红色三角标记Z-Score超阈值的Tick,能同时看到异常的位置和形态。
四、方法流程与案例场景
一个可复用的识别流程如下:
- 确定特征:价格变动、成交量、价差、成交间隔、买卖不平衡等。
- 选择基准:滚动窗口(推荐)或全历史,按品种和时段分组。
- 计算统计量:Z-Score或分位数,输出异常标记。
- 可视化验证:绘制K线、散点、热力图,人工复核标记是否合理。
- 调整阈值:根据误报和漏报情况,微调窗口长度和阈值倍数。
案例:某期货主力合约在14:55出现一笔成交量是前5分钟均值20倍的Tick,价格未变。统计方法用滚动Z-Score标记为异常;散点图显示该点远离主簇;进一步检查发现是收盘前平仓集中撮合,属于正常但需单独处理。若直接删除,会丢失真实成交信息。
误区:把统计异常等同于数据错误。异常可能是真实市场行为(如大单、涨跌停打开),也可能是错误。识别只是第一步,修复前必须结合业务判断。
五、复盘与常见问题
复盘时重点检查:阈值是否对开盘/收盘时段过于敏感;滚动窗口是否因数据缺失而失真;可视化是否因坐标轴范围过大而掩盖小异常。常见问题包括:用全历史均值导致近期异常漏报;分位数在样本量不足时不稳定;热力图色标未统一导致误判。建议每次识别后保留异常清单和对应图表,形成可追溯的记录。
掌握统计与可视化两条路径后,你已能对Tick数据中的异常进行初步识别。下一步是理解异常的具体类型和修复策略,但在此之前,请务必用真实数据跑通上述流程,并记录每次阈值调整的效果。