Advertisement

python 时间序列异常值_干货 :时间序列异常检测

阅读量:

原标题:干货 :时间序列异常检测

时序数据分析中的异常检测是一项高度成熟的技术手段。其定义是通过从正常的时间序列数据中识别出不正常的事件或行为来实现对系统的监控与管理。该技术在各个领域中得到了广泛应用,在量化交易、网络安全监控、自动驾驶系统以及大型工业设备的日常维护等方面发挥着重要作用。例如,在轨运行的航天器系统中,由于其成本高昂且技术复杂性极高,在未及时发现潜在风险的情况下发生故障可能导致严重后果甚至无法挽回的损失。因此,在任何情况下及时发现并处理可能出现的异常情况都能帮助相关领域的从业者最大限度地降低风险。

通常情况下常见异常可通过人工手段进行识别;但随着业务组合的复杂化和时序规模的扩大程度提高,仅依赖传统的人工及简单的同比环比等绝对值算法已无法满足实际需求;因此,在应对多样的工业级应用场景时,深入理解时间序列异常检测方法至关重要

01

异常类型概述

通常说的异常大致分为异常值、波动值、异常时间序列等几种情况:

异常值(Outlier)

假设输入的时间序列为X=\{x_t\}, 其中异常观测点即为那些观测值x_t与该时间序列的期望值E(x_t)不同的时间戳

4d5cba17097a2367afdea935636a37ab.png

波动点(Change Point)

给定输入时间序列

关键点是该状态在时间序列中与前后时刻值差异明显的特征。

9a106ee61514204ba8e8dae5b40a3b9f.png

断层异常(Breakout)

时序系统中某一时间段的值相较于前一个时间段急剧上升或急剧下降很多后,随后形态也发生了变化

f37545dcd7cfab40d8f9c1ec18b46ef1.png

异常时间序列(Anomalous Time Series)

给定一组时间序列

, 异常时间序列是在X上与大多数时间序列值不一致的部分。

02

异常检测方法

基于统计的异常检测

很多用于识别异常的技术都始于构建一个数据模式。被识别为与生成的数据模式明显不符的对象被视为异常。例如, 数据分布模式可通过估计概率密度函数的关键参数来建立;当某个样本难以良好地由该模式解释时(即其很可能不符合相应的概率分布),则将其归类为异常。当所构建的数据模式由多个不同的群组组成时,在这种情况下被视为群组边缘或孤立点的对象被称为异常。(在回归分析中使用的这类方法)通常将离群点定义为与预测结果明显偏离的数据点

将异常对象与正常对象视为两个独立的类别后,则可以通过分类方法构建相应的类别模型。然而,在某些情况下只有当存在类别标签以便我们能够构建训练数据集时才可应用这种技术手段。但需考虑的是,在实际应用中由于异常样本的比例通常较低这会带来一定的挑战影响最终的分类效果因而需综合考虑多种因素进行权衡

以模型为基础的方法也被视为统计手段,在数据分析中通常会构建单个模型或多组模型来评估该点出现的概率

3σ-法则

位于距离均值3个标准差范围内的区域的概率覆盖了约99.74%。因此,在数据分布超出该范围时,则可判定为异常数据

fd8e5145ce5d466a2d8b1ce2209549ad.png

假定该数据集遵循一个正态分布生成过程,在这种情况下该分布通常表示为 N(μ,σ),其中 μ 表示序列均值而 σ 则代表序列的标准差。根据统计特性有仅约 0.27% 的数据点会落在 μ±3σ 范围之外而在 μ±4σ 范围以外的数据点则仅有约 0.01% 的概率。基于对业务特性的理解以及时序曲线的变化规律分析在确定 K 值时需综合考虑其与异常程度的关系。

箱型图(分位数异常检测)

箱型图是一种表示一组数据分散情况的统计图表它主要用于展示原始数据分布的主要特征也可以用来比较多组数据分布的主要特征绘制该图表的方法是首先确定一组数据的最大最小中位数值以及上下的四分位数值然后根据这些关键指标将异常观测值与潜在异常观测值加以区分

50e9c5ba227076cacb10a629d0547e3f.png
657f5f125f60880d8bf947042d64e7ea.png

IQR即为第三四分位数值与第一四分位数值之差。超出Q3加1.5倍IQR范围及低于Q1减去1.5倍IQR范围的数据点被视为异常值。

Grubbs测试

Grubbs检验是一种用于从数据集中识别异常值(outliers)的方法。通常而言,在统计学中将异常值定义为偏离整体数据集均值显著远的数据点;这些观测值可能代表真实现象的一部分或也可能源于测量误差或实验异常情况。采用Grubbs检验的前提条件是假设总体服从正态分布

算法流程:

1. 样本从小到大排序

2. 求样本的mean和std.dev

3. 计算min/max与mean的差距,更大的那个为可疑值

计算可疑值的标准得分(z-score),如果其超过Grubbs临界值,则判定为异常值。

