异常检测是数据操作中默默无闻的英雄——就像火灾发生前发出低语的烟雾报警器。
简单来说:人工智能会学习“正常”状态的特征,给新事件赋予一个异常评分阈值决定是否需要人工干预(或自动屏蔽) 。问题在于,当你的数据具有季节性、混乱性、波动性,并且偶尔会出错时,你如何定义“正常”。[1]
您可能还想阅读以下文章:
🔗为什么人工智能会对社会造成危害?
探讨了人工智能广泛应用所带来的伦理、经济和社会风险。
🔗 AI 系统实际用水量是多少?
解释了数据中心冷却、训练需求和对环境用水的影响。
🔗什么是 AI 数据集以及它为何重要?
定义了数据集、标注、来源及其在模型性能中的作用。
🔗人工智能如何从复杂数据中预测趋势
涵盖模式识别、机器学习模型和现实世界的预测用途。
“人工智能如何检测异常?”
好的答案不应仅仅罗列算法,还应解释算法的运行机制,以及将其应用于真实、不完美的数据时的具体表现。最佳解释如下:
-
展示基本要素:特征、基线、分数和阈值。[1]
-
对比实用族:距离族、密度族、单类族、隔离族、概率族、重构族。[1]
-
处理时间序列异常:“正常”取决于一天中的时间、一周中的哪一天、发布日期和节假日。[1]
-
将评估视为一项真正的约束:误报不仅令人恼火,还会损害信任。[4]
-
要考虑可解释性以及人机交互,因为“这很奇怪”并不是根本原因。[5]
核心机制:基线、分数、阈值🧠
大多数异常检测系统——无论多么复杂——都可归结为三个组成部分:
1) 表征(又称:模型所看到)
原始信号很少能满足需求。要么设计特征(滚动统计量、比率、滞后、季节性变化),要么学习表示(嵌入、子空间、重构)。[1]
2)评分(又名:这有多“奇怪”?)
常见的评分方法包括:
-
基于距离:距离邻居越远 = 可疑。[1]
-
基于密度的分析:局部密度低=可疑(LOF 就是典型例子)。[1]
-
单类边界:学习“正常”状态,标记超出正常范围的内容。[1]
-
概率性的:在拟合模型下可能性低 = 可疑。[1]
-
重建误差:如果一个在正常数据集上训练的模型无法重建正常数据集,那么它很可能存在偏差。[1]
3)阈值设定(又称:何时敲响警钟)
阈值可以是固定的、基于分位数的、按段划分的或成本敏感的——但它们应该根据警报预算和下游成本进行校准
一个非常实用的细节:scikit-learn 的异常值/新颖性检测器会显示原始分数,然后应用一个阈值(通常通过污染式假设来控制)将分数转换为正常值/异常值判断。[2]
快速定义,避免日后痛苦🧯
两个区别可以避免你犯一些不易察觉的错误:
-
异常值检测:您的训练数据可能已经包含异常值;该算法无论如何都会尝试对“密集正常区域”进行建模。
-
新奇性检测:假设训练数据干净;你需要判断新观测值是否符合已学习到的正常模式。[2]
此外:新颖性检测通常被视为单类分类——对正常情况进行建模,因为异常样本稀少或未定义。[1]

