一个特征,两套代码,单位不一样。历史模型和线上校验器都在算 large_share——大额成交占扫单量的比例。但两边的定义早就分叉了。

打开网易新闻 查看精彩图片

线上代码拿"每秒净主动成交量的75分位"当单笔成交的门槛。在受影响的标的上,这个阈值比正确值大了163到423倍。几乎没有单笔成交能越过它,于是97%以上的线上事件里,large_share 都接近零。

问题出在单位混用。以 AAVEUSDT 为例,单笔成交量的75分位是4.3个单位,而每秒净主动成交量的75分位是1730个单位。两者都是"量",但不可互换。代码里把后者算出的阈值,套到了前者身上。

正确的校准只能来自单笔成交量。修复后的线上路径加了一道硬约束:缺少匹配的校准产物时,直接拒绝对该标的打分。

不止一个特征对不上

特征一致性审计在训练与线上之间又找出三处差异。large_share 这个缺陷是主要的误报来源。10月14日的第一轮分析排查里,只修它一个,入选候选就从40个降到5个;四处全部修正后,剩下2个。

这些是10月原始成交档案找回之前的诊断计数,第一轮里有两个特征值是近似处理的。

随后找回了10月6日至14日的币安期货 aggTrades。原始重建保留记录的候选时间戳,并配上对应的冻结产物:10月6日至13日用 V1 线上版(13786个候选),10月14日用 V2 完整基线(895个)。

14682个候选里,重建了14681个的四类受影响特征。有一个 LDOUSDT 的检测秒不在档案中。冻结产物复现记录分数的平均绝对差为 1.04×10⁻⁶。

修复后的特征选出52个候选。它们的原始五秒币安 markout 平均为 +8.67 bps;按10 bps 的往返手续费假设,变成 −1.33 bps。没有策略被提升上线。

原始档案补上了四特征重建的缺口。五秒 markout 是研究口径。候选生成和记录的 nav_abs / nav_overshoot 约定保持不变,所以这不是一项执行研究。

先对齐,再谈漂移监控

KS 检验能说明两个特征分布不同,但它没法告诉你,是不是一个实现用了单笔成交、另一个用了一秒聚合。

在监控特征漂移之前,先让两套实现跑同一批记录的原始输入:

  • 对每个记录的 sweep,分别跑批量特征和流式特征
  • 逐项断言 large_share、run_frac、pre_vel、trailing_nav 两边相等
  • 把阈值的单位、标的、来源周期和输入哈希,记录在校准产物旁边

先查特征一致性,再解释模型分数。