0
点赞
收藏
分享

微信扫一扫

时间序列 工具库学习(18)adtk模块-异常类型


1.异常类型

异常是一个广义的概念,它可以指代时间序列中许多不同类型的事件。根据具体情况,价值飙升、波动性转变、违反季节性模式等都可能是异常的或正常的。ADTK 提供了一组通用组件,可以针对不同场景组合成各种类型的异常检测模型。但是,ADTK 不会自动为用户选择或构建模型。用户应该知道要检测哪种类型的异常,因此可以相应地构建模型。

​​https://adtk.readthedocs.io/en/stable/index.html​​

(1)离群值

离群值是其值与其他值显着不同的数据点。时间序列时间中的异常点超出了该序列的正常范围,没有考虑数据点之间的时间关系。换句话说,即使将所有数据点都视为与时间无关的,异常点仍然很突出。

时间序列 工具库学习(18)adtk模块-异常类型_adtk模块


为了检测异常值,时间序列值的正常范围是检测器需要学习的。它可以用用户给定的绝对阈值 ( ​​adtk.detector.ThresholdAD​​​) 来定义。或者,用户可以创建一个检测器以从历史数据( ​​adtk.detector.QuantileAD、adtk.detector.InterQuartileRangeAD 和adtk.detector.GeneralizedESDTestA​​D )中学习正常范围 。

异常值【离群值】是最基本的异常类型。针对其他类型的异常检测方法通常将时间序列转换为应用异常值检测的新时间序列。ADTK 中的大多数高级检测器都遵循此策略。

(2)尖峰和水平偏移(Spike and Level Shift)

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

时间序列 工具库学习(18)adtk模块-异常类型_异常检测_02


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

​adtk.detector.PersistAD​​​和​​adtk.detector.LevelShiftAD​​​分别是尖峰和电平偏移的检测器。两者都是使用转换器实现的,转换器​​adtk.transformer.DoubleRollingAggregate​​将时间序列转换为具有上述两个时间窗口的新序列。

​​使用DoubleRollingAggregate转换具有水平移位的时间序列,将均值作为时间窗口统计量:​​

时间序列 工具库学习(18)adtk模块-异常类型_异常类型_03

(3)模式变化

上面提到的策略可以推广到检测除价值之外的模式的变化。例如,如果对波动率的变化感兴趣,则在时间窗口中跟踪的统计数据可以是标准差而不是平均值/中位数。​​adtk.transformer.DoubleRollingAggregate​​支持 16 种常见统计数据,可用于量化感兴趣的模式。

​​使用以标准差为指标的DoubleRollingAggregate转换具有波动率水平变化的时间序列:​​

时间序列 工具库学习(18)adtk模块-异常类型_adtk模块_04

对于检测模式的时间变化,​​adtk.transformer.RollingAggregate​​也可能是一个不错的选择。它滑动一个时间窗口并返回一个在窗口内测量的统计数据,该统计数据量化了一个时间模式。例如,如果用户想要检测对系统的临时异常高访问次数,则在滑动窗口中跟踪访问次数是一种有效的方法。

时间序列 工具库学习(18)adtk模块-异常类型_adtk模块_05

(4)季节性

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

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

时间序列 工具库学习(18)adtk模块-异常类型_异常类型_06


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

时间序列 工具库学习(18)adtk模块-异常类型_时间序列_07


ADTK 不提供从循环(但不是季节性)时间序列中删除循环模式的转换器。但是,​​adtk.detector.AutoregressionAD​​可以捕捉自回归关系的变化(数据点与其近期点之间的关系),并且在某些情况下可用于循环(但不是季节性)序列。


举报

相关推荐

0 条评论