通过查表可以获得Grubbs临界值这一指标的具体数值。该指标的计算结果取决于检出水平α(越严格则数值越小)以及样本数量n,并且需要先剔除异常值后,在剩余序列上依次执行1至4步操作以完成计算流程。由于本例仅需进行异常判定任务,因此只需检查tail_avg是否为异常值即可。

基于预测的异常检测

就某一条时间序列数据而言,在模型预测生成的时间序列曲线与实际观测到的数据之间进行对比分析,在每个时间点上计算出相应的残差值,并建立这些残差值的时间序列模型。通过应用Kσigma阈值或者基于分位数的统计方法能够有效识别异常点。具体的步骤如下:首先计算每个时间点上的残差值;其次建立残差序列模型;最后通过应用Kσigma阈值或者基于分位数的统计方法能够有效识别异常点。

cd2968b054a69893603b8dff66610e7b.png

举例而言,在分析网络流量时

68c758d70dba53e2781bb46b40409644.png

通过对比不同曲线间的差异来观察平滑效果,在同一图表中绘制了两条曲线如图所示,在同一坐标系下绘制了两条曲线然后将这两条曲线绘制在同一坐标系下计算对应点之间的残差序列从而能够有效地识别出异常数据点

ac48f2b751ea51a7abf5c57977a99989.png

基于距离的方法/基于邻近度的方法

通常可以设定对象之间的邻近性度量,并利用许多异常检测方法进行评估;这些异常的对象即是指偏离大多数其他对象的存在;在一些领域的方法依赖于距离指标来进行分析;被称为基于距离的离群点检测技术的一种;对于能够在二维或三维散点图中展示的数据;可以通过识别在视觉上与其他大部分点分离的数据点来实现对离群数据类型的识别;然而该技术由于计算复杂度过高而面临挑战;在数据分布不均匀的情况下容易出现误判的问题

关于时间序列间的距离计算方式,可以参考之前的专门文章:《TS技术课堂 | 时间序列聚类》

方法:

基于角度的离群点检测:角度越小,说明距离越远。

k-近邻算法中将评分定义为数据对象与其最接近的k个数据点之间的距离总和。显然,在两种情况下:当两个情况中的某一种发生时(即当两组中的某一组的距离总和较小),则判定该数据对象的异常度较低(即判定其为正常点);而当另一组的情况发生时(即当两组中的另一组的距离总和较大),则判定该数据对象的异常度较高(即判定其为异常点)。为此设定一个距离阈值的标准下,则判定其评分高于该阈值时的数据对象将被归类为异常点

局部离群因子(LOF):LOF得分值基于数据对象的k个最近邻居计算得到的平均局部密度与该数据对象自身的局部密度进行比较得到的比例。

Connectivity Outlier Factor(COF):当且仅当点p的平均链接距离超过其k近邻群体内的平均链接距离时,则称该点p为孤立点。COF通过识别领域结构上更为稀疏的区域来定位离群值。

SOS是一种用于识别异常数据的方法,在时间序列数据分析中表现出色。它通过构建时序点之间的特征矩阵或相异度矩阵来评估数据点的相似性程度。该方法基于其方差特性进行设计:当一个数据点的近邻数目较多时(即与其他数据点的距离较小),其方差会相对较小;反之,在具有较大相异性的区域(远离其他数据点),该数据点的方差会显著增大。

基于密度的方法

空间密度分布具有相对简便的方式进行计算,在这种情况下尤其是当相邻关系可通过距离或其他度量指标来衡量时,则会更容易识别出那些在低密区中出现的对象通常与周围邻居的距离较大,在这种情况下这些对象往往会被视为异常现象。为了应对数据集可能存在多个不同空间尺度的问题,在分析过程中只有当某一点相对于其周围多数点的空间密集程度显著低于平均值时才会将其分类为离群点

1. 基于密度的异常

异常数据对象指的是位于稀疏区域的数据集合。每个数据对象与其所在区域密度之间的关系决定了其异常程度。以下是基于密度定义的具体计算表达式:

其中

指的是x的k个最近的邻居的集合,

表示该集合的大小,y是x最近的邻居。

2. 给定半径的邻域内的数据对象数

一个数据对象的密度等于半径为d的邻域内的数据对象数。

选择一个合适的d值至关重要。当d设置过小时,在数据集中会有大量原本属于正常数据的对象被错误识别为异常点;相反地, 如果d设置过大, 则那些本应被视为异常的数据对象反而会被错误地归类为正常数据。实际上, 在密度分布不均匀的情况下, 上述方法所识别出来的异常点可能会出现偏差。为此, 在后续的研究中我们将采用平均相对密度这一指标作为衡量标准

3. 平均相对密度

c4a27dfd52d859a8b9c237628634ff23.png

基于聚类的方法

