1.时间序列异常检测的背景与重要性
2. 传统统计学基础算法
3. 基于距离/密度的经典算法
4. 基于集成与森林的算法
5. 基于分解与预测的算法
6. 基于线性模型与支持向量机的算法
6.1. PCA异常检测 (PCA-Based Outlier)
6.2. 一类SVM (One-Class SVM)
6.3. 椭圆包络 (Elliptic Envelope)
6.4. 深度一类分类 (Deep SVDD)
这类方法借助学习数据的子空间或边界来区分正常与异常。
6.1. PCA异常检测(PCA-Based Outlier)
一种经典的线性降维技术。其在异常检测中的应用基于这样一个假设:PCA能捕捉到多维数据中的重要变化模式(由前几个主成分定义),而异常点则可能在这些主要模式上表现正常,但在次要模式(由后面的主成分定义)上表现出巨大偏差,或者根本不符合任何模式。就是主成分分析(Principal Component Analysis, PCA)
PCA的核心思想是利用重构误差来识别异常。首先,使用正常数据训练PCA模型,学习到一个低维的“正常子空间”。接着,对于一个新的数据点,将其投影到该子空间,再重构回原始空间。倘若这个点是正常的,那么重构误差(原始点与重构点之间的距离)会很小;倘若它是异常的,它很可能包含无法被“正常子空间”有用表示的信息,导致重构误差很大。其演进包括增量PCA(Incremental PCA),用于处理流式数据。
算法特别适用于变量之间存在线性相关的高维、多变量数据。
算法属于无监督/半监督(通常用正常数据训练)、简便调参(主要是选择降维后的维度数量)。
算法能有效处理高维数据,降低维度灾难的影响;可解释性较好(可以分析是哪个主成分贡献了异常)。
算法基于线性假设,无法捕捉非线性关系;对信息缩放敏感;原始PCA对异常值敏感,可能需要应用鲁棒PCA变体。
算法的适用场景首要是多传感器系统监控(如工业设备、航天器),其中多个传感器读数高度相关。
Python语言的Scikit-learn的PCA模块和PyOD的PCA检测器。
PCA是多变量时间序列异常检测的常用方法。通过对窗口化的多变量序列(每个时间点是一个多维向量)应用PCA,能够有效检测出那些变量间正常相关关系被破坏的时间点。例如,在正常情况下,机器的转速和温度呈正相关,如果某时刻转速很高但温度很低,PCA的重构误差就会很大。
6.2. 一类SVM (One-Class SVM)
一类支持向量机(One-Class Support Vector Machine, OCSVM)是标准SVM的一个变体,专门用于新奇点检测(Novelty Detection)。它不要求负样本(异常样本),而是试图学习一个能够包围住大部分正常数据点的边界(超平面或超球面)。
算法的核心思想是在高维特征空间中找到一个“最小”的区域,该区域包含了绝大多数训练素材(正常数据)。对于新的数据点,若是它落在这个区域之外,就被认为是异常。借助使用核函数(如RBF核),OCSVM能够学习到非线性的边界,从而适应复杂的数据分布。它的发展是为了克服传统分类方法在只有一类样本(正常样本)可用时的困境。
OCSVM算法适用于高维、非线性的表格数据。
OCSVM算法属于无监督/半监督(仅用正常数据训练)、困难调参(nu参数控制了异常比例的上界和拥护向量的数量,核函数参数gamma对结果影响巨大)。
OCSVM算法能够学习麻烦的非线性边界;理论基础坚实。却对参数选择非常敏感,调参困难;计算复杂度较高,不适合超大规模数据;在高维时间序列上性能可能不佳。
OCSVM算法适用场景是,当正常素材的模式复杂且非线性时,如图像识别中的缺陷检测。
Python的Scikit-learn的OneClassSVM模块和PyOD的OCSVM均对算法有实现。
通过滑动窗口,OCSVM可以学习时间序列子序列的正常模式。由于其学习非线性边界的能力,它可能比PCA更好地捕捉时间序列的复杂动态。但其高昂的计算成本和调参难度限制了其在长序列和实时场景中的应用。
6.3. 椭圆包络(Elliptic Envelope)
超椭球)来包围这些正常点。就是椭圆包络是一种基于高斯分布假设的异常检测方式。它假设正常数据点服从一个(或多个)多元高斯分布,并试图找到一个最小的椭圆(在高维空间中
算法的核心思想是通过拟合材料的协方差矩阵来定义一个马氏距离边界。落在椭圆外的点被认为是异常。为了使模型对数据中的异常值具有鲁棒性,通常使用一种称为“最小协方差行列式”(Minimum Covariance Determinant, MCD)的算法来估计协方差,该算法会选择一个子集的信息来计算,以排除潜在的异常值。
算法适用于服从高斯分布的多维数据。
算法是无监督、简单调参(主要是污染率contamination)的算法。
当数据确实服从高斯分布时,算法效果很好;实现简单。但算法对数据分布的假设太强,对于非高斯分布的数据(如多模态信息)效果很差。
算法适用于那些已知或行假定其特征呈多元高斯分布的材料集。
Python语言中,该算法在Scikit-learn的EllipticEnvelope模块有实现。
对于多变量时间序列,如果其窗口化后的向量分布近似于高斯分布,则椭圆包络是一个不错的选择。但大多数真实世界的时间序列不满足此假设,因此其应用相对有限。
6.4. 深度一类分类(Deep SVDD)
深度支持向量资料描述(Deep Support Vector Data Description)是经典SVDD(与OCSVM相当相似)的深度学习版本。它通过一个深度神经网络将输入数据映射到一个低维的潜在空间。
Deep SVDD核心思想是在训练过程中,强制所有正常资料点的潜在表示都紧密地聚集在一个预定义的中心点c周围,形成一个最小体积的超球面。网络的训练目标是最小化这个超球面的体积(即最小化正常样本到中心的平均距离)。在测试时,那些被映射到超球面之外很远的点被识别为异常。这是为了解除传统SVDD使用核办法带来的计算和扩展性问题。
Deep SVDD适用于高维、困难结构的数据,如图像、声音等,属于无监督/半监督、复杂调参(网络结构、学习率、中心点c的选择等)算法。
Deep SVDD结合了深度学习强大的表示能力和一类分类清晰的目标,能处理非常复杂的数据;端到端训练。
Deep SVDD可能面临“超球面坍塌”问题,即所有样本的表示都收敛到同一点,需要仔细设计网络结构和损失函数来避免;训练成本高。
Deep SVDD适用工业领域的视觉缺陷检测(只用正常产品图片训练)、网络安全中的恶意软件检测。
Deep SVDD没有官方的标准库,但有许多基于PyTorch的开源完成。
Deep SVDD可以学习时间序列的深度表示。例如,可以设计一个卷积神经网络或循环神经网络作为编码器,将时间序列子序列映射到潜在空间。此种方法能够学习到时间序列深层次的、抽象的正常模式,对于检测那些在原始空间不明显但在表示空间中偏离的异常非常高效。
后续将有如下内容: