异常检测方法概述

文章目录

  • 前言
  • 异常类型
    • 离群值
    • 2.尖峰与电平转化
    • 3.模式变化
    • 4.季节性
  • 总结


前言

用户在构建模型之前需要决定的第一件事是将问题表述为监督学习问题还是无监督问题。监督学习方法基于时间序列和训练集中的正常/异常标签训练模型,而无监督方法仅基于时间序列和领域知识构建模型,不需要标记数据。

现实世界的异常检测问题通常缺乏标记的历史异常,这可能会阻止用户构建稳健的监督模型。在这种情况下,无监督/基于规则的方法是更好的选择。


异常类型

异常是一个广义的概念,它可以指代时间序列中许多不同类型的事件。根据具体情况,价值飙升、波动性转变、违反季节性模式等都可能是异常的或正常的。用户应该知道要检测哪种类型的异常,因此可以相应地构建模型。

离群值

异常值是其值与其他值显着不同的数据点。时间序列时间中的异常点超出了该序列的正常范围,没有考虑数据点之间的时间关系。换句话说,即使将所有数据点都视为与时间无关的,异常点仍然很突出。
异常检测方法概述_第1张图片
为了检测异常值,时间序列值的正常范围是检测器需要学习的。它可以用给定的绝对阈值 来定义。或者,也可以创建一个检测器以从历史数据中学习正常范围。

异常值是最基本的异常类型。针对其他类型的异常检测方法通常将时间序列转换为应用异常值检测的新时间序列。

2.尖峰与电平转化

在某些情况下,一个时间点是否正常取决于它的值是否与其最近的时间一致。如果变化是暂时的,则值的突然增加或减少称为尖峰,如果变化是永久性的,则称为电平偏移。请注意,虽然尖峰看起来与异常值相似,但它是时间相关的,而异常值是时间无关的。如果在不考虑时间顺序的情况下检查所有数据点,则峰值的值可能是正常的(见下图)。
异常检测方法概述_第2张图片

长钉

异常检测方法概述_第3张图片

电平转化

我们可以并排滑动两个时间窗口,并继续跟踪它们的平均值或中值之间的差异。这种随时间的差异是一个新的时间序列,由异常值检测器检查。每当左右窗口中的统计数据显着不同时,就表明在这个时间点附近发生了突变。时间窗口的长度控制要检测的变化的时间尺度:对于尖峰,左侧窗口比右侧窗口长,以捕获近期的代表性信息;另一方面,对于电平转换,两个窗口都应该足够长以捕捉稳定状态。

3.模式变化

例如,如果对波动率的变化感兴趣,则在时间窗口中跟踪的统计数据可以是标准差而不是平均值/中位数。

对于检测模式的时间变化,可以滑动一个时间窗口并返回一个在窗口内测量的统计数据,该统计数据量化了一个时间模式。例如,如果用户想要检测对系统的临时异常高访问次数,则在滑动窗口中跟踪访问次数是一种有效的方法。
异常检测方法概述_第4张图片

临时高频率请求的时间序列

4.季节性

当时间序列受季节性因素(例如一天中的小时、一周中的一天、一年中的月份)影响时,就会出现季节性模式。检测器adtk.detector.SeasonalAD使用transformeradtk.transformer.ClassicSeasonalDecomposition从原始时间序列中去除季节性模式,并通过检查剩余序列来突出时间序列不正常遵循季节性模式的时间段。
异常检测方法概述_第5张图片

使用以一周为周期的ClassicSeasonalDecomposition从 NYC 流量的时间序列中删除季节性模式(数据来自Numenta Anomaly Benchmark)

用户需要注意区分季节性系列和循环系列。季节性系列总是有一个固定的,通常是可解释和已知的,因为它的季节性性质。由于其物理性质,循环时间序列不遵循固定的周期模式,即使它看起来重复类似的子序列。例如,旋转设备中运动部件的轨迹是一个 3-D 循环时间序列,其周期长度取决于旋转速度,不一定是固定的。对其应用季节性分解将是有问题的,因为每个周期的持续时间可能略有不同,并且分解残差会误导异常检测。

总结

异常检测算法有很多,在做异常检测前如何明确异常类型是关键

你可能感兴趣的:(时间序列,异常检测,时间序列)