4. 盘口特征计算中的漏报
盘口异常识别模型的第一道关口不是模型本身,而是特征计算。买卖价差、委托量、订单簿斜率这些特征一旦在计算窗口或边界条件上出错,异常信号就会在进入模型之前被"抹平",表现为规则明明配置了、阈值也合理,却始终不触发告警。这类漏报排查起来比模型漏报更隐蔽,因为特征值本身看起来"正常",只是它算的根本不是我们以为的那段盘口。
一、三类特征的计算口径与常见错误点
先明确本节涉及的三类特征及其标准口径,后续所有案例都以此为参照:
- 买卖价差:通常取
spread = ask1 - bid1,或相对价差(ask1 - bid1) / mid,其中mid = (ask1 + bid1) / 2。错误高发点在于:用快照时间戳而非交易所撮合时间对齐、涨跌停或集合竞价阶段 ask1/bid1 缺失时未做空值处理、把"价差突然拉大"的异常样本在去极值环节误删。 - 委托量:常见口径为买一量、卖一量、前 N 档累计量或买卖量比。错误高发点在于:窗口内多快照聚合时用了"求和"而非"取末值"或"取均值"、撤单未从累计量中扣除、单位(股/手)不统一导致阈值差 100 倍。
- 订单簿斜率:常用定义是前 N 档价格对累计委托量回归的斜率,或
(P_N - P_1) / (V_N - V_1)形式的近似。错误高发点在于:档位不足 N 档时仍强行计算、买卖两侧档位数量不一致、价格与量的量纲未归一化导致斜率数值不可比。
二、计算窗口错误:滚动窗口的"左开右闭"陷阱
最典型的一类漏报来自滚动窗口边界。假设我们要计算"过去 3 秒内买一量的均值",用于识别买盘突然撤单。实现时若写成左闭右开区间 [t-3s, t),而快照恰好每 3 秒一条,那么窗口内永远只包含 1 条快照,均值退化为瞬时值,撤单造成的量能骤降被单点噪声掩盖,阈值判断自然不触发。
更隐蔽的是"窗口对齐到快照时间"与"窗口对齐到自然时间"混用。若特征按自然秒切窗(如 10:00:00–10:00:01),而快照时间戳带毫秒偏移(10:00:00.350、10:00:01.350),则每个自然秒窗口内可能落入 0 条或 2 条快照,导致特征序列出现空洞或重复计数。排查时应先打印窗口内实际快照条数分布,若出现大量 0 或 1,基本可判定为窗口对齐错误。
三、边界条件错误:空档、涨跌停与集合竞价
订单簿斜率在档位不足时最容易出错。若某时刻卖盘只有 3 档有量、买盘有 10 档,而斜率按固定 10 档计算,缺失档位若被填 0,会人为制造出"远端价格趋平"的假斜率;若直接跳过该时刻,则连续缺失会形成特征断点,下游模型把断点当缺失值填充均值,异常被平滑掉。
涨跌停与集合竞价是另一类边界。涨停时 ask1 为空、跌停时 bid1 为空,若价差计算未判空而直接相减,会得到 NaN 或异常大值;若在清洗阶段把 NaN 统一置 0,则"一字板"这种极端盘口反而被记为价差为 0 的平静状态,异常识别彻底失效。正确做法是显式标记 spread = null 并附带状态位(涨停/跌停/集合竞价),由规则层决定是否跳过或单独处理。
四、案例复盘:一次典型的"斜率正常但漏报"
某次盘口异动监控中,规则设定"卖盘前 5 档斜率超过阈值即告警",用于捕捉卖压快速堆积。上线后连续多日零告警,但人工复盘发现确有数笔卖压突增的样本。排查过程如下:
- 取一段已知异常时段的快照,手工计算前 5 档斜率,结果明显超过阈值,说明数据本身有异常。
- 打印线上特征值,发现同一时刻斜率仅为手工值的约 1/5,且数值异常平稳。
- 检查实现代码,发现斜率按"固定 10 档"计算,而该标的卖盘常态只有 5–6 档有量,缺失档位被填 0,导致
(P_10 - P_1)被拉大、(V_10 - V_1)也被拉大,两者比值被稀释。 - 修正为"按实际有效档位计算,且买卖两侧取相同档数 N = min(买档数, 卖档数, 5)",并对 N < 3 的时刻标记为不可计算而非填 0。
修正后同一时段斜率恢复到手工计算量级,规则正常触发。这个案例的关键教训是:边界条件不是"异常情况",而是盘口的常态。A 股大量中小市值标的盘口本就稀疏,把稀疏当异常去填 0,等于系统性地把真实信号压平。
五、可执行的排查清单
针对本节三类特征,建议按以下顺序逐项核对,每项都应有可观察的输出而非"看一眼代码":
| 检查项 | 观察方法 | 判定标准 |
|---|---|---|
| 窗口内样本数分布 | 统计每个滚动窗口实际快照条数 | 集中在预期值附近;大量 0/1 或双峰即异常 |
| 窗口时间对齐基准 | 对比窗口边界与快照时间戳偏移 | 偏移应稳定小于一个快照周期 |
| 空档/涨跌停处理 | 统计 ask1/bid1 为空的比例及后续特征值 | 空值应显式标记,不应被置 0 参与计算 |
| 聚合方式 | 抽查窗口内多快照的委托量聚合结果 | 与"取末值/均值"手工结果一致 |
| 档位一致性 | 统计买卖两侧有效档数差异 | 斜率计算两侧档数应相同且 ≥ 最小档数 |
| 量纲与单位 | 核对特征值与阈值的单位 | 股/手、元/分统一,阈值量级匹配 |
总结本节要点:盘口特征漏报的根因往往不在阈值,而在特征"算的是哪段盘口"。窗口开闭区间、时间对齐基准、空档与涨跌停的显式标记、档位一致性、聚合方式与量纲,这六个边界条件中任何一个出错,都足以让异常信号在进入规则层之前消失。排查时先用元指标(样本数、空值比例、档位差异)定位计算层问题,再回到特征值本身,比直接调阈值有效得多。