无需人工干预,你真的会用到的工具🧰
当标签稀缺时(这种情况几乎总是存在),以下是实际流程中会出现的工具:
-
隔离森林:在许多表格问题中,它是一种强大的默认方法,在实践中被广泛使用,并在 scikit-learn 中实现。[2]
-
单类 SVM :虽然有效,但对参数调优和假设非常敏感;scikit-learn 明确指出需要仔细进行超参数调优。[2]
-
局部异常值因子(LOF) :经典的基于密度的评分方法;当“正常”值不是一个规整的色块时,这种方法非常有效。[1]
团队每周都会重新发现一个实际的陷阱:LOF 的行为取决于你是在训练集上进行异常值检测还是在新数据上进行新颖性检测——scikit-learn 甚至要求novelty=True才能安全地对未见过的数据进行评分。[2]
即使数据不稳定,依然可靠的基准方法🪓
如果你正处于“我们只需要一些不会让我们彻底迷失方向的东西”的阶段,那么可靠的统计数据就被低估了。
修正后的 z 分数利用中位数和MAD(中位数绝对偏差)来降低对极端值的敏感性。NIST 的 EDA 手册记录了修正后的 z 分数形式,并指出一个常用的“潜在异常值”经验法则是,绝对值大于3.5 。[3]
这并不能解决所有异常问题,但通常是一道强有力的第一道防线,尤其适用于噪声较大的指标和早期阶段的监控。[3]
时间序列的现实:“正常”取决于时间 ⏱️📈
时间序列异常情况很棘手,因为关键在于上下文:中午出现峰值可能是预期之内的;凌晨 3 点出现同样的峰值则可能意味着发生了火灾。因此,许多实际系统使用时间感知特征(滞后、季节性变化、滚动窗口)和相对于预期模式的偏差来模拟正态性。[1]
如果只能记住一条规则:在将一半流量判定为“异常”之前,先对基线流量(小时/天/地区/服务级别)进行细分
评估:罕见事件陷阱🧪
异常检测常常如同“大海捞针”,这使得评估变得异常困难:
-
当阳性结果很少时,ROC 曲线看起来可能非常完美,具有欺骗性。
-
对于不平衡数据集,精确率-召回率视图通常更具参考价值,因为它侧重于正类的性能。[4]
-
从操作层面来说,你还需要设定警报预算:人类每小时实际能够处理多少警报而不至于怒而放弃?[4]
通过滚动窗口进行回测可以帮助你发现经典的失败模式:“它在上个月的发行版上运行得非常完美。”[1]
可解释性与根本原因:展示你的工作成果🪄
不加解释就发出警报,就像收到一张神秘明信片。有点用,但令人沮丧。
可解释性工具可以通过指出哪些特征对异常评分贡献最大,或者提供“需要做出哪些改变才能使其看起来正常?”之类的解释来提供帮助。《可解释机器学习》一书是一本扎实而严谨的指南,介绍了常用方法(包括 SHAP 式归因)及其局限性。[5]
目标不仅仅是让利益相关者感到安心——而是为了更快地进行分类处理,减少重复事件的发生。
部署、漂移和反馈循环🚀
模型并非存在于幻灯片中,而是存在于管道中。
一个常见的“生产第一个月”的故事:检测器主要标记部署、批处理作业和缺失数据……这仍然很有用,因为它迫使你将“数据质量事件”与“业务异常”区分开来。
实际操作中:
-
监测漂移情况,并根据行为变化进行重新训练/重新校准。[1]
-
记录分数输入和模型版本,以便重现页面跳转的原因。[5]
-
收集用户反馈(有用的警报与无用的警报),以便随时调整阈值和分段。[4]
安全角度:入侵检测系统和行为分析🛡️
安全团队通常会将异常检测理念与基于规则的检测相结合:既有“正常主机行为”的基线,也有针对已知恶意模式的特征码和策略。NIST 的 SP 800-94(最终版)仍然是入侵检测和防御系统考量的广泛引用框架;它还指出,2012 年的草案“修订版 1”从未成为最终版本,后来被废止。[3]
翻译:在需要的地方使用机器学习,但不要抛弃枯燥的规则——它们之所以枯燥是因为它们有效。
对比表格:常用方法一览📊
| 工具/方法 | 最适合 | 为什么它(在实践中)有效 |
|---|---|---|
| 稳健/修正的z分数 | 简单的指标,快速的基线 | 当您只需要“足够好”且误报较少时,第一轮检测结果就足够强了。[3] |
| 隔离森林 | 表格,混合特征 | 默认实现稳定可靠,在实践中被广泛应用。[2] |
| 单类SVM | 紧凑的“正常”区域 | 基于边界的新颖性检测;参数调优至关重要。[2] |
| 局部异常值因子 | 流形法线 | 与邻近区域的密度对比可以捕捉到局部异常现象。[1] |
| 重构误差(例如,自编码器风格) | 高维模式 | 以正常情况进行训练;较大的重建误差可以标记出偏差。[1] |
作弊秘诀:从稳健的基线模型 + 枯燥的无监督方法开始,然后只在值得的地方增加复杂性。
迷你行动指南:从零到警报🧭
-
从操作层面定义“异常” (延迟、欺诈风险、CPU 频繁使用、库存风险)。
-
首先设定一个基线(稳健统计或分段阈值)。[3]
-
首先选择一个无监督模型
-
设定预警阈值并设定预警预算,如果正面事件很少发生,则采用公关式思维进行评估。[4]
-
添加解释说明和日志记录,以便每个警报都可重现和可调试。[5]
-
回测、发布、学习、重新校准——波动是正常的。[1]
你绝对可以在一周内完成……前提是你的时间戳不是用胶带和希望勉强粘在一起的。😅
最后总结——太长了,我没看完🧾
人工智能通过学习“正常”的实际图像来检测异常情况,对偏差进行评分,并标记超过阈值的情况。最好的系统并非靠花哨的功能取胜,而是靠校准:分段基线、警报预算、可解释的输出以及将嘈杂警报转化为可靠信号的反馈回路。[1]
参考
-
Pimentel等人(2014)——新颖性检测综述(PDF,牛津大学)阅读更多
-
scikit-learn 文档 -异常值和新奇性检测 阅读更多
-
NIST/SEMATECH 电子手册 -异常值检测 (阅读更多)和 NIST CSRC - SP 800-94(最终版):入侵检测和防御系统 (IDPS) 指南 (阅读更多)
-
Saito 和 Rehmsmeier (2015) -在不平衡数据集上评估二元分类器时,精确率-召回率图比 ROC 图更具信息量(PLOS ONE)阅读更多
-
Molnar -可解释机器学习(网络书籍)阅读更多