思维之海

——在云端,寻找我的星匙。

时间序列异常检测

异常检测算法。

References

基于时间序列的异常检测| RexKing6’s Note, http://blog.rexking6.top/categories/AIOps/

时间序列异常检测算法- 掘金

Anomaly detection related books, papers, videos, and toolboxes

机器学习之:异常检测

https://pyod.readthedocs.io/en/latest/(异常检测算法包)

awesome-TS-anomaly-detection

https://www.zhihu.com/question/280696035

https://zhuanlan.zhihu.com/p/30169110

https://www.youtube.com/watch?v=5vrY4RbeWkM&t=981s

https://www.youtube.com/watch?v=5vrY4RbeWkM&t=118s

https://www.safaribooksonline.com/library/view/strata-hadoop/9781491976166/video301647.html

https://www.youtube.com/watch?v=12Xq9OLdQwQ&t=2971s

时间序列异常检测:

https://blog.statsbot.co/time-series-anomaly-detection-algorithms-1cef5519aef2

https://www.xenonstack.com/blog/data-science/anomaly-detection-time-series-deep-learning/

https://www.xenonstack.com/blog/data-science/time-series-forecasting-machine-deep-learning/

用 Python 进行时间序列数据可视化

使用Python 3的时间序列可视化指南

https://paperswithcode.com/task/time-series-prediction

时间序列分析算法ARIMA与LSTM简介

时间序列异常检测

时间序列异常检测算法研究?

基于Keras的LSTM多变量时间序列预测- 知乎 多变量!

多变量时间序列的预测和建模指南(附Python代码)

检测

Offline

统计法

基于距离的方法

基于密度的方法

基于聚类的方法

基于划分的方法

基于线性的方法

基于非线性的方法

针对非数值型的方法

上述方法都需要先获得完整的数据,属于离线算法。而不能进行实时检测。

GP

基于单类分类高斯过程(密度)异常序列检测OCC_GP。(Gaussian Process)

目标:尽可能早地发现数据流的异常$\longrightarrow$尽可能早地预警。

难度

  • 高维度,小样本
    • 软件工程,程序调试能力(边界情况的预测)
  • 异常类的样本常常很难获取,缺少负例(失败)样本
  • 自适应?
  • 如何利用专业的领域故障分析能力解释结果?

核心:【优化函数】基于4种高斯和函数。(混合高斯:就是叠加的正态函数)

  • 本质:函数变量f的任意组合,服从均值为0的高斯联合分布$p(f|X)=N(o,K)$。

高斯过程GP算法【分类】:

  • 高斯过程即正态随机过程,具有灵活的非参数特性,对预测结果进行有效估计。
  • 基于贝叶斯方法和训练数据来求出高斯和函数的参数(参数估计,同时利用EM算法迭代优化)。
  • 先验传递(转移)

思路:(如图)

时序异常检测

  • 参数离散化,构建样本空间
  • 绘制时序参数包络线
  • 分析异常

一些小问题:

  • 值的归一化(逻辑回归)$\longrightarrow$导向分类问题
  • 包络线与时间序列位置相关,可能要利用(隐马尔可夫建模,以及模式识别的定位)
  • 如何度量不确定性(检测的粗糙度)

发射任务:

  • 恒定路线预测
  • 多路径预测

HTM

层级时序存储器算法(Hierarchical Temporal Memory,HTM),皮质算法。

  • 模拟人体大脑新皮质层(noecortex)
  • 时空数据流建模
  • 持续学习(Online)幵依赖于储存的大量模式序列
  • 自调节⟶(新常态?)

  • 主要是检测波动式异常

长期序列高斯分布(基准函数),短期序列高斯分布(异常检测函数)。

  • 若检测到短期异常,还需要验证假阳性
  • 需要调参:短期窗口大小的选择(颗粒度)

分布序列预测

多个分支序列(映射到布隆过滤器?)。

  • 设置多个分支的误差函数(如方差),如果方差过高就异常。
  • 也可以计算两个序列的联合概率异常加权得分。
  • 多个联合相关性模型(短期异常压缩)【高斯协方差核函数】
    • 合并在时间上接近但不完全一致的分支异常

相似模式识别?(比如,设置一个短期窗口的相似哈希队列)

  • 一个混合的序列可能还需要基函数分解(如,Fourier解析。需要专业知识,必须要知道基函数)

领域知识的应用


两类任务:

  • 时序⟶匹配、预测
  • 平面数据(不带时序)⟶数据应用

RNN

时间序列异常检测是一个序列标注问题。

  • 0代表正常状态,1代表异常状态。
    • 也可能分成更多类,但本质不变
  • 所使用的输入、输出是等长的

有现成的库,比较好弄。

没有监督,比较不好弄。

LSTM

宝信利用Spark Analytics Zoo对基于LSTM的时间序列异常检测的探索

https://github.com/chen0040/keras-anomaly-detection

端到端的基于LSTM的异常检测流程。

GRU

预测

https://www.statsmodels.org/stable/tsa.html

AE/VAE 周期性

AE

https://medium.com/@curiousily/credit-card-fraud-detection-using-autoencoders-in-keras-tensorflow-for-hackers-part-vii-20e0c85301bd

需要label,不好弄。

ARIMA 稳定性

频谱分析/小波分析 不稳定性

预测+检测

利用预测结果来检测异常

负采样

神技:无监督变为监督。

从某个时间窗口外采样,标为负样本。