时间序列及异常检测综述(资料)

文章目录

  • 1. 背景
  • 2. 时间序列预测方法
  • 3. ARIMA
    • 3.1 ARIMA模型预测的流程
    • 3.2 学习资料
  • 4. Prophet
    • 4.1 Prophet流程
    • 4.2 Prophet注意
    • 4.3 学习资料
  • 5. 其他时序方法
  • 6. 异常诊断相关方法
  • 7. 异常检测参考资料

1. 背景

时间序列数据(time series data)是在不同时间上收集到的数据,用于描述现象随时间变化的情况。时间序列是一种典型的数据,具有随时间变化的特征。在大多数场景中,都能见到的一种数据类型。如客流数据,股票数据,销售额数据,网络日志,某些KPI指标等等内容。
时间序列数据格式:(单变量)

Time Value
2018-11-01 2222
2018-11-02 3241
2018-11-03 4232

… …

2. 时间序列预测方法

首先我们要有个目标,想通过时间序列数据完成什么样的目标,短期、中期、长期预测,单步、多步,单变量,多变量。然后需要尽可能的收集时间序列数据,数据越多,能够发现更多数据特征,预测会更准确。
时间序列需要对数据中的缺失、异常、范围等进行处理。并且如何可以将预测问题转换为分类问题,则预测的难点会大大降低。
常见的时间序列数据预测方法,主要总结一下几种:

  • 简单平均法
  • 移动平均法
  • 指数平均法
  • ARIMA法
  • Prophet法
  • 线性回归、KNN等机器学习算法
  • LSTM等深度学习算法

下面主要对其中几种方法进行介绍,其他方法提高参考链接,可自行学习。

3. ARIMA

ARIMA模型全称为自回归移动平均模型(Autoregressive Integrated Moving Average Model,简记ARIMA),其中ARIMA(p,d,q)称为差分自回归移动平均模型,AR是自回归, p为自回归项; MA为移动平均,q为移动平均项数,d为时间序列成为平稳时所做的差分次数。
注意:ARIMA模型只适用于单变量时序预测。

3.1 ARIMA模型预测的流程

1)根据时间序列的散点图、自相关函数和偏自相关函数图以ADF单位根检验其方差、趋势及其季节性变化规律,对序列的平稳性进行识别。一般来讲,经济运行的时间序列都不是平稳序列。
2)对非平稳序列进行平稳化处理。如果数据序列是非平稳的,并存在一定的增长或下降趋势,则需要对数据进行差分处理,如果数据存在异方差,则需对数据进行技术处理,直到处理后的数据的自相关函数值和偏相关函数值无显著地异于零。
3)根据时间序列模型的识别规则,建立相应的模型。若平稳序列的偏相关函数是截尾的,而自相关函数是拖尾的,可断定序列适合AR模型;若平稳序列的偏相关函数是拖尾的,而自相关函数是截尾的,则可断定序列适合MA模型;若平稳序列的偏相关函数和自相关函数均是拖尾的,则序列适合ARMA模型。
4)进行参数估计,检验是否具有统计意义。
5)进行假设检验,诊断残差序列是否为白噪声。
6)利用已通过检验的模型进行预测分析。

3.2 学习资料

针对每一部分,参考的学习链接如下:
Gitlab: http://192.168.6.126/ai-projects/arima_prophet_predict.git
ARIMA示例1:https://blog.csdn.net/weixin_40651515/article/details/81122395
ARIMA示例2:https://www.cnblogs.com/bradleon/p/6832867.html
ARIMA示例3:https://segmentfault.com/a/1190000015301366
ARMA的p,q判断:https://blog.csdn.net/dingming001/article/details/73554949/
单位根ADF:http://www.lizenghai.com/archives/595.html

4. Prophet

Prophet是Facebook开源的一个关于时间序列的框架。Prophet功能完善,既可以做未来预测,也可以填补缺失值,并且可以检测异常。
Prophet的整体框架,整个过程分为四部分:Modeling、Forecast Evaluation、Surface Problems以及Visually Inspect Forecasts
注意:Prophet模型只适用于单变量时序预测。

4.1 Prophet流程

Prophet 采取类似 Sklearn 模式的 API,先创建一个Prophet的实例,然后调用它的 fit 和 predict 方法。
输入是一个DataFrame,必须包含这两列:ds 和 y。ds 必须是一个 date 或者 datetime。y 必须是数字,代表我们需要预测的序列的值。

index ds y
0 2000-01-01 1
1 2000-01-03 2
2 2000-01-04 3

4.2 Prophet注意

