美文网首页时间序列分析
时间序列中的异常

时间序列中的异常

作者: 虚胖一场 | 来源:发表于2018-11-27 20:27 被阅读0次

本文链接个人站 | 简书 | CSDN
版权声明:除特别声明外,本博客文章均采用 BY-NC-SA 许可协议。转载请注明出处。

考虑一个 ARIMA 过程生成的时间序列
Y_t = \frac{\theta(B)}{\alpha(B)\phi(B)}a_t, \qquad t = 1, 2, \cdots, n
其中\theta(B)\phi(B)的所有根都在单位圆外,\alpha(B)的所有根都在单位圆上。

在这个序列中引入一个异常,得到
Y_t^* = Y_t + \omega\frac{A(B)}{G(B)H(B)}I_t(\tau)
其中
I_t(\tau) = \begin{cases} 1, & t= \tau,\\ 0, & otherwise \end{cases}
\tau表示异常发生的时刻,\omega表示异常的量级,\frac{A(B)}{G(B)H(B)}表示异常的演化模式。

下面考虑 4 种特定的异常,分别是 innovational outlier (IO),additive outlier (AO),level shift (LS) 以及 temporary change (TC)。它们的定义如下:
\begin{split} IO:\qquad \frac{A(B)}{G(B)H(B)} &= \frac{\theta(B)}{\alpha(B)\phi(B)},\\ AO:\qquad \frac{A(B)}{G(B)H(B)} &= 1, \\ TC:\qquad \frac{A(B)}{G(B)H(B)} &= \frac 1{1-\delta B}, \qquad (0<\delta<1),\\ LS:\qquad \frac{A(B)}{G(B)H(B)} &= \frac 1{1-B}. \end{split}

additive outlier (AO) 表现为序列的值在单次观测中突然变大或变小,而随后的观察结果不受异常值的影响。level shift (LS) 在异常值之后出现的所有观察值都偏移到一个新的水平。temporary change (TC) 和 LS 类似,只不过异常值的影响在随后的观察中呈指数减小,序列最终会回归到正常水平。实际上 AO 和 LS 可以看作是 TC 在 \delta=0\delta=1 时的特例。这 3 种异常和系统之间是独立的,而 innovational outlier (IO) 则不然。IO 通过时间序列的相关结构,波及到与之邻近的一系列观察点。

例子:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

from scipy.signal import lfilter, unit_impulse

def arma_process(ar, ma, size=200, scale=1., e=None):
    if e is None:
        e = np.random.normal(size=size)
    return lfilter(ma, ar, scale*e)

# 考虑一个 ARMA(1, 1) 模型
ar = [1, 0.85]
ma = [1, 0.65]

sample = arma_process(ar, ma)
io = arma_process(ar, ma, e=10*unit_impulse(200, 100))
ao = 10*unit_impulse(200, 100)
tc = arma_process([1, -0.9], [1], e=10*unit_impulse(200, 100))
ls = arma_process([1, -1], [1], e=10*unit_impulse(200, 100))

x = range(200)
plt.figure(figsize=(12, 12))
plt.subplot(511)
plt.plot(x, sample)
plt.title('original signal')

plt.subplot(523)
plt.plot(x, io)
plt.title('innovational outlier (IO)')
plt.subplot(524)
plt.plot(x, sample+io, label='with IO')
plt.plot(x, sample, label='without IO')
plt.title('signal with IO')
plt.legend()

plt.subplot(525)
plt.plot(x, ao)
plt.title('additive outlier (AO)')
plt.subplot(526)
plt.plot(x, sample+ao, label='with AO')
plt.plot(x, sample, label='without AO')
plt.title('signal with AO')
plt.legend()

plt.subplot(527)
plt.plot(x, tc)
plt.title('temporary change (TC)')
plt.subplot(528)
plt.plot(x, sample+tc, label='with TC')
plt.plot(x, sample, label='without TC')
plt.title('signal with TC')
plt.legend()

plt.subplot(529)
plt.plot(x, ls)
plt.title('level shift (LS)')
plt.subplot(5,2,10)
plt.plot(x, sample+ls, label='with LS')
plt.plot(x, sample, label='without LS')
plt.title('signal with LS')
plt.legend()

plt.tight_layout()
plt.show()

更复杂的异常通常可以近似看作这几种异常的组合。

\tau_1, \tau_2, \cdots, \tau_m 引入 m 个异常,则时间序列可以表示为:
Y_t^* = Y_t + \sum\limits_{j=1}^m\omega_jL_j(B)I_t(\tau_j)
其中 L_j(B)t_j处异常的演化模式。

参考文献

  1. Chen, C., & Liu, L.-M. (1993). Forecasting time series with outliers. Journal of Forecasting, 12(1), 13–35. https://doi.org/10.1002/for.3980120103
  2. Chen, C., & Liu, L.-M. (1993). Joint Estimation of Model Parameters and Outlier Effects in Time Series, Journal of the American Statistical Association, 88(421), 284-297. https://doi.org/10.1080/01621459.1993.10594321
  3. Outliers - Characteristics of Time Series - IBM Knowledge Center

相关文章

  • 时间序列中的异常

    本文链接:个人站 | 简书 | CSDN版权声明:除特别声明外,本博客文章均采用 BY-NC-SA 许可协议。转载...

  • 元素操作符

    First:返回序列中的第一个元素;如果是空序列,此方法将引发异常。 FirstOrDefault:返回序列中的第...

  • 时间序列分析中,异常值的检验和处理

    异常值是指一个时间序列观测值中,原来序列一般水平的极端大值和极端小值,有时称为离群点或野值。 用SAS软件运行上述...

  • 时间序列异常检测 EGADS Surus iForest

    时间序列异常检测 本文总结了我在时间序列异常算法方面的一些经验。读者需要对常规机械学习算法有一定的了解。希望本文能...

  • ARM异常之常见关注点梳理

    异常处理流程 当异常发生时,处理器有一套预定义好的处理序列来处理异常及从异常中恢复。如果发生异常,除了reset之...

  • Java基础知识8-异常处理

    异常概述 异常是运行是在代码序列中引起的非正常情况.换句话说,异常是运行时错误.Java异常是用来描述在一段代码中...

  • python制作数字滤波器

    在对数字序列进行滤波的过程中,我们发现对某些序列滤波后,在首端和尾端出现异常值(主要为异常大值)。具体的原因我还不...

  • stl 基于时间序列分解的异常检测

    1. 算法主要分为 3 步 1)用时间序列分解拟合曲线 目的:过滤时间序列不平稳的成分,得到平稳噪声 什么是时间序...

  • 重构Metis之数据库Model

    重构一下Metis,可以学好时间序列异常检测的技术,还有前后端知识。 URL: https://git.code....

  • 【比赛推送】KDD 2021/ Kaggle 顶级赛事等你来排位

    KDD 2021 赛题 赛题1 基于多数据集的时间序列异常检测 Multi-dataset Time Series...

网友评论

    本文标题:时间序列中的异常

    本文链接:https://www.haomeiwen.com/subject/kecnqqtx.html