4. 案例1
集合竞价阶段的盘口异常检测,最容易出现“看起来像操纵、实际是规则使然”的误报。本案例的典型现象是:某只股票在9:15—9:25之间出现大额买单挂出后迅速撤单,检测系统判定为“虚假挂单/诱导性申报”并触发告警,但人工复核发现该行为完全符合交易所竞价规则,属于正常撤单。排障的核心不是调低灵敏度了事,而是把规则约束、数据完整性、阈值口径三条线索逐一排除,定位误报真正来源。
一、先厘清竞价撤单规则,避免把合规行为当异常
以沪深交易所开盘集合竞价为例,9:15—9:20 接受申报也接受撤单,9:20—9:25 接受申报但不接受撤单,9:25 集中撮合产生开盘价。这意味着:在9:15—9:20窗口内,大单挂出后撤掉是规则明确允许的行为,撤单本身不构成异常;真正需要关注的是“撤单是否伴随价格引导、是否在不可撤单窗口出现撤单记录、撤单量占比是否异常”等组合特征。若检测规则只以“大额挂单+短时撤单”为单一条件,就会在9:15—9:20产生大量误报。
排障第一步应核对告警时间戳落在哪个窗口。若撤单时间在9:20之前,且系统规则未对窗口做区分,则基本可判定为规则口径缺失导致的误报。反之,若在9:20—9:25出现撤单记录,则要怀疑数据源时间戳错位或快照拼接错误,因为该窗口理论上不应有撤单成交回报。
二、快照缺失是竞价阶段误报的高发诱因
竞价阶段行情快照频率低、字段稀疏,很多数据源在9:15—9:25只推送逐笔委托或少量切片,十档盘口可能为空或沿用上一交易日收盘快照。检测引擎若直接读取“买一价/买一量”计算挂单强度,遇到空值或陈旧值时会得到失真的挂单量,进而误判为大额虚假挂单。常见表现是:同一笔委托在逐笔数据中存在,但快照序列里缺失对应档位,引擎用前值填充后计算出“挂单量突增又骤降”,触发撤单异常。
排查时应做一次数据对齐核验:取告警时刻前后各若干条逐笔委托与快照记录,比对委托编号、价格、数量、方向是否一致,确认快照是否存在跳变、空档或时间戳回退。若发现快照缺失,应在检测链路中增加“快照有效性校验”,对空档位、陈旧时间戳、价格越界做前置过滤,而不是让缺失值进入阈值计算。
三、阈值误设的典型形态与修正方法
阈值误设通常有三种形态。其一是撤单量占比阈值过低,例如把“撤单量/挂单量 > 30%”作为异常条件,而竞价阶段大资金试盘撤单占比本就容易超过该值;其二是存续时长阈值未区分窗口,用统一的“挂单不足60秒即撤”判定异常,忽略了9:15—9:20本就是试盘窗口;其三是基准量取错,用前一日收盘快照或全天均量作为分母,导致竞价阶段的正常挂单被放大成异常。
修正时应按窗口分别设定参数,并以同一标的近若干交易日的竞价逐笔分布作为标定样本。例如可将9:15—9:20的撤单占比阈值放宽至较高分位(如取近20日该窗口撤单占比的95分位),9:20—9:25则重点检测“不可撤单窗口出现撤单记录”这一硬性矛盾,而非占比。存续时长阈值同样按窗口分设,避免一刀切。
四、可执行的排障步骤与回归验证
建议按以下顺序推进,先排除数据问题再动规则参数,避免在脏数据上反复调参:
- 锁定告警样本:导出告警时刻的标的、委托编号、挂单价格数量、撤单时间、快照序列,形成最小复现集。
- 核对规则窗口:确认撤单时间落在9:15—9:20还是9:20—9:25,前者合规、后者需查数据时间戳。
- 校验快照完整性:逐笔与快照按委托编号对齐,检查空档位、时间戳回退、价格越界,标记缺失区间。
- 复算阈值指标:用清洗后的数据重算撤单占比、存续时长、挂单强度,与告警时的计算值对比,定位偏差来源。
- 修正并回归:补窗口条件、加数据有效性过滤、按窗口重设阈值,重放当日数据确认误报消除,同时用历史真实异常样本验证召回未下降。
完成修正后,应把该样本固化为回归用例,记录规则版本、窗口参数与数据过滤条件,后续每次调整检测参数时重跑,确保同类误报不再复发,同时不牺牲对真实诱导性申报的识别能力。