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

1.异常类型

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

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

(1)离群值

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

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

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

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

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

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

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

使用DoubleRollingAggregate转换具有水平移位的时间序列,将均值作为时间窗口统计量:
在这里插入图片描述

(3)模式变化

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

使用以标准差为指标的DoubleRollingAggregate转换具有波动率水平变化的时间序列:
在这里插入图片描述

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

(4)季节性

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

使用以一周为周期的ClassicSeasonalDecomposition从 NYC 流量的时间序列中删除季节性模式(来自Numenta Anomaly Benchmark的数据):【链接
在这里插入图片描述
用户需要注意区分季节性系列和循环系列。季节性系列总是有一个固定的,通常是可解释和已知的,因为它的季节性性质。由于其物理性质,循环时间序列不遵循固定的周期模式,即使它看起来重复类似的子序列。例如,旋转设备中运动部件的轨迹是一个 3-D 循环时间序列,其周期长度取决于旋转速度,不一定是固定的。对其应用季节性分解将是有问题的,因为每个周期的持续时间可能略有不同,并且分解残差会误导异常检测。

将ClassicSeasonalDecomposition应用于循环序列无法检测到异常行为:
在这里插入图片描述
ADTK 不提供从循环(但不是季节性)时间序列中删除循环模式的转换器。但是,adtk.detector.AutoregressionAD可以捕捉自回归关系的变化(数据点与其近期点之间的关系),并且在某些情况下可用于循环(但不是季节性)序列。

Python中,时间序列突变是指序列中出现的突然的、显著的变化。根据引用中的代码示例,可以看出构建的测试序列是一个时间序列,并且其中包含了一些突变。具体来说,该序列的数据通过乘法、加法和随机噪声生成,并且在每个季节中有不同的因子(1.05、1.1、0.95、0.9)引起的突变。 因此,我们可以使用Python中的时间序列分析(如pandas、numpy)和可视化(如matplotlib)来检测和分析时间序列中的突变。在这个例子中,可以使用pandas的DataFrame来处理时间序列数据,并使用matplotlib来绘制时间序列图。 要检测时间序列中的突变,可以通过比较数据的前后差异来识别突变点。这可以使用差分操作来实现。差分操作可以计算出相邻数据点之间的差异,并将其用作检测突变的指标。 以下是一个示例代码,演示如何使用Python进行时间序列突变检测: ```python import pandas as pd import matplotlib.pyplot as plt # 构建测试序列 series = pd.Series((pow(np.arange(1, 40, 1), 2) * (-0.1)) + (np.arange(1, 40, 1) * 10) + 10 + np.random.normal(0, 0.01, 40) * np.tile([1.05, 1.1, 0.95, 0.9], 10), index=pd.date_range(start='2012-03-31', freq='Q-DEC', periods=40)) # 计算差分 diff = series.diff() # 绘制时间序列和差分图 fig, axs = plt.subplots(2) series.plot(ax=axs<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [使用Pythonvaluequant处理时间序列结构变化的建模方法3](https://blog.csdn.net/Dr_Kevin_Ye/article/details/122578433)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Python 时间序列异常检测 ADTK](https://blog.csdn.net/BF02jgtRS00XKtCx/article/details/115343456)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tony Einstein

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值