异常值的定义:
“An observation which deviates so much from other observations as to arouse suspicions that it was generated by a different mechanism.
一个与其他观察值偏离非常大,以至于让人怀疑它是用另一种不同的机制中产生的数据。
输入数据的类型
异常值的类型
检测方法的原理
注意
由于异常值的定义一般取决于选择的方法,或者数据本身的特点,因此当选择整个时间序列作为分析对象时,得到的异常点是全局的(global
),而仅选择一个邻域或者一段子序列进行分析的时候,得到的异常点是局部的(local
)
一个在全局看正常的样本,在局部邻域内可能是异常的点
两大主要特点:
是否将时间作为变量
是否能实现实时预测
主要分类:
通过判断样本值与期望值之间的差距是否超过临界值,来判断样本点是否是异常样本
∣ x t − x ^ t ∣ > τ \left|x_{t}-\hat{x}_{t}\right|>\tau ∣xt−x^t∣>τ
按照求期望值的不同,又可分为:
Data used ⟶ Expected value ⟶ Point outliers Estimation models { x t − k 1 , … , x t , … , x t + k 2 } ⟶ x ^ t ⟶ ∣ x t − x ^ t ∣ > τ Prediction models { x t − k , … , x t − 1 } ⟶ x ^ t \begin{array}{lccccccc} \hline & \text { Data used } & \longrightarrow & \text { Expected value } & \longrightarrow & \text { Point outliers } \\ \hline \text { Estimation models } & \left\{x_{t-k_{1}}, \ldots, x_{t}, \ldots, x_{t+k_{2}}\right\} & \longrightarrow & \hat{x}_{t} & \longrightarrow & \left|x_{t}-\hat{x}_{t}\right|>\tau \\ \text { Prediction models } & \left\{x_{t-k}, \ldots, x_{t-1}\right\} & \longrightarrow & \hat{x}_{t} & & \\ \hline \end{array} Estimation models Prediction models Data used {xt−k1,…,xt,…,xt+k2}{xt−k,…,xt−1}⟶⟶⟶ Expected value x^tx^t⟶⟶ Point outliers ∣xt−x^t∣>τ
基于预测模型的方法,仅使用过去的数据来预测新样本的预测值
常见的预测模型
DeepAnT
ARIMA
极值理论
SPOT(Peaks-Over_threshold)固定分布
DSPOT 漂移分布
依据估计模型的方法,同时使用过去和将来的数据,预测某样本的预测值
常见的估计模型:
基于常数或分段统计特征
MAD(Median Absolute Deviation )
基于拟合模型和变量分布函数
Extreme Studentized Deviate (ESD)
基于残差
ARIMA (Autoregressive Integrated Moving Average mode)
x t is an outlier ⟺ ∣ { x ∈ X ∣ d ( x , x t ) ≤ R } ∣ < τ x_{t} \text { is an outlier } \Longleftrightarrow\left|\left\{x \in X \mid d\left(x, x_{t}\right) \leq R\right\}\right|<\tau xt is an outlier ⟺∣{x∈X∣d(x,xt)≤R}∣<τ
τ p + τ s < τ \tau_{p}+\tau_{s}<\tau τp+τs<τ
τ p \tau_{p} τp 和 τ s \tau_{s} τs 分别是一个点之前和之后,距离小于R的点的数量
通过定义一个异常评价函数(越低越好),当除去一个点后,若评价值降低,则将此点视为异常值
事实上,当不考虑多变量之间的相关性时,所有上面提到的单变量方法,都可以用于多变量时间序列异常检测,当然实际使用中,这样的做法很少见
对每个维度分别进行异常值检测
Long Short-Term Memory (LSTM)
数据降维
将相关的多维变量,降维成不相关的多维变量
常见的降维方法:
数据转换
将多变量数据转换成一维的时间序列数据
基于估计模型
∥ x t − x ^ t ∥ > τ \left\|x_{t}-\hat{x}_{t}\right\|>\tau ∥xt−x^t∥>τ
基于预测模型
基于相异度
不训练模型,而直接比较样本之间相似度
基于直方图
方法类似上面的单变量方法中的介绍
这里的定义的异常不再是某一时刻的单一样本点,而是一段时间内连续的样本点构成的序列,它们的某些特征与正常变化不同
通常的分类有以下几种
考虑子序列的长度
按照不同方法在长度选择上的不同,又可分为:
考虑系列的表达方式
由于考虑原始的时间序列数据,通常会导致问题过于复杂,因此通常会使用离散化(Discretization)处理的方法,对原始数据进行处理
考虑周期性
有的场景下,时间序列数据会随着周期性不断地重复,因此在进行异常检测时,除了时间之外,还需要额外考虑周期性的影响
按照对流数据处理方式不同又可分为以下几类:
不协调检测
将一段序列与其他的序列段进行比较,找到与其他序列差异最大的序列段
特点:往往需要用户来指定检测的时间长度,并且输出结果不能判断这个点是异常点,而通常需要人工来判断,因为它只是检测出最不寻常的点,不代表这个点就是异常点,通常也不没有一个特定的判断临界值等
相异度检测
s ( S , S ^ ) > τ s(S, \hat{S})>\tau s(S,S^)>τ
s()函数是衡量两段子序列之间相异度的函数,当相异度超过一个临界值,被标记为异常点
按照衡量相异度时,选择作为正常值的参考不同,又可分为以下几种方法:
以相同时间序列内容作为参考
聚类方法
(通常需要对原始的连续数据进行离散化处理)通过将不同的子序列进行聚类,将聚类中心作为期望值,从而将远离中心,或者所在类成员比较少的,判断为异常序列
相异度衡量
使用外部序列作为参考
使用历史序列作为参考
∑ i = p p + n − 1 ∣ x i − x ^ i ∣ > τ \sum_{i=p}^{p+n-1}\left|x_{i}-\hat{x}_{i}\right|>\tau i=p∑p+n−1∣xi−x^i∣>τ
∑ i = p p + n − 1 ∣ x i − x ^ i ∣ > τ \sum_{i=p}^{p+n-1}\left|x_{i}-\hat{x}_{i}\right|>\tau i=p∑p+n−1∣xi−x^i∣>τ
通过预计频率与真实频率的差异,来判断是否是异常序列
I(s)是序列携带的信息,序列越罕见,信息值越大
f(s)是序列出现的此时
通过不考虑多维数据之间的相关性,或者将多维相关数据降维成低维不相关的数据,从而使用上面单变量的检测方法进行检测
异常时间序列是指多变量时间序列中,某个或多个变量的全部数据出现异常
略
略
略
略