a.Modeling:建立时间序列模型。分析师根据预测问题的背景选择一个合适的模型。
b.Forecast Evaluation:模型评估。根据模型对历史数据进行仿真,在模型的参数不确定的情况下,我们可以进行多种尝试,并根据对应的仿真效果评估哪种模型更适合。
c.Surface Problems:呈现问题。如果尝试了多种参数后,模型的整体表现依然不理想,这个时候可以将误差较大的潜在原因呈现给分析师。
d.Visually Inspect Forecasts:以可视化的方式反馈整个预测结果。当问题反馈给分析师后,分析师考虑是否进一步调整和构建模型。
2.2适用场景
前文提到,不同时间序列预测问题的解决方案也各有不用。Prophet适用于有如下特征的业务问题:
a.有至少几个月(最好是一年)的每小时、每天或每周观察的历史数据;
b.有多种人类规模级别的较强的季节性趋势:每周的一些天和每年的一些时间;
c.有事先知道的以不定期的间隔发生的重要节假日(比如国庆节);
d.缺失的历史数据或较大的异常数据的数量在合理范围内;
e.有历史趋势的变化(比如因为产品发布);
f.对于数据中蕴含的非线性增长的趋势都有一个自然极限或饱和状态。

4.3 学习资料

下面几个学习教程,很好的介绍了原理,以及应用方式。请参考学习。
Facebook简译:https://www.jianshu.com/p/68298c3d0dc0
基于Prophet的时间序列预测:http://blog.51cto.com/13591395/2066888

5. 其他时序方法

其他时间序列模型分析方法的资料,可以参考下面进行学习。
指数平滑法:(只适用于单变量时序预测)
https://wiki.mbalib.com/wiki/指数平滑法
移动平均法:(只适用于单变量时序预测)
https://wiki.mbalib.com/wiki/移动平均模型
Complete guide to create a Time Series Forecast (with Codes in Python):
https://www.analyticsvidhya.com/blog/2016/02/time-series-forecasting-codes-python/
Forecasting Time Series data with Prophet - Jupyter Notebook - Python Data:
https://pythondata.wpengine.com/forecasting-time-series-data-prophet-jupyter-notebook/?utm_source=com.tencent.wework&utm_medium=social&utm_oi=655070088001097728
多种时序预测notebook版本
http://nbviewer.jupyter.org/github/Yorko/mlcourse_open/blob/master/jupyter_english/topic09_time_series/topic9_part1_time_series_python.ipynb#
LSTM
https://blog.csdn.net/qq_28031525/article/details/79046718
http://www.cnblogs.com/sandy-t/p/6930608.html
https://machinelearningmastery.com/time-series-prediction-lstm-recurrent-neural-networks-python-keras/
https://www.jianshu.com/p/38df71cad1f6

6. 异常诊断相关方法

异常检测应用也非常广泛,是一种常见的机器学习算法应用。异常检测的方法非常多,具体方法要结合业务场景进行选择。
时间序列及异常检测综述(资料)_第1张图片
图1.1数据突变
时间序列及异常检测综述(资料)_第2张图片
图1.2 周期性异常
数据突变:数据在短时间内,人数发生突升突降违反实际的情况。
周期性异常:正常情况下,不同周期间的数据变化趋势是一致的。但也存在局部趋势差异较大的异常情况。
常见的异常诊断的方法主要包括:基于规则的方法、基于有监督的分类和预测、基于无监督的方法等等。

  • 基于规则的方法
    基于规则的方法主要指,利用数据的分布规律,发现其中的异常点。
    包括3σ原则、方差、Z分数等等。

  • 基于有监督的分类和预测
    可以通过将异常检测问题转换为分类进行是否异常的分类,转换为预测问题,利用置信区间进行判断。
    a) 多分类问题(多个正常分类的标签):神经网络、贝叶斯网络
    b) 单分类问题,如one-class-SVMs
    c) 利用时间序列算法预测
    d) 利用机器学习算法预测

  • 基于无监督的方法
    还有一些无监督的可以用于异常检测的算法。
    e) DBSCAN
    f) iForest

  • 其他
    还有一些专门的用于异常检测的算法
    g) LOF

7. 异常检测参考资料

https://www.datascience.com/blog/python-anomaly-detection
异常检测:百度是这样做的
https://blog.csdn.net/g2v13ah/article/details/78474370
异常点检测算法小结https://www.cnblogs.com/pinard/p/9314198.html
动态时间归整原理及实现
https://www.cnblogs.com/kemaswill/archive/2013/04/18/3028610.html
HTM脑皮质神经网络算法:
https://numenta.com/neuroscience-research/research-publications/papers/hierarchical-temporal-memory-white-paper/
Isolation Forest:
https://www.jianshu.com/p/5af3c66e0410?utm_campaign=maleskine
时序异常检测算法概览: https://www.jqr.com/article/000442

你可能感兴趣的:(机器学习,时间序列,异常检测)