时间和流数据的异常检测场景出现在许多应用中,如传感器数据、机械故障诊断、医疗数据、网络入侵数据、新闻文本帖子和财务帖子等。在这些问题中,时间连续性假设在识别异常值方面起着至关重要的作用。
时间连续性是指数据中的模式不会突然改变,除非有异常的过程在工作。
在时间序列数据中,时间连续性是即时的,预计将非常强。
在具有时间成分的多维数据(如文本流)中,时间连续性要弱得多,而且只从总体趋势的角度来看。
以下是两种时间连续性改变的情况:
时间序列中的突然改变的检测:
这些对应于底层数据流趋势的突然变化。在这种情况下,时间连续性是重要的,异常值被定义为不寻常的,因为它于近期或长期历史缺乏连续性。例如,时间序列值的突然变化(短期历史)或时间序列子序列的独特形状(长期历史)被识别为异常值。
在整个时间序列离线可用的情况下,可以利用事后的优势来识别异常的时间序列值或形状。 在时序分析中,垂直分析更重要,当每个单独的序列(或维度)被视为一个单元时,分析主要是在这个单元上进行的。如果有多个系列可用,则可以利用交叉关系,尽管它们通常在每个系列的分析中起次要作用。 这是因为时间序列数据是上下文的,它对序列值施加了很强的时间局部性。
多维数据中的新颖性和变化的检测:
在这种情况下,数据包含相互独立的单个多维点,与时间序列数据相比,时间连续性问题要弱得多。 例如,在从传感器数据导出的时间序列中,两个连续的数据值通常几乎相同。 另一方面,一个单独的文本文档(多维数据点)在一系列新闻文章中通常可能与它的前一篇文章有很大的不同。 为了构建一个鲁棒的离群模型,需要将数据点与文档的更大历史进行比较。
多维流数据中的异常可以对应于总趋势发生变化的时间实例或单个数据点的新情况。
时间序列中有两类异常值:上下文异常值、集体异常。
当特定时间戳的值突然相对于其时间上的相邻值发生变化时,异常值时上下文异常。
当整个时间序列或事件序列中的大子序列具有不寻常的形状时,异常值时集体异常。
对于如何定义异常值,需要对所研究的问题有深入的研究。
例如,在传感器数据的情况下,有时使用偏差检测方法进行噪声异常值过滤可能是有帮助的,而在其他情况下,医疗流中的异常形状可以诊断心脏状况,如心律失常。
离线和在线(流)之间也有一些微妙的差异。
在离线情况下,流的整个历史可以用于分析,而在在线情况下,只有到当前时间的流是可用的。
标签可用于监督时间序列或多维异常值检测中的异常检测过程。
在时间序列中,标签可以与时间实例、时间间隔相关联,也可以与整个序列相关联。
在多维数据中,标签与单个数据点相关联。在这种情况下,问题减少到罕见类检测的特殊情况。
因为监督方法总比无监督方法好,所以尽可能地使用监督方法。
尽管时间数据可以包括连续数据或离散序列,但本章将重点放在连续数据上,以保持表示的同质性。 这是因为时间连续性的概念在离散数据中的定义不同于在连续数据中的定义。 在离散数据的情况下,数据值的缺乏排序显著影响了用于异常分析的方法的性质。 应该注意的是,连续序列总是可以离散为符号数据,尽管丢失了一些信息。离散数据的异常检测将在下章介绍。
接下来的三节中,将介绍三个部分:
基于对时间瞬间预测值的偏差检测(上下文异常);
时间序列数据中子序列的异常形状的检测(集体异常);
多维流数据中异常检测的方法。
时间异常检测的最常见应用是利用基于回归的预测模型检测待定时间实例的基于偏差的异常值。
这些异常是上下文异常,因为它们根据相邻时刻数据值之间的关系,在数据的特定时刻定义异常。
这种方法可以检测底层过程中的突然变化,也可以过滤底层流中的噪声。
基于偏差的时间序列异常值与时间序列预测问题密切相关,因为异常值是根据偏离预期值(或预测值)来定义的。
在这些方法中,时间连续性起着重要的作用,因为假设时间序列数据值与连续时刻高度相关,时间趋势不会突然变化。 基于偏差的异常值通过各种回归模型在下一个时间戳使用预测值。 单个时间序列中的相关性,或跨多个序列中的相关性,可用于执行预测。 因此,使用了两种类型的相关性:
跨时间的相关性:
这是与时间连续性相同的原则,通常使用自回归建模和预测来实现。与预期预测(即预测值)的重大偏差被定义为异常值。因此,这种重大偏差的定义是违反时间连续性。
跨序列的相关性:
许多传感器应用导致的时间序列往往是密切相关的。例如,一个传感器的鸟鸣通常也会被附近的传感器记录下来。在这种情况下,可以经常使用一个序列来预测另一个序列。偏离这种预期的预测可以作为异常值。
自回归模型(AR)在单变量时间序列中特别有用。 设X1...Xt为单变量时间序列中的值。
在自回归模型中,Xt的值是根据长度p的前一个窗口中的值定义的。使用长度p的前一个窗口的模型称为AR(P)模型。
回归系数a1...ap,c的值需要从训练数据中学习,这是以前的时间序列历史。被定义为误差,表示预测值与真实值(期望值)的偏差,它对应于每个时间戳的异常值分数。这些误差需要通过线性回归建模来最小化。
将自回归模型与移动平均模型(MA模型)相结合,可以使自回归模型具有更强的鲁棒性)。 该模型预测时间序列中的后续值作为过去偏差历史的函数。 移动平均模型定义:。
换句话说,利用时间序列中过去的冲击历史来预测一个值。 上述模型也称为MA(Q)。 μ的值是时间序列的平均值。 b1.bt的值是系数,需要从数据中学习。 移动平均模型与自回归模型有很大的不同,因为它将当前值与序列的平均值和以前的偏差历史联系起来,而不是以前的值历史。
在实践中,以前的偏差历史和值对于计算期望值可能都很重要。然后,这两个模型可以与p自回归项和q移动平均项相结合,建立以下自回归移动平均(ARMA)模型:
时间序列的非平稳性:在某些情况下,时间序列可能有一些持续的趋势,因此它可能偏离平均值。
从预测的角度来看,非平稳性是一个问题,因为随着时间的推移,旧的数据变得陈旧,并且它可能不再与基于回归的建模相关。 例如,人们不能指望用基于窗口的回归模型,根据一百年前的价格来预测今天的价格。这是因为价格呈现出明显的趋势,今天基于价格的时间序列的统计可能与一百年前的情况有很大的不同。 在这种情况下,该系列可以通过在ARMA建模之前先对时间序列进行差分去趋势。 这种建模方法被称为自回归综合移动平均模型(ARIMA)。
在许多应用中,可以使用多个时间序列来以更健壮的方式执行时间序列值的预测。
其思想是,不同时刻的时间序列往往包含相同的信息,有时可能包含滞后相关性。
例如,一个传感器的鸟鸣也会在附近的传感器上听到,尽管滞后很小。这种滞后相关性可以用来做出更稳健的预测。
下面是一些具体的方法。
2.2.1 自回归模型的直接推广
多元自回归模型的基本思想是,利用过去长度p窗口预测每个时间戳处的值。与单变量回归模型的主要区别是,每个时间戳处的值(对于任何特定序列)被预测为前一个长度p窗口中所有流中d*p值的线性函数。因此,通过将窗口滑动到序列上,可以生成一个具有d·p系数的线性方程组。
2.2.2 时间序列选择方法
Muscles 方法是一个相对简单的应用最小二乘模型的多元回归。
2.2.3 PCA和隐变量模型
可以使用监督预测和预测方法进行无监督异常值检测。
异常值违反了数据依赖项的正常模型。因此,预测模型有助于建模这些依赖关系,因为它们适用于特定的数据点。违反这些依赖关系表示违反正常数据模型,因此对应于异常值。
上述方法确定了与期望值的显著偏差,并将其报告为异常值。 在许多情况下,这种偏离可能有许多原因,但不一定表明有兴趣的事件。 例如,在环境监测应用中,许多偏差可能是传感器设备故障或导致传感器值偏差的另一个虚假事件造成的。 这可能不一定反映出利益异常。 虽然异常事件往往对应于传感器流值的极端偏差,但不同类型偏差的精确因果关系可能有很大的不同。
那么如何区分噪声和真正异常值呢?可以从以往的例子中使用监督方法。
在多元场景中,真正的异常事件只能从不同时间序列流的偏差的差异行为中检测到。在这种情况下,监督可以非常有助于区分时间序列流中的真实异常和虚假异常。
关于时间序列异常检测的大部分工作是确定不寻常的变化或与底层序列非常大的偏差。然而,某些类型的偏差不仅基于数据点的单个偏差,而且还基于时间序列中相对于其他提取部分的特定部分的形状。
显然,确定与以前时间戳的大偏差不能区分地发现这种异常,因为整个序列(或子序列)需要从数据库中其他正常序列的角度来看待。换言之,必须集体看待这套时间戳,以了解它们是否应被视为异常值。
这些方法的目的是确定数据(或子序列)的窗口,其中给定的序列与多个序列的数据库的行为不同。前面讨论的异常值是由单个位置定义的,这种异常值对应于多个连续的时间戳;在这些时间戳中特定模式的异常值一起出现,代表异常值。因此,前面的情况对应于上下文异常,而这节说的是集体异常。
集体异常可能存在两种可能性:
1、整个序列异常:
在这种情况下,整个序列的形状被视为异常值。
2、子序列异常:
如果时间序列是在长时间内收集的,那么我们可能有一个单一的时间序列,它显示了较短时间内的典型趋势。因此,偏离这些典型趋势时,在时间序列的小窗口上检测到异常形状。
这两种类型的问题之间的区别在一定程度上是人为的,因为子序列异常检测的大多数方法也可以用于全序列异常检测。 这是因为子序列异常检测的第一步是从时间序列中提取窗口,然后将提取的子序列作为整个序列处理,以进行异常检测。 随后,各种基于距离、概率或线性的方法可以应用于提取的窗口。
子序列异常和全序列异常之间存在细微的差异。在处理子序列异常时,必须始终考虑相邻窗口之间的重叠。对于全序列异常,较长的序列长度是一个问题。
在所有情况下,假设该序列已归一化为零均值和单位标准差,因为比较不同均值和振幅的序列是没有意义的。
有两种类型的转换用于比较时间序列的各个段:
1、数值多维转换:
数值多维转换,即将序列(或序列的每个子序列)转换为多维向量。每个维度的表示对应于标准向量空间中的数值系数。
近似可以用欧式距离在这种表示上进行计算。
2、离散序列转换:
使用离散化方法将序列转换为符号表示。离散数据的异常检测将在第十章介绍。
3.1.1 数值多维转换
最简单的可能变换时将时间序列中长度为n的每个窗口视为长度n的多维向量。
3.1.2 离散序列转换
这种转换通常是在数据的窗口上执行的,它导致底层时间序列的压缩和近似表示。 这种方法既可用于离散序列的独立异常检测,也可用于通过快速近似表示和剪枝来提高上述最近邻检测器的效率。
需要注意的是,符号离散化确实丢失了一些关于底层时间序列的信息。
3.1.3 利用时间序列的轨迹表示
从多元序列中寻找不寻常形状的情况要具有挑战性得多。 在这里,不同的行为属性,如温度、压力或相同的行为属性,如温度,可以在同一时刻由不同的传感器测量。 因此,在这种情况下,寻找不寻常形状的问题需要非常仔细地定义。 从随后的讨论中可以明显看出,这个问题直接映射到轨迹离群点检测。
在多元时间数据中,不同的行为属性通常是同时使用多个传感器来测量的。在这种情况下,可以利用现有的轨迹离群点检测工作来检测离群点形状。
上图表示多变量时间序列可以映射到轨迹数据。
书上提到了一个Hotsax方法,其使用欧氏距离来定义基于距离的异常值。此外,其还使用离散近似来执行剪枝。利用欧式k最近邻来确定每个子序列的异常值分数。且为了便于剪枝,假设只报告top-r异常值的分数。
在长度为p的窗口上进行异常分析,从时间序列中提取这些子序列,并确定最近的欧氏距离。
书上还讨论了在欧氏距离函数上下文中使用的剪枝方法。
书上还说明了SAX表示(SAX Representation),其是为了为异常值提供一个良好的候选排序,以及迭代计算候选最近邻距离的排序。对候选点的良好排序确保了早期发现强异常值。
书上还提到了单个长的序列和多个短序列的问题,在比较的时候,需要依据具体情况选择一个长序列还是多个短序列进行比较。
概率模型使用生成过程模型来模拟一组时间序列的生成。例如,可以从给定的时间序列中提取一组子序列,然后对从该混合组件的一个组件中生成的这些时间序列进行建模。聚类时间序列最常见的生成模型是隐马尔可夫模型HMM。
可以使用第三章中的线性模型来发现底层时间序列中的不寻常的形状。也分为单变量和多变量情况。
3.4.1 单变量序列
可以从长度n的时间序列中反复提取长度p的重叠窗口来创建(n-p+1)个对象。每个长度为p的窗口可以被视为一个p维数据点。
3.4.2 多变量序列
该方法也可应用于多元时间序列。 主要的区别在于特征工程;换句话说,多维表示是不同的。 而不是从一个单变量时间序列中提取p维点,我们现在从d个不同时间序列的集合中提取p·d维点。 对于d不同的时间序列,在最近的长度p窗口中有d·p不同的值。人们可以将这些值看作一个单一的(d·p)维数据点,并在数据流上滑动一个窗口来生成(n−p+1)这样的点。
3.4.3 组成任意相似函数
3.4.4 使用线性模型的核方法
还可以应用一类支持向量机等方法,只要可以定义适当的核函数来度量对象之间的相似性。
核方法通常与线性模型相结合,因为变换空间中的线性模型对应于原始空间中的复杂边界。如一类支持向量机和核PCA方法。
在许多医学应用中,特征病理特性可能被潜在时间序列的不寻常形状所捕获。 在这种情况下,训练数据往往是关于正常或病理行为,或两者兼而有之。 因此,这种方法需要以监督的方式检测时间序列中不寻常的形状。 标签可以与整个时间序列、时间序列的部分(子序列)相关联。 在这种情况下最简单的方法是为正常类和异常类开发子序列配置文件。 对于给定的测试子序列,可以使用k近邻方法进行分类。
特征提取和转换形式是所有监督方法的核心,用于时间序列分类。
如果时间序列以判别特征(discriminative features)的形式表示,则对其进行分类就变得容易得多。 一种可能是将序列转换为离散表示,然后使用第10章的隐马尔可夫模型(HMM)进行分类。 由于在离散数据的背景下开发基于模式的分类模型自然容易,因此有更多的模型可用于序列分类。 第二种可能性是从数据中挖掘形状,这些数据是用于分类目的的高度鉴别特征。
前面两节讨论的情况是从时间序列中根据偏离期望值或不寻常形状确定异常值。即使有多个相关的时间序列,每个时间序列也被处理为一个分析单元。在传统的时间序列分析中,由于时间连续性的强假设,自相关autocorrelation(autocorrelation)在预测和异常值计算过程中非常重要。
在多维数据的情况下,每个记录都包含d维,它们构成一个不可分割的单元。此外,在时间序列的情况下,在单个序列中观察到非常高的时间连续性。多维数据流的情况不一定如此,在这些数据流中,时间连续性要弱得多。
例如,在多维文本记录流中,无法从其紧接的记录中可靠地预测文本记录中一个属性的单个的频率。另一方面,文档中存在的单词可以在聚合级别上与记录流的历史进行比较,以预测异常值。
多维流场景更接近传统的多维异常分析方法。唯一的区别是在分析中添加了一个时间分量,尽管这个时间分量比时间序列数据要弱得多。在多维数据流中,需要快速发现异常值,因此效率很重要。
多维数据流中可能出现两种类型的异常值:
1、第一种是基于异常检测的个别记录。这种异常值也称为新奇点,因为他代表了一个以前从没有看到的点。
2、第二种是基于多维数据的总趋势的变化。这本质上代表了基于特定时间窗口的更高级别和聚集的异常值。第二类变化点几乎总是第一种的个别异常值开始。但第一种类型的个别异常值可能并不总是发展成一个聚集变化点。
将单个数据点检测为离群点的问题与无监督的新颖性检测问题密切相关,特别是当使用数据流的整个历史时。
4.1.1 基于邻近的算法
一种基于距离的异常值检测方法。
原基于距离的离群点定义修改如下:
一个数据点的异常值分数是根据其在长度为W的时间窗口中与该数据点的k近邻距离来定义的。
【LOF算法也扩展到增量场景。 此外,该方法还可以处理数据点的插入和删除。 】
由于基于距离的方法众所周知在计算上是昂贵的,所以在数据流的上下文中,上述许多方法仍然相当昂贵。 因此,采用基于聚类的方法可以大大提高孤立点检测过程的复杂性。
当大量数据点可用时,基于聚类的方法特别有效。 在数据流的上下文中,通常有足够数量的数据点可用,以便将集群保持在非常高的粒度级别。
4.1.2 基于概率的算法
在数据量大的情况下,概率算法工作比较有效。
有一种方法:从混合属性数据集创建混合模型。 其思想是在将数据点添加到模型之前和之后计算传入数据点与模型的拟合。 这是通过使用期望最大化算法来实现的。 期望最大化算法自然适合于流的情况,因为它们对优化过程的迭代方法。 随着新的数据点的到来,使用这些点调整参数相对容易。
4.1.3 高维场景
流场景和高维数据的结合特别具有挑战性,因为高维投影聚类算法的复杂性。 显然,计算效率是高维算法背景下的主要关注点。
许多高维投影流聚类算法也可以用来确定数据流中的异常。
有一种方法叫做SPOT,用于检测高维数据流中的异常值。与聚类方法不同,该方法旨在直接查找数据的稀疏子空间。
集成方法在高维数据中也比较有用。例如,可变子采样方法和旋转袋方法分别针对大数据集中和高维数据集中的效率而设计。对于流数据,可以创建多个可变大小的子样本,并于旋转袋相结合,实时提供数据点的异常值分数。
4.2.1 速度密度估计方法
速度密度估计的思想是构造一个基于密度的速度剖面数据。这类似于静态数据集中的核密度估计的概念。
4.2.2 总体分布中统计显著变化
描述多维数据流中聚合变化的另一种方法是估计这些时间窗口中的总体分布。 这些时间窗口的重大变化可以报告为数据流的异常变化。
监督场景在时间领域中是一个非常丰富的场景,因为类的不同类型的时间和基于频率的方面可以对应于异常值。 这些可能对应于新的类异常值、稀有类异常值或不经常重复出现的类异常值。
因此,可能需要使用概念漂移分析concept drift analysis、异常检测outlier detection和稀有类检测rare-class detection的方法组合来确定流场景中有趣的异常值。这种情况经常出现在入侵检测等应用中,其中一些已知的入侵可能被标记,但新的入侵也可能随着时间的推移而出现。因此,异常检测算法使用监督和非监督方法的组合来检测异常值是至关重要的。
多维数据流场景中不同类型的异常值:
1、稀有类异常值rare-class outliers:这种异常值的识别类似于静态监督场景中的异常值。在这种情况下,一小部分记录可能属于一个稀有的类,但从时间角度来看,它们不一定以非同质的方式分布。虽然一些概念漂移可能也需要考虑,但可以使用罕见的流分类算法变化。
2、新颖类异常值novel-class outliers:这些类在数据流中没有遇到。因为,它们可能根本不反映在训练模式中。最终,随着时间的推移,这些类可能成为数据的正常部分。
3、不频繁出现的类的异常值infrequently recuring class outliers:这些类在一段短时间内没有遇到,但可能会在流中重新出现。这样的类不同于第一类,因为这种类是在时间上罕见的突发中出现的。
4.3.1 检测稀有类
许多分类器可以用于流场景中。为了检测稀有(或者叫做罕见)类,对这些分类器的唯一更改是添加旨在处理类不平衡的方法。这种变化与在静态上下文中处理类不平衡的变换没有很大不同。
4.3.2 检测新颖类
检测新颖类也是半监督的一种形式,因为其他许多类都有模型,但检测到的类没有。
传统的新颖类检测工作大多只集中在寻找与当前模型不同的新类。 然而,这种方法并不区分随着时间的推移可能遇到的不同的新类。 理解新颖类检测问题的一个更一般的方法是将其视为监督(分类)和非监督(聚类)模型的组合。
当接收到新的测试实例时,首先将分类模型应用于它,以测试它是否属于当前存在的(标记)类。 如果情况并非如此,则测试它是否自然属于新颖类之一。 测试实例与表示新类的集群的统计边界的关系用于此目的。 如果这两个条件都不成立,则假定新的数据点应该在自己的新类中。 因此,这种方法结合了监督和无监督的方法,以灵活的方式进行新颖类检测。
4.3.2 检测不频繁出现的类
在实际应用中,许多异常值通常以不频繁的时间突发出现。许多分类器无法区分新颖类和稀有类,特别是当旧模型在数据流中老化时。因此,一个解决方案是简单地将重复出现的异常值报告为新的异常值。
然而,这不是一个非常理想的解决方案,因为新类检测是一个半监督问题,而重复类的检测是一个完全监督的问题。 因此,通过记住循环类随时间的分布,可以提高分类精度。
本章研究了时间序列数据和多维数据流中的异常检测问题。在这两种情况下,异常值的性质是不同的。时间序列数据许哟啊以每个序列为单位进行分析,而多维数据则需要以每个多维数据点为单位进行分析。不同类型的异常值也可以在时间序列数据中定义,这取决于是否需要识别序列中的偏离点,或者是否需要识别不寻常的形状子序列。
对于多维数据,单个数据点可以被归类为新奇点,或者数据中的聚合变化点可以被定义为异常值。
在一些标签可用的情况下,监督和无监督方法可以结合起来进行有效地对新颖类和稀有类检测。