Deep Learning for Time Series Anomaly Detection: A Survey 阅读笔记

Deep Learning for Time Series Anomaly Detection: A Survey(2024.10) 阅读笔记

Introduction

1960s 就有异常检测的概念了。近年来,时间序列异常检测(TSAD)受到越来越多的关注,因为在城市管理、入侵检测、医疗风险和自然灾害等多个领域的适用性越来越高。
近年来的survey只有:Deep learning for anomaly detection in time-series data: Review, analysis, and guidelines.(2021)但是最近又新出了很多模型。
本文的 contributions,因为太久没有综述了,所以每个部分都是 contributions:

  • 分类:基于预测、基于重构、基于表示、基于混合方法。
    • 还可以继续细分,根据所采用的不同神经网络架构。
  • 跟踪了2024.10之前的 TSAD 的最新技术
  • benchmark 和 dataset 的更新
  • 讨论了异常发生的基本原理。
  • 评估指标和可解释性。

Background

时序数据

  • 单变量时序 univariate time series (UTS) dim=1
  • 多变量时序 multivariate time series (MTS) dim=2

时序分解

Yadolah Dodge. 2008. Time Series. Springer New York, New York, NY, 536–539.
时序可以分为4个分量:

  • Secular trend:代表了数据随时间的一般模式。
  • Seasonal variations:季节性总是以固定频率出现。
  • Cyclical fluctuations:除去以上两种的周期信息,人为因素造成的。
  • Irregular variations:除去以上三种的不规则信息。
    每个分量都可能偏离正常行为。

时序异常

异常:观测点偏离了一般分布。

异常类型

UTS和MTS的异常类型

UTS 的 异常:

  • 点异常:全局的、上下文的
  • 段异常:季节性、趋势性、形状
  1. global 异常:模型输出值与实际点值之间的差异大于阈值。
    ∣xt−x^t∣>threshold|x_t-\hat{x}_t|>thresholdxtx^t>threshold
  2. Contextual 异常:与相邻时间点的偏差为上下文偏差。它们偏离了其邻居的值。
    threshold ≈λ × var(Xt−w:t)threshold~\approx\lambda~\times~\mathrm{var}(X_{t-w:t})threshold λ × var(Xtw:t)
  3. Seasonal 异常:实际季节性和模型输出值之间的差距。
    disss(S,S^)>thresholddiss_s(S,\hat{S})>thresholddisss(S,S^)>threshold
  4. Trend 异常:导致数据永久移动到其平均值的事件,并产生趋势性的转变。
    disst(T,T^)>thresholddiss_t(T,\hat{T})>thresholddisst(T,T^)>threshold
  5. Shapelet 异常:独特的时间序列子序列模式。
    dissc(C,C^)>thresholddiss_c(C,\hat{C})>thresholddissc(C,C^)>threshold

MTS 的异常也和 UTS 异常的分类类似。除此之外,MTS 还需要考虑多个维度之间的相互依赖关系,可以是线性的或非线性的。如果这些相关性被打破,MTS 将表现出广泛的异常行为。
UTS的异常类型

  1. 度量间异常:变量之间相关性被打破
    max⁡∀j,k∈D,j≠kdiss⁡corr(Corr⁡(Xj,Xk),Corr⁡(Xt+δtj:t+w+δtjj,Xt+δtk:t+w+δtkk))>threshold\max_{\forall j,k\in D,j\neq k}\operatorname{diss}_{{\mathrm{corr}}}\left(\operatorname{Corr}\left(X^{j},X^{k}\right),\operatorname{Corr}\left(X_{{t+\delta t_{j}:t+w+\delta t_{j}}}^{j},X_{{t+\delta t_{k}:t+w+\delta t_{k}}}^{k}\right)\right)>\mathrm{threshold}j,kD,j=kmaxdisscorr(Corr(Xj,Xk),Corr(Xt+δtj:t+w+δtjj,Xt+δtk:t+w+δtkk))>threshold
    j和k代表不同的维度,corr算相关度,w是时间窗口, δtj\delta t_{j}δtjδtk\delta t_{k}δtk 是移动的长度。
    MTS的异常类型

方法

分为三类:基于预测的、基于重构的和基于表示的。
解决时序异常检测的DL模型架构

学习方案:
训练数据往往有非常少量的异常被标记。因此,大多数模型都试图学习正常数据的表示或特征。
有四种学习方案:无监督、监督、半监督和自监督。

  1. 监督学习:学习基于训练集中的所有标签的异常和正常数据之间的边界。
  2. 无监督学习:不使用标签,不区分训练和测试数据集。难以评估模型好坏。
  3. 半监督学习:数据集仅由标记正常数据组成的情况,定义正确模式,并将偏差检测为异常。
  4. 自监督学习:模型从输入数据生成自己的监督信号,而不需要显式标签。
