Skip to content
知识

/knowledge/anomaly-detection

异常检测

找出那根不属于此处的针。不寻常的那个案例往往就是重要的那个——欺诈、一次入侵、一台快坏的机器、一宗值得再看一眼的案件——而发现它,是一门自成一体的学科。

学于
异常检测实务 · 情报与廉政
时间
政府情报 · 持续进行
应用于
廉政与风险信号
阅读 / 复习
约 15 分钟阅读2026-06-25

大多数分析关乎典型的情形——平均、趋势、模式。异常检测关乎相反的一面:找出那些契合的罕见点,因为在极多的领域里,不寻常的那个案例才是要紧的那个。一笔欺诈交易、 一次安全入侵、一个即将失效的传感器、一条值得细看的记录——它们都是干草堆里的针,而那干草堆 大得惊人。

这是我在情报与廉政工作中直接倚靠的一门学科,那里整份工作往往就是从一片正常案例的海洋中, 浮现出那少数几个值得调查的。这一页是实用的全景:异常是什么、有哪些方法,以及那个悄悄决定一个 检测器是否真正有用的权衡。

01

找出不寻常之物

一个异常(或离群点)是一个偏离其余如此之远、以至于很可能来自一个不同过程的 数据点。其前提是「不同」往往意味着「有意思」——这种偏离是欺诈、错误、故障 或威胁的信号,而不只是噪声。目标不是去给异常建模(你通常做不到——它们罕见而多样);而是把正常的样子建模得足够好,好让反常的脱颖而出。

那个取景是整个领域的钥匙。你从数据的主体中学得「正常」的形状,然后把任何落在它之外很远的 标记出来。下面的一切,都是定义「之外很远」的不同方式。

02

三种异常

异常有三种风味,而其区分会改变方法:

  • 点异常——单独看就极端的一个值(一个正常账户上一笔 100 万美元的交易)。最 简单的情形。
  • 上下文异常——一个只在语境中才反常的值。30°C 在夏天是正常的,在冬天 则是异常的;数字没问题,语境有问题。时间与地点要紧。
  • 集体异常——一点合在一起是反常的,尽管单看每一个都没问题(一阵 突然爆发的小额交易、一组协同的登录模式)。

知道你在猎哪一种很要紧:一个能抓住点异常的方法,会径直从一个上下文异常旁掠过。语境与顺序 (时间序列的视角)往往需要刻意地内建 进去。

03

为什么它难

三个性质让异常检测真正地难:

  • 它们罕见——按定义如此。极端的类别不平衡意味着准确率毫无用处(一个什么都不 标记的检测器有 99.9% 的准确率、却 100% 没用),正是概率 页上同样的基率陷阱。
  • 它们通常无标签——你很少有一套干净的、已知的异常可供学习,所以大部分工作是无监督的:定义正常,标记偏离。
  • 它们会演变——欺诈者改变战术、系统漂移,所以今天的正常不是明天的正常。一个 静态的检测器会衰减。

04

统计方法

最简单的检测器是统计性的:为「正常」假设一个分布,再标记在它之下不可能的东西。对大致呈 钟形的数据,z 分数标记那些距均值超过若干标准差的点;对偏斜的数据,IQR 规则(超出四分位距 1.5 倍的点)更稳健。它们快、透明,是不错的第一遍。

05

距离与密度

一个更一般的想法:一个异常是一个坐落在远离其邻居、处于低密度区域的点。这直接连到聚类——异常就是那些不属于任何稠密群组的点。两个 常用的方法:

  • 局部离群因子(LOF)——把一个点的局部密度与其邻居的相比较。它聪明在于它是局部的:它能标记一个处于稀疏区域的点,即便从全局看它并非最极端的,从而抓住那些 坐落在簇与簇之间的离群点。
  • DBSCAN——那个把低密度点标记为噪声的密度聚类方法;那些噪声点就是你的 异常,白捡到的。

权衡在于:基于距离的方法在极高维中会吃力(又是维度 灾难——万物都远离万物),所以先降维往往有帮助。

06

基于模型的检测

最流行的现代方法学得一个「正常」的模型,并为偏离它的程度打分:

  • 孤立森林——那个聪明、被广泛使用的默认。它不去给密度建模,而是随机地切分数据, 并注意到异常容易被孤立:一个怪点只需几次随机切分就被从其余之中切出来,而正常点要 许多次。把一个点孤立出来的路径越短,它就越异常。快、可扩展,且几乎不用调参。
  • 自编码器——一个被训练来压缩并重建正常数据的神经网络。给它看一个异常,它 重建得很糟(它从未学过那个形状),于是一个高的重建误差标出那个离群点。对图像或 序列这类复杂、高维的数据很强大。
正常(许多次切分)异常2 次切分即被孤立
孤立森林的直觉。一个正常点深处于人群之中,需要许多次随机切分才能被孤立;一个异常独自坐着,只需几次就被分开。孤立所需的切分越少 ⇒ 越异常。

07

告警疲劳的权衡

这是决定一个检测器是否真正有用的权衡,它是统计页上 精确率/召回率张力最具后果的形态。大多数检测器都有一个灵敏度旋钮(「污染率」或阈值):

  • 调高 → 抓住更多真实的异常(高召回),却被假警报淹没(低精确)。
  • 调低 → 更少假警报(高精确),却漏掉真实的(低召回)。

08

无标签下的评判

评估之所以难,恰恰因为你通常缺乏标签——如果你知道那些异常,你就不需要去检测它们了。实践中 你在你所有的任何带标签子集上验证(过去已确认的案例),用精确率/召回率/F1这一族而非准确率,并倚靠领域专家来确认被标记之物的一个样本。最重要的是,你按真实的代价来 调:在大多数场景里,一个漏掉的异常与一个假警报有着很不同的价码,而阈值应当反映这一点,而非 一个默认值。

09

它在我工作中的体现

10

60 秒回顾

方法比较与告警疲劳的取景,反映了当前的异常检测参考(孤立森林 / LOF 实践、告警疲劳研究), 以及亲身的工作。