通过聚类分析识别离群数据的方法是去除远离主要数据集群的小群体。该方法可广泛应用于各类聚类技术,并需设定最低簇大小以及小簇与其他集群之间距离的关键参数。通常情况下, 我们可以简化此过程, 即去除所有小于设定最小尺寸的群体。这种方案对划分的群体数量极为敏感, 此外, 应用此方案难以将具体的异常分数直接分配到每个对象上需要注意的是, 将一组对象视作离群数据, 将离群数据的概念从单个对象扩展到群体层面并不会带来实质性的改变

一种科学的方法是首先将所有对象进行分组,并随后评估每个对象对簇的归属程度。对于基于原型的目标函数,在这种情况下我们可以使用各对象与其所属簇中心之间的距离作为衡量标准。在某些情况下如果我们移除一个特别的对象而显著改善了目标函数的效果,则我们就可以将该对象归类为离群点例如,在K均值算法中如果我们移除那些远离其所属簇中心的数据点则会明显降低SSE即误差平方和从而形成更好的数据生成模型而非异常数据模型

基于划分的方法

采用基于划分的方法来应用于异常检测领域,在实践中通常表现出良好的可解释性特征,并且操作简便易行。最基本的划分方法即为阈值检测技术,在这种技术下, 系统根据预先设定的经验确定临界点, 并以此为基础对数据进行异常识别。

具体而言,则需防止由单一振动源导致的异常报警现象。为了实现这一目标,在异常检测机制中引入了求取累积的窗口均值这一过程。其中具体的操作步骤是基于窗口计算累加均值,并判断是否超过设定阈值以完成异常判断。

a32c46d378f6b1c7b636dbce90ab31bc.png

学生群体可以根据其所能接受的范围进行阈值分档设置,在此过程中,不同设定的数值将影响相应的操作流程。

基于划分的高级异常检测方案是一种集成学习驱动的高效异常检测机制。其中样本点在时间序列中通过构建多棵决策树进行划分子区域,在这种情况下样本点在树中的平均深度较低时被认为是离群点。

2f455f064ce6630a215f4cbd12d2a797.png

图 | b和c的高度为3,a的高度是2,d的高度是1

基于线性的方法

通过执行主成分分析后的矩阵分解操作所获得的一组主成分能够反映出原始数据集沿着不同维度的变化幅度。其中每个主成分所对应的特征值反映了该主成分所代表的方向上的数据波动程度。具有最大特征值的那个主成分将指向数据分布中具有最大离散性的方向;而最小的那个主成分则指向具有最小离散性的方向。不同主成分上原始数据的表现差异能够反映出整个数据集的关键特性;如果某个单独的数据样本与其他大部分样本在这几个主要的方向上表现出显著差异,则这个样本很有可能被判定为异常点

基于非线性的方法

传统的降维技术主要依赖于线性方法 例如主成分分析法 PCA 它们旨在识别出能够最大程度地保留数据变异性的方向 这些方向通常被用来表示数据中最重要的信息部分 因此我们能够在保持主要信息的前提下将高维空间映射到较低维的空间中去 然而 PCA 的线性特性导致其在处理不同类型的特征时存在局限性 近年来随着深度学习的发展 许多基于神经网络的方法被成功应用于时间序列异常检测 比如 Autoencoder 它们通过引入神经网络天生的非线性特性来克服这一局限

065215c57075c4a65b72582594b7e437.png

针对非数值型的方法

之前介绍的大多数异常检测算法主要用于处理数值型数据。那么如何有效处理category类数据呢?基于attribute-value方法是一种非常有效的解决方案。

AVF算法的缩写为Attribute Value Frequency(AVF),其主要用于处理非数值型数据;该方法特别适用于分析离散类别数据,并通过统计属性值的频率分布来识别模式和关系;具体来说,在该算法中我们首先对每个属性进行值域划分;随后计算每个属性值在不同类别中的出现频率;最后根据频率分布结果提取具有显著性的特征组合与关联规则;

将所有的数据点都标为非异常点;

计算所有每一个属性值的频数;

计算每个样本点x的AVF分数。具体而言,在对样本点x而言,其各个属性值出现次数之和再除以总属性数即可得到其AVF分数。需要注意的是,在此计算过程中,默认所有涉及的属性均为categorical类型。

AVFscore值越小,样本越异常。

03

开源异常检测系统

为同学们介绍一些常用的异常检测算法包,分别提供Java版本和R版本作为参考资料使用

https://github.com/yahoo/egads

https://github.com/markvanderloo/extremevalues

https://github.com/yzhao062/pyod

https://github.com/twitter/AnomalyDetection

https://github.com/rob-med/awesome-TS-anomaly-detection

04

总结

从观察来看,这些方法之间具有相似性。归根结底是由于概率密度函数及其聚类是根据数据点间的距离来计算得出,而这些概念同样能够在特征空间中应用。主要目的是记录基于时间序列的异常检测方法,但这些技术在处理非时序数据时也有一定的适用性

看完本文有收获?请转发分享给更多人

推荐关注「数据分析与开发」,提升数据技能返回搜狐,查看更多

责任编辑:

全部评论 (0)

还没有任何评论哟~