训练集测试集备注
监督数据有y/n标签数据有y/n标签
无监督数据无标签无标签不区分训练集,测试集
半监督只有y标签的数据
自监督数据无标签根据输入自己生成监督信号

模型的输入:一般用一个时间窗口内的时序数据作为输入,包含历史信息。滑动窗口。
模型的输出:某个时间点/子序列,是/否异常。(二分类问题)

模型一般分为:学习模块,异常评分模块。也可以端到端的训练学习异常分数。
异常评分模块:需要建立阈值。建立这些阈值的常用方法包括非参数动态阈值 (NDT) 和峰值重叠阈值 (POT),这有助于将分数转换为最终标签。

异常分数:由 loss function 来定义,而基于预测/重构/表征的模型,loss function 不一样。
基于重构的模型的异常分数用的是重构概率,基于预测的用的是预测误差。

基于预测的方法

使用模型学习邻近点/窗口,预测未来的点/子序列。将预测值和实际值之间的差距进行比较。

  • RNN
  • LSTM
  • LSTM-AD
  • DeepLSTM
  • LSTM-PRED
  • GRU
    Ergen 和 Kozat 在无监督框架中提出了基于 LSTM 的异常检测算法,以及半监督和完全监督的框架。为了检测异常,它使用由 One Class-SVM (OC-SVM) 和支持向量数据描述 (SVDD) 算法实现的评分函数。在这个框架中,LSTM 和 OC-SVM(或 SVDD)架构参数使用明确定义的目标函数联合训练,利用两种联合优化方法。

评价:传统的单类分类器是为固定维度数据开发的,难以捕获时间序列数据中的时间依赖性。
最近的一个名为THOC的模型通过使用包含多层扩张RNN[27]和分层SVDD[165]的复杂网络来解决这个问题。

  • CNN
    在这里插入图片描述

  • TCN 使用扩展卷积来适应时间序列数据。
    TimesNet [181] 是用于综合时间序列分析的通用深度学习模型。它将一维时间序列数据转换为二维张量,有效捕获复杂的时间模式。TimesBlock 的模块化结构,它结合了参数高效的初始块

  • GNN
    近年来,研究人员提出了从MTS中提取空间信息,形成图结构,将TSAD转换为使用gnn基于这些图检测异常的问题。

  • HTM

  • Transformer

基于重构的方法

基于重构的模型可以提供更准确的异常检测,因为它们可以访问当前的时间序列数据。
但是缺点是有检测延迟。适用于需要高精度但是对延迟不敏感的场景。

AntoEncoder

  • 自动编码器 (AE)
    encoder+decoder
    encoder 将输入转换为低维表示,decoder 从这个表示中重建输入。
    Zt−w:t=Enc(Xt−w:t,ϕ),X^t−w:t=Dec(Zt−w:t,θ)Z_{t-w:t}=Enc\left(X_{t-w:t},\phi\right),\quad\hat{X}_{t-w:t}=Dec\left(Z_{t-w:t},\theta\right)Ztw:t=Enc(Xtw:t,ϕ),X^tw:t=Dec(Ztw:t,θ)
    训练目标是:最小化重构误差。
    (ϕ∗,θ∗)=arg⁡min⁡ϕ,θErr(Xt−w:t,Dec(Enc(Xt−w:t,ϕ),θ))(\phi^*,\theta^*)=\arg\min_{\phi,\theta}\mathrm{Err}\left(X_{t-w:t},Dec\left(Enc\left(X_{t-w:t},\phi\right),\theta\right)\right)(ϕ,θ)=argϕ,θminErr(Xtw:t,Dec(Enc(Xtw:t,ϕ),θ))
    为了改善表征,提出了一些技术:
  • Sparse Autoencoder (SAE)
  • Denoising Autoencoder (DAE)
  • Convolutional Autoencoder (CAE)

异常分数anomaly score由重构误差定义:ASw=∣∣Xt−w:t−Dec(Enc(Xt−w:t,ϕ),θ)∣∣2AS_w=||X_{t-w:t}-Dec(Enc(X_{t-w:t},\phi),\theta)||^2ASw=∣∣Xtw:tDec(Enc(Xtw:t,ϕ),θ)2

DAGMM(Deep Autoencoding Gaussian Mixture Model)在潜在空间之前使用高斯混合估计 MTS 输入样本的概率。
USAD (Unsupervised Anomaly Detection) 使用对抗训练的AEs来放大MTS中的重构误差,区分异常,促进快速学习。
CAE (convolutional autoencoder) ,卷积序列到序列自动编码器以高并行性捕获时间依赖性。具有卷积层和注意力的门控线性单元 (GLU) 捕获局部模式,识别周期性等重复子序列。

Variational Autoencoder

VAE架构

VAE是将AE和 平均场变分贝叶斯 结合的。
和AE的区别在于:

  • VAE是将时序编码成分布;
  • AE是将时序编码成一个低维的点。

VAE架构2

