时间序列的异常值处理+Clean up your time series data with a Hampel filter

问题:

当目的是时间序列预测,时间序列,尤其是不平稳的时间序列(存在多个机制),应该怎样进行异常值处理?

参考网址:

https://stats.stackexchange.com/questions/1142/simple-algorithm-for-online-outlier-detection-of-a-generic-time-seriesstackexchange 网址提出了多种解决时间序列异常值识别思路
https://medium.com/wwblog/clean-up-your-time-series-data-with-a-hampel-filter-58b0bb3ebb04Hampel filter方法在R中的应用

结论:

  1. 异常值识别技术的使用取决于数据本身的性质和你提前对数据做的假设。
  2. 时间序列的异常值识别技术(即使是高维时间序列),不同于面板数据(高维变量)。它的特点在于不平稳,可能存在多个机制。
  3. 所以时间序列异常值识别的关键在于去除不平稳性。
  4. 异常值识别技术可以分为:单变量属性方法、高维变量、特定于模型的技术。
  5. 去除不平稳性有两个思路:第一,利用回归方程去除季节性周期性等得到平稳的残差。第二,滚动窗口,保证每个小窗口数据是平稳的。第三,一阶差分平稳化。
  6. Hampel filter是在滚动窗口下识别异常值并进行使用窗口的中位数进行替换的方法。

Hampel filter

原理

Hampel滤波器是一种我们可以应用于时间序列的滤波器,用来识别离群值,并用更有代表性的值来替换它们。过滤器基本上是一个可配置宽度的滑动窗口,我们可以在时间序列中滑动。
对于每个窗口,过滤器计算中值,并使用中值绝对偏差( M A D MAD MAD)估计窗口的标准偏差 σ = 1.4826 ∗ M A D \sigma=1.4826 *MAD σ=1.4826MAD。对于窗口中的任何点,如果它距离窗口的中值超过 3 σ 3\sigma 3σ,那么Hampel滤波器将该点标识为异常值,并用窗口的中值替换它。

Code

library(pracma)
SP.hampel <- hampel(SP.with.outliers, 5, 3)
# 异常值的序列号
SP.hampel$ind
# 经过异常值识别和替换后的数据
SP.hampel$y

你可能感兴趣的:(时间序列的异常值处理+Clean up your time series data with a Hampel filter)