今天系统第一次接到实战考验。结果让我后背一凉。
上午8:45,我收到一个请求:某个行业分组最近反弹了,能不能跑一下异常检测看看数据质量?
我敲下命令:
python3 2560_darkblade.py --anti-dump --group [分组]
然后去泡茶等结果。3分17秒后,终端输出了一串让我静默了10秒的内容:
━━━ 异常检测报告 ━━━
分组: [行业分组X] | 样本数: 8
─────────────────────
⚠️ [样本A] 评分: 0 🚨
⚠️ [样本B] 评分: 10 🚨
⚠️ [样本C] 评分: 5 🚨
⚠️ [样本D] 评分: 0 🚨
⚠️ [样本E] 评分: 15 🚨
⚠️ [样本F] 评分: 0 🚨
✅ [样本G] 评分: 85
✅ [样本H] 评分: 72
─────────────────────
异常率: 75.0% | 分组评级: 🔴 系统性衰减
8个样本,6个拉响红色警报。阈值是60分,这6个里最低的0分,最高的也才15分。
系统判断异常的依据,拆开来看其实很简单:
从最近10天的数据里,找到所有「单日变化率 > 3% 且大额净流入 > 1亿」的日期。就像看咖啡渣——突然一堆大颗粒沉底,肯定有什么动静。
结果:8个样本中,6个有数据拉升日。拉升日的超大额流入非常整齐——集中在同一天,规模接近。这不像独立行为,更像是有同步计划。
放量只是第一步,真正的杀招在续集。
检测器会追踪拉升日之后每一天的流入/流出。如果拉升过后,出现连续的净流出——就触发「背离」标记。
最极端的一个样本,拉升日净流入+5.2,后续5个交易日累计流出-8.7。拉升的资金量还没跑完一半,后续流出的就已经超过了。典型的「拉高出量」模式。
当一个A股分组出现异常时,系统自动去查港股对标——如果港股也同时流出,就升级为「系统性衰减」。
今天验证了3个港股对标样本:
样本X-HK: 同时段净流出累计-2.3亿 → 跨市场验证通过 ✅
样本Y-HK: 同时段净流出累计-1.8亿 → 跨市场验证通过 ✅
样本Z-HK: 无明显同步异常 → 部分验证
这套检测的瓶颈不在算法,在数据清洗。原始数据有大量的「尾盘假单」——最后几分钟故意挂大单但不成交,用来制造假象。
我写了一个去噪过滤器:
def filter_noise(trades):
"""过滤尾盘假单和集合竞价噪音"""
# 1. 排除14:57之后的成交(集合竞价)
clean = [t for t in trades if t.time < '14:57']
# 2. 单笔大于均量5倍但对手盘无反应的,标记可疑
clean = [t for t in clean if not is_suspicious(t, clean)]
# 3. 连续3笔相同方向相同大小的,可能是机器拆单
clean = [t for t in clean if not is_robot_splits(t, clean)]
return clean
没有这层过滤,异常检测的误报率会高一倍以上。
实战启发的三个优化:
$ python3 2560_darkblade.py --anti-dump --group 7
🔄 正在加载分组数据... 完成 (8 samples)
🔄 第一层:放量检测... 发现6个拉升事件
🔄 第二层:背离检测... 6/6 确认背离 → 拦截率100%
🔄 第三层:跨市场验证... 2/3 验证通过
📊 评分输出: 均值 10.3 / 满分 100
⚠️ 建议: 暂不关注此分组
8个样本6个预警,66%异常率。分组升级触发红色警报。
系统说明:本文记录数据异常检测模型的搭建与验证过程,不构成任何决策参考。
💬 留言