Charu C. Aggarwal
Outlier Analysis Second Edition
第一章 异常分析简介
什么是异常值:
Hawkins定义:某个观测值远远偏离其他观测值以至于我们怀疑它是不是由另一种机理产生。
异常诊断算法可能有两种输出:
- 异常得分:量化异常程度的打分。
- 二分类标签:常在实际决策中使用,直接判定某个数据点是否是异常值。
异常得分也可以通过阈值设定来得到二分类标签结果。
这是一种主观判断,因为并没有确定多大程度的偏离叫充分偏离。实际应用中,数据包含噪声,还需要排除噪声干扰。这里outlier指异常或者噪声,而anomaly则指我们感兴趣的异常。为了区分噪声和异常,一些异常诊断算法量化偏离程度,就像基于距离的最近邻,拟合数据分布。噪声和异常的区分并不纯粹,各种算法的结果并不一致,我们主要是通过异常得分来进行区分(异常的异常得分更高),但这并不是区分因素,更准确地说,是分析者调节噪声与异常之间的区别。
1.2异常分析模型的重要性
1.3基本的异常分析模型
1.4异常分析模型集成
1.5分析的基本数据类型
1.6异常分析中的监督模型
1.7异常诊断模型的评估方法
1.8小结
1.2数据模型是一切
所有的异常诊断模型都是创建一个数据的正常模式,然后计算给定的数据点针对这个模式的偏离程度。例如,生成模型中高斯混合模型、基于回归的模型以及基于空间临近程度的模型都对数据的正常行为作出假设,然后通过评估数据点和模型的接近程度计算数据点的异常得分(evaluating the quality of the fit between the data point and the model)。
很多数据模型是由算法确定,例如,基于最近邻的异常诊断算法根据k-近邻距离的分布来建立数据点异常趋势的模型。因此,模型假设是异常点位于距离大部分数据较远的位置。
显然,数据模型很重要,不正确的数据模型可能导致错误的结论。例如,对于数据不适合模型生成假设,或者没有足够的数据点来学习模型参数, 高斯混合模型这类生成模型可能效果不好。类似地,如果潜在数据被随意聚合,基于线性回归的模型也可能效果不佳。在这些情况下,由于对数据模式拟合效果较差,一些数据点可能被误判为异常点。不幸的是,异常诊断大部分是无监督问题,异常实例可能不够学习最好的模型。在这方面,异常诊断难度比分类监督学习难度大得多。因此,实际应用中,由分析者基于对偏离的业务了解选择模型。例如,测量不同位置温度的实验中,认为偏离空间温度分布的测量结果是异常点的假设是合理的。但另一种情况下,高维数据具有稀疏性,如果定义数据位置来判断异常有失公允。因此,只有在仔细评估业务相关模型性质之后才能建立有效的数据模型。
为了理解数据模型的影响,我们以Z-值检验进行异常分析为例。我们有一组μ为均值,σ为标准差的一维观测值X1,…Xn。Z-值计算公式为Zi=∣Xi−μ∣/σZ_i=|X_i-\mu|/\sigmaZi=∣Xi−μ∣/σ
Z-值计算数据点距离均值的标准偏差倍数,可以用来量化这个点的异常得分。一个潜在的假设就是数据服从于正态分布,因此z-值是来自0均单位标准差的标准正态分布的随机数。我们经常采用Zi≥3Z_i≥3Zi≥3作为异常阈值。然而,在某些情况下,可获取的样本量较少,均值和标准差不能准确估计,在这种情况下,Z-值结果需要用t-分布而不是正态分布来解读。后续将详细介绍。
初学者经常忘记Z-值检验的数据正态分布假设,当这个近似程度较差时,结果很难理解。例如,1.3图中左图数据服从于N~(10,2),数据主要集中在[10-23,10+23]范围内,偏离该范围的数据可认为是异常值。因此,Z-值检验在这种情况下效果很好;右图数据异常值不明显,均值和标准差依次为5.24,5.56.但是Z-值检验不能说任何数据点是异常值。在任何情况下,Z-值的显著性没有任何意义,至少从概率理解(In any case,the significance of Z-value from Zipf-distribution is not very meaningful at least from the perspective of probabilistic interpretability.)这说明如果在模型阶段出错,可能导致数据理解不正确。
另外,如果数据只是从它的相对位置来判断,而不是它的extreme position,也可能犯错。仅从Z-值检测来看,A点数据位于中心而被认为是正常值,但如果是基于k-邻近距离模型,却能有效区分。因此,模型的有效性取决于检验选择以及如何应用。
选择最好的模型通常是依数据而定。这要求对数据有较好的理解。例如,基于回归的模型对于图1.4的异常值来说更合适,对于图1.1中的问题,聚类模型效果更佳。因此,异常诊断的核心在于发现给定数据的正常模式。而正常模式取决于分析者对于业务数据模式的理解。
关于模型的选择有一些需要取舍;过于复杂的模型可能过拟合,找不出异常,过于简单的模型对数据的适应性较差,可能找出一大堆异常点。
1.2.1 与监督模型的联系
可以将异常值检测问题视为分类问题的变体, 在该问题中, 未观察到类标签 (“正常” 或 “异常”)。因此, 由于正常的例子远远超过了异常的例子, 人们可以 "假装"整个数据集正常, 并创建一个 正常数据(可能是嘈杂的)模型。偏离正常模型的成都被视为异常得分。分类和异常值检测之间的这种联系是非常重要的, 因为许多理论和方法从分类概括应用到异常值检测。无法观察标签 (或异常值得分) 是异常值检测方法被称为无监督检测方法而将分类方法称为监督的原因。在观察到异常标签的情况下, 该问题简化为不平衡数据分类问题, 第7章对此进行了详细讨论。
无监督异常值检测的正常数据模型可以看作是分类结果为一类的分类问题。但是, 单分类从建模的角度来看, 有时要微妙得多, 因为区分两个类的例子要比预测特定实例匹配单个 (正常) 类容易。当至少有两个类可用时,更容易了解这两个类之间的显著特征从而提高模型的准确性。
在形形色色的预测学习中, 如分类和推荐, 基于实例的学习方法和显式泛化方法之间存在天然的差异。由于异常值检测方法需要设计一个正常数据的模型才能进行预测, 这种二分法也适用于无监督域。在基于实例的方法中, 没有预先构建训练模型。相反, 对于给定的测试实例, 可以计算训练数据中最相关 (即最接近) 的实例, 并使用这些相关实例对测试实例进行预测。在分类 方法领域, 基于实例的方法也被称为懒惰学习者, 在推荐系统领域, 基于记忆的方法也被称为懒惰学习者。
一个基于实例的异常检测方法的是使用数据点的 1-近邻距离作为其异常值得分。请注意, 此方法不需要预先构造训练模型, 因为确定最近邻的所有工作都是在指定要预测 (评分) 的实例的标识后完成的。1-近邻异常值检测器可以被认为是监督学习中1近邻分类器的无监督模拟。由于其简单性、有效性和直观性,基于实例的模型在异常分析领域非常流行。事实上, 最流行和成功的异常值检测方法中, 如 KNN和局部异常因子 (LOF) (参见第4章), 都是基于实例的方法。
基于实例的方法如此有效以至于其他监督学习的单类分类方法被忽视。原则上,几乎任意分类方法可以设计为单类分类。大部分方法是显式泛华方法,即需要提前创建汇总模型。
对于数据集D,显式泛化方法分为两步:
1、首先使用原始数据集D创建一个单分类模型。比如图1.4b,我们需要先学习一个描述正常数据的线性超平面,这个超平面代表全体数据的汇总模型,因此代表数据集的显式泛化。
2、对D中每个点偏离正常数据的程度进行打分。例如,如果我们学习完图1.4b的线性超平面,然后我们可能报告距离超平面的欧氏距离为异常得分。
显式泛化方法的一个问题是相同的数据集D被同时用于训练和测试。这是因为很难排除某个测试点。另外对于无监督学习方法并没有标签可以用于区分数据,因此我们选择用全体数据集进行训练和测试,可能会导致过拟合。不过,单个点对过拟合的影响很小,因为显式泛化方法趋向于创建一个大部分数据的汇总模型。由于使用相同的数据集,我们可以把异常得分看做基于所有数据点属于正常类的训练误差。通常, 减少过度拟合的有效方法是以随机的方式将数据反复划分为训练和测试集, 并计算各种模型中测试点的平均异常得分来判断模型效果。 这些方法将在后面的章节中讨论。
几乎所有的分类模型都可以通过使用适当的单分类类比推广到异常点检测。此类模型包括线性回归模型、主成分分析、EM模型、聚类方法、单类支持向量机、矩阵分解模型和单类神经网络。我们列举了不同的分类模型及单类类比的异常诊断方法,见表1.1.监督学习与非监督学习的练习很深,在第七章我们指出了异常值检测和回归建模之间的另一个有用的联系。这种特殊的连接的优点是, 无需过多额外操作,它能够使用数百个现成的回归模型进行无监督的异常值检测。
1.3 基本异常诊断模型
数据类型、数据大小、相关异常值示例的可用性模型的可解释性影响我们队异常诊断模型的选取。可解释性尤其重要,因为需要我们根据业务应用场景判断某个数据点为什么是异常结果。数据变换常用于提高异常点与正常点的差异,但降低模型的可解释性。我们需要权衡数据变换与模型效果。
1.3.1 异常诊断的特征选取
分类问题可以以标签为指导选取特征,但是无监督学习方法怎么办?采用Kurtosis measure测量一系列数据点x1,…xn的不一致性。
- 第一步是计算均值μ、标准偏差是σ,然后标准化数据为0均单位标准差的形式:zi=xi−μ/σz_i=x_i-\mu/\sigmazi=xi−μ/σ
- 计算标准化结果的四阶均值:
K(z1...zN)=(∑i=1Nzi4)/NK(z1...z_N)=(\sum_{i=1}^\N z_i^4)/NK(z1...zN)=(∑i=1Nzi4)/N
不一致的特征分布具有高Kurtosis值,例如,当数据包含极值时,Kurtosis measure会增大。Kurtosis meansure通常被用于子空间异常值检测,数据会被映射到低维以检测异常值。
Kurtosis meansure的一个问题是, 它在单独分析特征时, 不能很好地利用各种属性之间的相互作用。 也可以在低维距离分布上使用Kurtosis meansure。例如, 在数据投影到较低维空间S后, 可以在所有数据点与数据质心的 N阶马氏距离集合上的进行Kurtosis meansure。这样的计算提供了该子空间 S 的多维 Kurtosis, 同时考虑到 S 的各个维度之间的相互作用。可以迭代地将特征添加到特征候选子集 S中,以Kurtosis meansure结果为指标,构造具有最高多维 Kurtosis的可辨识维度子集。
特征选取的另一种方法是利用异常检测和监督学习的联系。基本思路是去掉与其他特征不相关的特征。所有特征都标准化为单位方差, 并计算第K个特征与其他特征的的RMSEkRMSE_kRMSEk。如果RMSEkRMSE_kRMSEk大于 1, 则预测误差大于特征方差, 因此应修剪第K个特征。 也可以使用这种方法来计算特征的权重。具体来说, 第K个特征的权重由MAX{0, 1-RMSEkRMSE_kRMSEk} 给出。
1.3.2 极值分析
数据过大或过小都可能是异常值。极值分析的关键在于确定基础分布的统计尾部。之前提过(图1.3),尾部与数据分布密切相关。正态分布最容易分析,因为大部分统计检验可以用显著性的概率进行解释。然而,即使对于任意分布, 这些检验提供了一个很好的数据点的异常得分, 即使他们不能被解释统计。
极值统计不同于传统的异常点定义。举个例子:{1,2,2,50,98,98,99}中,1和99是极值,50是均值,不可能定义为极值,但是50偏离其他数值,大部分基于概率和密度的模型会把它诊断为强异常点。这种矛盾很常见。另外极值分析还能应用到多变量数据中。
极值建模作为最后一步在大多数异常值检测算法中发挥着重要作用。这是因为大多数异常值建模算法以数字评分的形式量化数据点与正常模式的偏差。极值分析通常是需要作为这些建模偏差的最后一步, 因为他们(“数字评分结果”)现在是单变量值, 其中极值对应于异常值。在许多多标准异常值检测算法, 可以获得异常值分数的向量。所以说极值分析以某种形式参与到异常诊断过程中来。
1.3.3 概率和统计模型
在概率模型和统计模型中, 选择某种数据分布对数据进行建模, 并学习该模型的参数。例如, 高斯混合模型假定数据中每个点属于 k 个高斯聚类之一,然后采用EM算法优化估计参数,使得生成过程概率最大,该方法输出数据点归属于不同群集的概率以及基于密度的建模分布拟合。这能通过较低的拟合值结果诊断异常值。实际应用中, 我们对这些拟合值取对数,作为异常得分, 因为对数化的拟合结果中异常值更倾向为极值,然后通过极值检验确定异常值。
概率模型的一个主要优点是, 只要每个混合组分都适用于该生成模型, 它们就可以很容易地应用于几乎任何数据类型 (或混合数据类型)。例如, 如果数据是类别型的, 则可以使用离散的伯努利分布来对数据的每个成分进行建模。对于不同类型属性的混合数据, 可以使用属性特定生成组件的乘积??由于这些模型计算概率, 数据规范化问题已经被生成假设所考虑。因此, 概率模型提供了一个基于 EM框架, 可以很容易地应用于任何特定的数据类型。
概率模型的一个缺点是, 它们试图将数据适合特定类型的分布, 这有时可能不合适。此外, 模型参数的增加可能导致过拟合,从而导致异常值fit to正常数据模型。由于异常诊断过程需要提供对异常数据生成过程的诊断理解,而许多参数模型解释性较差, 其参数不能直观地呈现给分析师,可能导致这一目的的失败。
1.3.4线性模型
这些方法使用线性相关性对数据沿低维子空间建模。例如, 图1.4中的数据沿二维空间中的一维线对齐。通常情况下, 最小二乘适合用于确定最佳的低维超平面。数据点与此超平面的距离用于量化异常得分,然后采用极值分析来确定异常值。例如,图1.4中数据点 {(xi, yi), i∈{1…N} 的线性模型形如yi=a∗xi+b+ϵiy_i=a*x_i+b+\epsilon_iyi=a∗xi+b+ϵi.
其中ϵ\epsilonϵ代表残值,也就是模型误差。系数需要最小化平方和误差来习得,这是一个凸非线性规划问题, 其解可得。平方残差提供异常值得分,使用极值分析来识别异常大的偏差, 即为异常值。
降维的概念和PCA很像,除了它使用非参方法建立数据相关性模型。PCA可以从多变量回归分析得出。换句话说, 它提供了一个较低维的子空间, 投影后的重建误差最小。因为异常值不符合聚合子空间的数据模式,因此具有较大的重建误差。因此, 重建误差可用作异常得分。另外PCA可用于噪声修正,数据点的属性被修正以降低噪声,然后异常数据点比正常点更可能被修正。像降维这样的方法是矩阵分解通用方法的特例,通用方法的主要优点是它可以用于不完整的数据集。
**降维和回归建模对于原始属性来说尤其难以解释。**这是因为子空间被定义为具有各个属性的线性组合。这不能以数据的特定属性进行直观地解释。然而, 某些形式的维度约简, 如非负矩阵分解, 是可解释的。第3章讨论了异常检测的降维、回归分析和矩阵分解方法。它们的自然非线性扩展, 如
kernel PCA、kernel 支持向量机和神经网络。第8章和第12章讨论了各种形式的非负矩阵分解。
1.3.4.1谱模型
许多矩阵分解方法 (如 PCA) 也用于图形和网络的上下文中。主要区别在于矩阵是如何创建分解的。
这些方法的一些变型用于图形和网络等特定类型的数据时也被称为谱模型。谱方法通常用于聚类图数据集, 并且通常用于识别图的时间序列中的异常变化。谱方法与矩阵分解密切相关。后续将在3,4,5,12章讨论。
1.3.5 基于邻近的模型
基于邻近的方法的思想是根据相似性或距离函数判定异常值为远离剩余数据的点。基于邻近的方法可以应用于三种方法之一, 即聚类方法、基于密度和最近邻方法。在聚类分析和其他基于密度的方法中, 找出数据中的密集区域,然后异常值被定义为远离这些密集区域中的点。或者, 也可以将异常值定义为远离密集区域的点。聚类方法和基于密度的方法的主要区别在于聚类方法对数据点进行分割, 而基于密度的方法 (如直方图) 对数据空间进行分割。这是因为后一种情况下的目标是估计数据空间中测试点的密度, 最好通过空间分割来实现。
在近邻方法中, 每个数据点与其第K最近邻的距离定义为异常得分。选择 k(k>1), 可以将远离剩余数据集的点标识为异常值并作为异常得分。例如, 图1.5中,有一个包含4000个数据点的大型群集, 以及一小群隔离但紧密相关的异常。这种情况相当常见, 因为由相同 (罕见) 进程引起的异常可能会导致几乎相同的数据点集。在这种情况下, 异常集中的点彼此接近, 不能根据1近邻距离进行区分。通过使用某些类型的基于密度的算法, 这些异常往往很难与噪声区分开来, 而这些算法对数据的全局行为并不敏感。
另一方面, k 近邻的方法有时是有效的。在图1.5 的情况下, 可以使用 k≥3来识别此类相关异常集。最近邻分数提供了数据集的异常得分。此方法通常计算资源消耗大, 因为它需要确定数据集中每个点的最近邻, 对于包含 N 点的数据集需要的O(N2)O(N^2)O(N2) 操作。但是, 在接受二进制标签而不是异常得分的情况下, 可以修剪其中的许多距离计算, **因为在少量距离计算后, 某些点可以确定为非异常值。**例如, 如果在计算了到特定点 “A” 的点的一小部分的距离后, “A” 的 k 最近的邻域距离低于迄今为止发现的所有排名靠前的异常值的距离, 则 “A” 点肯定是非异常值,不需要继续进行"A" 的距离计算。**因此, 异常值检测的二进制版本通常比异常得分的版本更快。**后者总是与计算复杂度中的点数呈二次关系。在实际设置中, 二次计算复杂度被证明是惊人的缓慢;如果不利用某种形式的采样, 即使是包含几十万点的数据集, 也往往很难使用这些方法。
在聚类方法的情况下, 第一步是使用聚类算法来确定数据集的密集区域(clusters)。在第二步中,使用数据点与不同集群的拟合的度量值作为数据点的异常得分。例如, 在 k-means聚类算法中, 数据点与其最近质心的距离可用于测量其异常得分。由于特定的数据分区 (以及相应的异常值) 可能会随着聚类方法的选择而有很大差异, 因此, 通常建议对数据进行多次聚类, 并以不同运行的平均分数进行判断。
**基于密度的方法 (如直方图) 将数据空间划分为小区域, 并使用这些区域中的点数来计算异常得分。**基于密度的方法可解释性高, 数据中的稀疏区域可以显示为原始属性的组合。例如, 考虑在以下属性子集上构造的一个稀疏区域:Age≤20,Salary≥100000.显然,显然, 这些约束定义了高度可解释的数据空间段。它清楚地描述了为什么数据点应被视为异常值。其他一些方法, 如核密度估计并不划分数据空间, 但通过用更平滑的核函数取代空间分割,侧重于估计数据空间中的区域密度。将在第4章讨论基于邻近的异常点检测方法。
1.4 异常分析模型集成
在许多数据挖掘问题 (如聚类和分类) 中, 为了提高基础解决方案的鲁棒性, 使用了各种元算法。这种结合了多个元算法输出结果的方法叫做集成。例如, 分类中常见的集成方法包括bagging, subsampling, boosting and stacking。同样, 集成方法通常用于提高聚类的质量。此类元算法也存在于异常值检测中。近年来, 异常群领域取得了显著的理论和算法进步。本章将对异常分析模型集成领域进行广泛的概述, 第六章进行详细讨论。主要有两种类型的集成方法:
- 在sequential ensembles中, 按顺序应用给定或一组算法, 因此这些算法受到前一个算法的影响, 无论是修改用于分析的基础数据的, 还是选定特定算法。最终的结果要么是异常分析算法的加权组合, 要么是最后一次异常分析算法的最终结果。例如, 在分类问题中,boosting是sequential ensembles的示例。
- 在independent ensembles中, 不同的算法或同一算法的不同实例被应用在完整的数据或部分数据。所应用的数据和算法相互独立。将不同算法执行的结果组合在一起, 以获得更鲁棒的异常值。
从基本理论看, 异常分析集成与分类集成方法差别不大。尽管异常检测是一个无监督问题, 但分类中的基本偏置方差理论可以通过将基础标签视为未观察到的。因此, 许多自然集成方法, 如bagging和subsampling, 通过微小变型,可以很容易地推广到异常点检测。
1.4.1 sequential ensembles顺序集成
在顺序集成中, 一个或多个异常检测算法按顺序应用于全部或部分数据。该方法的核心原则是, 该算法的每个应用都能得到更精细的算法或者数据集,在过程中不断强化弱算法器的精度从而提升整体精度。可以选择固定次数或者是否收敛作为执行终点。图中提供了顺序集成算法的广泛框架如图1.6所示。
在每次迭代中, 都会根据以前的执行结果, 对改进后的数据使用连续改进的算法。 函数 fj(⋅)f_j (·)fj(⋅) 用于细化数据, 这可能对应于数据子集选择、属性子集选择或通用数据转换方法。上面的描述是以一般化形式提供的, 许多特殊情况可以通过这个框架实例化。例如, 在实践中, 随着数据的细化, 只能在数据的连续修改中使用单一算法。顺序集成可用固定次数的迭代或收敛终止。顺序组合的广泛原则是:通过执行连续的算法来提高对数据的了解, 有助于专注于能够提供新见解的技术和数据部分。
(The broad principle of sequential ensembles is that a greater knowledge of data with successive algorithmic execution helps focus on techniques and portions of data that can provide fresh insights.)
异常文献中的许多特定技术可以被识别为顺序集成的特殊情况,典型例子是使用two-phase算法来构建正常数据的模型。在first phase, 使用异常检测算法来去除明显的异常值。在second phase, 在去除这些明显的异常值后, 建立了一个更稳健的正态模型,由于许多污染正常数据模型的训练点已被删除,因此, second phase的异常值分析更加准确。这种方法通常用于基于聚类的异常分析 (用于在后期构建更鲁棒的集群) [70], 或用于构造更鲁棒的直方图和密度估计。
1.4.2 Independent Ensembles
在Independent Ensembles中,选取算法的不同实例化或数据的不同部分用于异常值分析。或者, 可以将相同的算法应用于不同的初始化、参数集或随机种子。这些不同算法执行的结果可以结合起来, 以获得更稳健的异常得分。此类算法构成了绝大多数异常集成方法。图1.7的伪代码中提供了Independent Ensembles算法的通用描述:
Independent Ensembles的广泛原理是, 不同的算法可能会在不同部分数据上表现得更好,因此, 这些算法的结果组合可能比任何单个集成组件提供更可靠的结果,生成的输出不再依赖于特定算法或数据集。Independent Ensembles经常用于高维异常检测, 因为它们能够探索数据的不同子空间, 在这些子空间中可以发现不同类型的异常值。事实上, 子空间异常检测与梯次诊断集成分析有着密切的联系(详见第5章)。
有大量不同的方法可以利用不同的算法和训练数据集进行模型组合。例如, 某些文献中样本子空间中的方法, 以便独立地从每个执行中获取异常得分。然后, 这些不同执行的得分合并为一个特定点的得分。同样, 分类算法将不同训练数据集的结果结合在一起的方法 (如bagging和subsampling) 也被推广到异常检测。在某些情况下, 随机模型是通过在异常值评分算法 [368] 中进行随机选择来构造的。这些方法将在第5章和第6章中讨论。
1.5.2 当数据之间有依赖关系
本章中的大多数讨论都是关于多维场景, 在这种情况下, 假定数据记录可以相互独立地处理。实际上, 不同的数据值可能在时间上、空间上或通过数据项之间的显式网络关系链接相互关联。这种依赖关系的存在极大地改变了异常检测过程。在这种情况下, 数据项的预期值受其上下文依赖关系的影响, 因此异常值是根据这种上下文建模偏差定义的。 当单个数据项 (例如, 时间序列中的值) 由于其与其相关数据项的关系被判定为异常时, 它被称为上下文异常。这是因为这样的异常值只能在其与邻域项的关系的背景下才能理解。这也叫条件异常。例如, 时间序列中的突然峰值是上下文异常, 因为它与最近的时间戳的值有明显差异。也就是说最近的时间戳定义了序列预期值,与预期值的偏差表示异常值。
当一组数据项被声明为一组点不正常时, 它被称为集体异常。例如, 股票股票代码值随着时间的推移异常而快速的振荡,包括诊断中的所有数据项可能被视为集体异常。实际上, 面向依赖的数据中的所有异常都是上下文或集体异常, 因为它们基于与相邻数据点的关系来计算预期值, 以确定异常模式。
1.5.2.1 时序数据和数据流
时间序列包含一组通过随着时间的推移而连续测量生成的数据。因此, 连续时间戳中的值变化不会很大, 也不会发生平滑的变化。在这种情况下, 突变可被视为异常事件。因此, 时间序列中异常点的发现与异常事件检测问题密切相关, 而此类事件通常表现为相关时间戳中的上下文或集体异常。这些事件往往是由基础系统的突变造成的, 分析师可能会对此产生相当大的兴趣。例如, 请考虑连续时间戳中的值的以下时间序列[3,2,3,2,3,87,86,85,87,89,86,3,84,91,86,91,88],如图1.8所示
很明显在第六个数据点数值由3突变为87,这可以诊断为异常值。接着,数据稳定在这个值,也就形成了新的正常值基准。在第12个数据点,数据降到3,尽管以前出现过,这个值还是被诊断为异常。因此, 在这种情况下, 将数据值视为彼此独立并不有助于异常检测, 因为数据值受到相邻值的高度影响。**时间序列数据中的异常检测问题与变化检测问题密切相关,**因为数据的正常模型在时间排序中受到邻近值的高度控制。
需要强调的是, 变化分析和异常检测 (在时间数据中) 密切相关, 但它们不一定是相同的。时间数据集中的变化可能以两种可能的方式发生:
- 数据流的值和趋势会随着时间的推移而缓慢变化, 这种现象被称为概念漂移。
- 数据流的值和趋势发生了突变, 立即引起人们对底层数据生成机制发生了根本性的变化的怀疑
只有第二种方案可标识异常值。那么在新数据值到达时实时异常诊断是一个常见的挑战。时序数据中的许多变化分析和异常检测场景集成过于紧密, 无法单独处理。在这种情况下, 一个的解决方案可以用于另一个, 反之亦然。另一方面, 时序数据中异常检测的建模公式多种多样, 并非所有这些都与变化检测直接相关。通常, 在线分析适合于变化检测, 而离线分析可能会探索数据的其他不寻常方面。 下面是一些示例: - 当数据以时间序列的形式出现时 (例如, 传感器数据) 趋势的大变化可能与异常相对应。使用基于窗口的分析 , 可以发现这些值与预测值的偏差。在某些情况下, 可能需要确定不寻常形状的时间序列子序列, 而不是更改数据中的点。
- 对于多维数据流, 流数据的聚合分布的更改可能对应于异常事件。例如, 网络入侵事件可能会导致网络流中的聚合更改点。另一方面, 个别点的新颖性可能与聚合变化点相对应, 也可能不对应。后一种情况类似于具有流场景效率约束的多维异常检测。
第9章讨论了时间序列数据和多维数据流中的异常检测方法
1.5.2.2 离散序列
许多基于离散序列的应用 (如入侵检测和欺诈检测) 。此方案可被视为时间序列数据的分类或离散模拟, 其中单个位置包含分类 (符号) 值。离散序列不一定是时间性质的, 但可能是基于它们相对于彼此的相对位置。一个例子是生物序列数据是通过它们的相对位置来定义的。
与连续数据的自回归模型一样, 可以(通常是 Markovian) 预测序列中单个位置的值,与预测值的偏差被标识为上下文异常值。通常需要实时执行预测。在其他情况下, 异常事件只能通过子序列在多个时间戳中显示的正常模式的变化来识别。这类似于时间序列数据中的异常形状检测问题,即集体异常。
因此, 离散序列类似于连续序列, 只是单个位置中的分类值需要使用不同的相似函数、表示数据结构和预测技术。例如, 离散序列预测需要 (更复杂的) Markovian 模型, 而不是 (更简单) 的自回归技术。因为数值时间序列值是有序的, 并且在连续谱之间是可比的, 而离散值则不是。由于这些差异, 离散序列的情况在不同的章节中讨论。
离散数据在许多实际应用中很常见。大多数生物序列是离散的, 因此每个位置的值都是从一组分类可能性中提取的。类似地, 基于主机的入侵应用通常会导致离散数据, 因为许多诊断事件来自一组离散的实例。第10章讨论了离散序列中异常检测的方法.
1.7 异常诊断评估
由于没有准确的异常/正常标签,很难评估异常诊断模型。因此, 许多文献采用案例研究来对无监督异常诊断方法进行直观和定性的评估。
在数据聚类等其他无监督问题上, 常用的方法是使用模型好坏的内部有效性进行度量。例如, 数据聚类中的聚类的均方半径。但它们只提供了模型与学习模型的匹配程度。通常选择与内部有效性好的模型相关算法,这也用于评价过拟合。在异常值检测中, 此问题要严重得多, 因为异常值标签中的微小更改会极大地影响性能。例如, 基于距离的度量方法更倾向于基于距离的算法, 而不是线性 (例如基于 pca 的) 技术。相反, 内部有效性的线性模型更倾向于基于 pca 的技术, 而不是基于距离的算法。因此, 异常值检测很少使用内部有效性度量。
在异常值检测中, 更合理 (尽管不完善) 的方法是使用外部有效性度量。在某些情况下, 数据集可能会根据不平衡的分类问题进行调整。大多数异常检测算法输出一个异常得分, 并使用得分的阈值将分数转换为异常值标签。如果选择阈值的限制太严格, 减少异常数量, 则该算法将错过真正的异常值点 (假负数)。另一方面, 如果算法将太多的数据点声明为异常值, 那么就会导致过多的误报(假正数)。这种权衡可以用精度和召回来衡量。
对于异常得分的任何给定阈值 t, 判断为异常集由 S (t) 表示,G 表示数据集中异常值的真实集。随着 t 的更改, S (t) 的大小也会发生变化。对于任何给定的阈值 t, 精度被定义为准确判定为异常的点占判定为异常的点的百分比。
Precision (t) 的值不一定是单调的, 因为分子和分母的变化可能会不同。召回定义为在阈值 t 处准确判定为异常的点占真实异常常点集的百分比。
通过改变参数 t, 可以在精度和召回之间绘制曲线,即为精确-召回曲线。这条曲线不一定是单调的。对于更有效的算法, 高精度值通常与较低的召回值相对应, 反之亦然。在按离群值排序时, 还可以通过使用数据点排名上的阈值来生成精确召回 (PR) 曲线。在异常得分没有关系的情况下, 基于排名和分数的 PR 曲线将是相同的。
ROC 与精密-召回曲线密切相关, 但有时在视觉上更直观。在这种情况下, 将针对假正率绘制真正率。真正率 TPR(t) 的定义与召回的定义相同。假阳率 FPR(t) 是错误判断为异常的正占实际为负的比例。换句话说, 假阳率是一种“坏”的覆盖率,对于具有真实异常G的数据集 D, 这些定义如下所示:
ROC以错判比例(FPR(t))为横轴,覆盖率为纵轴。请注意, 好的和坏的召回都会随着阈值 t 的增加而单调增加, 在阈值 t 中报告的异常值更多。因此, ROC 曲线的端点始终处于 (0, 0) 和 (100, 100), 并且连接这些点的对角线显示性能。处于对角线以上说明模型效果更佳。
考虑一个具有100个点的数据集的示例, 其中有五个点是异常值。算法 A 和 B 应用于此数据集, 对所有数据点从1到 100排名, 排名越低越倾向为异常值。因此, 精度和召回值可以通过确定5个真实异常点的排名来生成。
对于一条曲线严格支配另一条曲线, 这两种算法之间的相对优势是明确的。例如, 可以立即看出, oracle 算法优于所有算法, 并且随机算法不如所有其他算法。另一方面, 算法 A 和 B 在 ROC 曲线的不同部分表现出更好的性能。在这种情况下, 很难说一种算法是绝对优越的。从表1.2 中可以看出, 算法 A 将3个异常值排名很高, 但其余两个异常值的排名很低。B算法最高排名的异常并不像A算法那么高。算法 A 在 PR (或 ROC) 曲线的前半部分占主导地位, 而算法 B 在后半部分占主导地位。一些人使用 ROC 曲线下的区域作为算法整体有效性的标识。
1.7.1 理解ROC曲线和AUC
AUC的定义:给定一组点的排名或得分, 以确定它们的异常倾向 (较高的排名/分数表示更高的异常值), ROC AUC 等于随机选择的异常值排名正确的概率 (或得分正确的顺序)。
换句话说, 我们通过计算数据集中所有异常值-正常值对的以下平均值来定义 ROC AUC:
这个定义的特点是很容易直观地理解为什么随机算法会提供0.5的AUC。((NG∗ND−G/3∗1+NG∗ND−G/3∗0.5+NG∗ND−G/3∗0)/NG∗ND−G(N_G*N_{D-G}/3*1+N_G*N_{D-G}/3*0.5+N_G*N_{D-G}/3*0)/N_G*N_{D-G}(NG∗ND−G/3∗1+NG∗ND−G/3∗0.5+NG∗ND−G/3∗0)/NG∗ND−G)
AUC应该小心使用, 因为ROC曲线可能对不同的应用并不同样重要。ROC 曲线的初始部分通常要重要得多。例如, 对于包含1000点的数据集, 异常值数据点是排名501还是601没有什么区别。另一方面, 异常数据点是在第1位还是第101位, 也有很大的不同。ROC AUC 对这两种类型的错误几乎没有区别。从这个意义上说, 精度可能更现实。
1.7.2 基准测试中常见的错误
异常值检测算法进行基准测试时的一个常见错误发生在算法依赖于一个或多个用户定义的参数的情况下。例如, k 近邻异常值检测器根据其 k 近邻距离对数据点进行评分, 其中 k 是用户定义的参数。为了选择优化ROC AUC 的参数, 重复运行该算法。但这种方法在异常值检测中是不可接受的, 因为在选择参数时利用了异常标签, 该算法不再是无监督的。在异常值检测等问题中, 算法基准测试的唯一正确方法是在 “合理” 的参数范围内运行, 并使用对结果运行的性能进行一些集中估计来比较这两种算法。 例如, 可以比较这两种算法在各种参数选择上的 AUC中位值性能或框图性能。此外, 不同的探测器可能需要确定完全不同的参数范围, 这就为比较目的带来了进一步的挑战。例如, 单类支持向量机的参数选择可能与近邻检测器完全不同, 这使得对其相对性能的正确理解更加复杂。在监督设置中, 可以交叉验证为每个分类器选择近似最优的参数值, 每个异常值检测器的合理范围通常是根据数据集的简单元特性设置的例如它的大小和尺寸。显然, 这些需要分析师对各种算法的理解和经验。关于各种算法的适当参数选择的指导资源有限。
那么是否可以对比已最优化参数的每个候选算法,这样的方法似乎并不倾向于任何特定的算法。这样做有两个问题。首先, 在无人监督的问题中无法知道参数的最佳选择, 因此结果不能反映分析师在现实环境中的经验。其次, 这样的评价将有利于更不稳定的易过拟合的算法。如果稳定算法在大多数情况下表现优于不稳定算法, 但不稳定算法在非常具体的参数选择中表现非常好, 则将为分析人员提供算法的偏斜视图。毕竟, 在无人监督的环境中, 能够正确猜测此类参数选择的可能性类似于跌跌撞撞
在大海捞针上。 在比较一对探测器时避免参数化偏差的第二种方法是,创建算法在不同设置下的整体平均值, 并比较不同探测器的整体 AUC。比较两种算法在无监督环境中多少有些艺术形式, 在做出正确的实验设计选择时, 至少必须依靠分析师的经验和良好判断。
1.8 结论和总结
异常检测的问题在许多领域有应用,最好确定有趣和不寻常的事件的区别。所有异常检测方法的核心是对正常数据特征分布建立模型,与此模型的偏差用于识别异常值。 对特定领域数据有良好的了解, 通常是设计简单而准确的模型同时不发生过拟合的关键。当不同的数据点之间存在显著的关系时, 异常检测的问题变得特别具有挑战性。在时间序列中,数据点之间的关系中的模式 (无论是时间的还是结构性的) 在定义异常值方面发挥着关键作用。