VAE与AE整体结构类似,不同的地方在于:
AE的Encoder直接输出code,
VAE的Encoder输出的是若干个正态分布的均值(μ1,μ2,...,μn)(μ_1,μ_2,...,μ_n)(μ1,μ2,...,μn)和标准差(σ1,σ2...σn)(σ_1,σ_2...σ_n)(σ1,σ2...σn),然后从每个正态分布N(μ1,σ21),N(μ2,σ22)...N(μn,σn2)N(μ_1,σ_2^1),N(μ_2,σ_2^2)...N(μ_n,σ_n^2)N(μ1,σ21),N(μ2,σ22)...N(μn,σn2)采样得到编码code(Z1,Z2...Zn)(Z_1,Z_2...Z_n)(Z1,Z2...Zn),再将code送入Decoder进行解码。

KL散度:通过使用正则化训练,避免了过拟合并确保潜在空间适合生成过程。
loss=∣∣Xt−w+1:t−g(Zt−w+1:t)∣∣2+KL(N(μx,σx),N(0,1))loss=||X_{t-w+1:t}-g(Z_{t-w+1:t})||^2+KL(N(\mu_x,\sigma_x), N(0,1))loss=∣∣Xtw+1:tg(Ztw+1:t)2+KL(N(μx,σx),N(0,1))

  • LSTM-VAE
  • InterFusion hierarchical Variational Autoencoder (HVAE)

GAN

Transformer

  • Anomaly Transformer
  • TranAD
  • Dual-TF 利用时间和频率信息检测时间序列数据异常的框架。

基于表示的方法

学习输入时间序列的丰富表示,然后可用于异常检测,预测,分类等下游任务。
对潜在空间中的学习表示进行异常检测。而不是原始序列。

Transformers

TS2Vec

CNN

  • TF-C (Time-Frequency Consistency)
  • DCdetector
  • CARLA
  • DACAD

多种方法组合

使用联合目标函数,可以同时优化这些组合模型。

dataset

  • MTS:MSL、SMAP、SMD、SWaT、PSM和WADI。
  • UTS:Yahoo、KPI、NAB和UCR。

metrics

在这里插入图片描述

在这里插入图片描述

### 多变量时间序列异常检测工具与基准 多变量时间序列异常检测(MTAD)是一个活跃的研究领域,其目标是从复杂的动态数据中识别出不寻常的行为模式。为了实现这一目标,研究者们开发了许多先进的方法和技术框架。 #### 工具概述 目前存在多种用于多变量时间序列异常检测的开源工具和库,这些工具有助于快速构建模型并评估性能。以下是几个常用的工具及其特点: - **Donut**: Donut 是一种基于变分自编码器 (VAE) 的无监督异常检测算法,适用于处理高维稀疏的时间序列数据[^1]。 - **PyOD**: PyOD 提供了一个全面的 Python 库来支持各种类型的异常检测任务,包括单变量和多变量场景下的异常发现。它集成了许多经典和现代的方法,便于用户比较不同技术的效果。 - **DeepADoTS**: DeepADoTS 是一个专注于深度学习方法的异常检测平台,特别适合复杂的数据结构如图像、文本以及时间序列等。该工具提供了多个预训练模型,并允许定制化设计新架构以适应特定需求。 #### 基准测试环境 对于任何机器学习或深度学习项目而言,合适的评价标准至关重要。针对 MTAD 领域内的工作成果,通常采用以下几种指标来进行量化分析: - **Precision & Recall**: 这两个参数分别衡量预测准确性中的正类覆盖率和误报率,在实际应用过程中往往需要找到两者之间的平衡点以便获得最佳效果。 - **F1 Score**: F1 得分为 Precision 和 Recall 的调和平均数,能够综合反映系统的整体表现水平。当面对类别不平衡问题时尤为有用。 - **AUC-ROC Curve**: ROC 曲线下面积(Area Under the Receiver Operating Characteristic curve),通过绘制 TPR(真正例比率) 对应于不同的阈值下变化而形成的曲线图象计算得出,直观展示了分类器区分能力随决策边界调整的变化趋势。 此外还有其他一些专用度量方式也可能被考虑进去,比如 MASE(Mean Absolute Scaled Error), MAPE(Mean Absolute Percentage Error)等等,具体选择取决于应用场景的具体特性及业务优先级设定情况。 ```python from sklearn.metrics import precision_score, recall_score, f1_score, roc_auc_score def evaluate(y_true, y_pred_probabilities): threshold = 0.5 # 可依据实际情况调节此门限值 predictions = [1 if prob >=threshold else 0 for prob in y_pred_probabilities] precison = precision_score(y_true, predictions) recall = recall_score(y_true, predictions) f_one = f1_score(y_true, predictions) auc_roc = roc_auc_score(y_true, y_pred_probabilities) return {'precision':precison,'recall':recall,'f1':f_one,'auc_roc':auc_roc} ``` 上述代码片段展示如何利用 scikit-learn 中内置函数完成基本性能指标测算过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值