异常检测关注的是“哪些样本不像正常情况”。它广泛用于交易风控、设备故障、网络安全、业务监控、日志分析和质量检测。异常检测的难点在于:异常少、类型多、变化快,而且很多异常没有明确标签。
因此,异常检测不是简单二分类。它经常介于规则、统计、无监督学习和人工审核之间。
一、异常有哪些类型
常见异常包括:
| 类型 | 示例 |
|---|---|
| 点异常 | 某笔交易金额异常大 |
| 上下文异常 | 凌晨突然出现高频登录 |
| 群体异常 | 一批账户行为高度相似 |
| 时序异常 | 指标突然跳变或持续偏离 |
| 结构异常 | 日志调用链出现罕见路径 |
不同异常需要不同特征和检测方式。单点金额异常可以用统计规则,复杂欺诈团伙则需要图分析和行为序列。
二、先建立统计基线
很多异常检测项目一开始不需要复杂模型。简单规则和统计方法往往更可解释,也更容易运营。
常见方法:
- 均值和标准差:超过若干倍标准差报警。
- 分位数阈值:超过历史 99 分位判为异常。
- 环比同比:相对前一小时、前一天、上周同一时间变化过大。
- 滑动窗口:基于最近一段时间动态更新阈值。
统计规则适合指标监控、业务看板和初版风控。缺点是规则多了以后维护成本高,且难以捕捉复杂组合模式。
三、Isolation Forest
Isolation Forest 的核心思想是:异常点更容易被随机切分隔离出来。它不需要标签,适合结构化特征上的异常检测。
优点:
- 训练和预测效率较高。
- 适合中高维表格数据。
- 对异常样本比例较低的场景友好。
注意事项:
- 特征缩放和异常值处理仍然重要。
- 输出分数需要结合业务阈值。
- 需要定期抽样人工复核结果。
四、One-Class SVM 与局部离群
One-Class SVM 试图学习正常样本的边界,把边界外样本视为异常。它适合样本量不太大、边界较清晰的场景。
LOF 等局部离群方法则关注局部密度差异。如果一个点周围样本稀疏,而邻近区域密度较高,它可能是异常点。
这类方法对参数和距离度量比较敏感,在高维数据上要谨慎使用。
五、自编码器用于复杂数据
自编码器通过压缩再重构输入来学习正常模式。如果某个样本重构误差很大,说明它不符合模型学到的正常分布。
适合场景:
- 图像质量检测。
- 传感器多变量异常。
- 日志或行为序列异常。
- 高维稀疏数据。
但深度模型的解释成本更高,生产中需要配合可视化、样本回放和人工审核。
六、时序异常检测
时序异常不能只看单点数值。很多异常只有放在时间上下文里才成立。例如白天 1000 次请求正常,凌晨 1000 次请求可能异常。
常见思路:
- 对时间序列做趋势和季节性分解。
- 预测下一时刻,再看预测误差。
- 监控滚动均值、方差、分位数变化。
- 对多指标联合建模,发现组合异常。
时序异常检测要处理节假日、活动、发布、故障演练等业务事件,否则会产生大量误报。
七、阈值和运营闭环
异常检测最终通常输出一个风险分数。阈值选择要考虑:
- 人工审核容量。
- 误报成本。
- 漏报成本。
- 业务高峰和低谷。
- 不同用户或业务分组的差异。
一个好系统要把告警后的处理结果反馈回来:确认异常、误报、忽略、升级、封禁或修复。这些反馈可以继续优化规则和模型。
八、实践建议
异常检测不要一开始就追求“全自动”。更稳的路线是:规则基线 -> 无监督模型辅助发现 -> 人工审核闭环 -> 半监督或监督模型迭代。
真正有价值的异常检测系统,既要发现问题,也要让业务人员知道为什么异常、该如何处理、处理后如何复盘。