时间序列及异常检测综述(资料)
文章目录
- 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 周期性异常
数据突变:数据在短时间内,人数发生突升突降违反实际的情况。
周期性异常:正常情况下,不同周期间的数据变化趋势是一致的。但也存在局部趋势差异较大的异常情况。
常见的异常诊断的方法主要包括:基于规则的方法、基于有监督的分类和预测、基于无监督的方法等等。
基于规则的方法
基于规则的方法主要指,利用数据的分布规律,发现其中的异常点。
包括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
时间序列及异常检测综述(资料)相关推荐
- 【时间序列异常检测】时序异常检测综述整理(2020-2021)
转载:宅码 最近阅读几篇异常检测综述,这里整理分享给大家,推荐阅读:5星.不足之处,还望批评指正. 赵越博士的异常检测库Python Outlier Detection (PyOD) [1]写的很好, ...
- 异常检测综述(Anomaly Detection: A Survey)
Anomaly Detection: A Survey 异常检测综述: 异常检测是一个重要的问题,已经在不同的研究领域和应用领域进行了研究.许多异常检测技术是专门为某些应用领域开发的,而其他技术则更为 ...
- 论文阅读_深度学习的医疗异常检测综述
英文题目:Deep Learning for Medical Anomaly Detection - A Survey 中文题目:深度学习的医疗异常检测综述 论文地址:https://arxiv.or ...
- 基于时间序列的异常检测算法小结
简介 搜罗了网上几乎所有的基于时间序列的异常检测方法,没有包括文献,整理记录一下. 综合引用以下文章: 数据挖掘导论 时间序列异常检测机制的研究 KPI异常检测竞赛笔记 异常检测之时间序列的异常检测 ...
- 视频异常检测 综述(一)
视频异常检测 综述(一) 文章目录 视频异常检测 综述(一) 一.视频异常检测(Video anomaly detection)的定义 二.单场景&多场景 三.视频异常类型 1.Appeara ...
- 《监控视频异常检测: 综述》王志国, 章毓晋笔记
害,最近做了挺多机器学习的东西,但是那些不是弯路,我估计之后还是要学习机器学习的相关内容. 今天是周四(2020年11月12日),但是由于网络老师有事,所以没有上网络课,于是就用这个空闲的时间看了一篇 ...
- 论文阅读_基于深度学习的异常检测综述
英文题目:Deep Learning for Anomaly Detection: A Review 中文题目:基于深度学习的异常检测综述 论文地址:https://arxiv.org/pdf/200 ...
- 网络流量异常检测综述
摘 要 随着网络攻击的复杂化.自动化.智能化水平的不断提高,网络中不断涌现出新的攻击类型,这些未曾见过的新攻击给基于特征码的网络攻击检测和响应带来了极大挑战.网络流量异常检测通过对网络流量进行分析,可 ...
- 【NIPS2020】时空序列、时间序列、异常检测相关papers
前段时间 没事刷paper, 把时间序列,时空序列,异常检测的paper稍微聚集了一下,当然可能存在不对称的paper~ 希望大家别太在意~ 整理的比较松散,大部分正在reading Self-sup ...
最新文章
- ASP 三十二条精华代码
- 基于改进的RPCA人脸识别算法
- 事务管理基础:排它锁和共享锁相关知识笔记
- 终极JPA查询和技巧列表–第1部分
- strtotime的几种用法区别
- opengl学习笔记(六)
- Java编程思想精彩评注分享之一
- Redis源码分析01——基本数据结构
- java 分号作用_java枚举类型中分号的用法
- Typora配置PicGo提示Failed to fetch问题解决
- 工业相机和普通相机的区别详解_工业相机与普通相机的差别
- linux 监控微信通知,Prometheus + Altermanager实现告警微信通知
- 虚拟内存设置调整图解
- HDU1507 Uncle Tom's Inherited Land*
- SpringBoot详解(一)
- linux服务器好管理吗,给初学者Linux服务器管理建议
- Visual Studio 2010各个版本比较
- 对L1正则化和L2正则化的理解
- shader 雪 顶点位移_游戏雪天效果·积雪的厚度
- Amazing grace 奇异恩典
热门文章
- 为什么微信小程序里的图片在电脑上显示在手机上不显示?
- Rust编译`Couldn‘t resolve host name (Could not resolve host: crates)` 错误的解决办法
- fatal Couldn‘t find remote ref master
- PR/PO一锅粥,关键信息一图兜
- 优秀网页设计微博汇总
- Cadence OrCAD Capture CIS 输出带属性的PDF原理图
- 以开发之名|线上家装新美学——梦想之家,由你来定
- 程序员必备《新手手册》
- Pubmedy的使用教程
- 利用Python开发王者荣耀,一路直奔上王者