写点什么

周期性时间序列的预测

  • 2019-11-21
  • 本文字数:1137 字

    阅读完需:约 4 分钟

周期性时间序列的预测

AIOps 从立项到现在已经半年有余,从最开始的 LVS 异常检测,到如今的实时关联分析,智能运维已经渗透到我们日常运维中的许多场景,之后我们会将积累的经验分享出来,供大家学习参考,本文最先发布于 OpsDev,转载已获取作者授权。


最近在研究时间序列的时候,发现很多序列具有很强的周期性,那如何对此类序列进行预测呢?

1 数据处理

挑选一个如下图的具有周期性的时间序列。该序列是取得是过去 7 天的数据,每小时一个点,一共 7*24 个点。


2 划分数据集

我们取前六天的数据做训练,第七天做测试集。

3 平滑处理

时间序列经常会出现毛刺的点,需要做平滑处理才能分析,类似上图中的数据。消除数据的毛刺,可以用移动平均法,但是移动平均有时候处理完后并不能使数据平滑,我这里采用的方法很简单,但效果还不错:把每个点与上一点的变化值作为一个新的序列,对这里边的异常值,也就是变化比较离谱的值剃掉,用前后数据的均值填充:



经过处理以后,上图的时间序列得到了平滑处理,效果如下图。


4 周期性分解

具有周期性特征的序列需要将周期性特征提取出来。python 里面的 statsmodels 工具包里面有针对周期性分解的函数 seasonal_decompose,我们可以将序列进行分解。seasonal_decompose 这个函数里面有个 two_sided 的参数,默认是 True。Trend 处理的时候用到移动平均的方法,熟悉此方法的读者就会发现,经过该方法处理以后,序列收尾两段有一部分数据缺失了,但是如果该参数为 FALSE,则只有开始的时候有一段缺失值。




图 3 中的第一张图是 observed,体现的原始数据;第二张是 trend,体现的是分解出来的趋势部分;第三张是 seasonal,体现的是周期部分;最后是 residual,体现的是残差部分。


本文采用的是 seasonal_decompose 的加法模型进行的分解,即 observed = trend + seasonal + residual,另还有乘法模型。在建模的时候,只针对 trend 部分学习和预测,如何将 trend 的预测结果加工成合理的最终结果?后面会有介绍。

5 预测

我们对 trend 部分进行预测,最后再加上 seasonal 部分。对 trend 的预测,我们采用 ARIMA 模型。熟悉该模型的都知道,需要确定三个参数 p,q 和 d,可以使用 aic 和 bic 的方法进行定阶,可以查阅相关的文献。



得到模型以后,就可以进行预测。



下面是预测的结果,从图中可以看到预测的结果将周期性的特征完美地体现出来了。


6 评估

对第七天作出预测,评估的指标为均方根误差 rmse,本序列的 rmse 小于 5,效果还是不错的。

7 总结

本文介绍了周期性序列的预测方法,你可能会问并不是所有的序列都具有周期性,事实确实如此,接下来几篇博客,我会重点介绍周期性检测的一些方法。希望此博客对您研究时间序列有所帮助。


本文转载自公众号 360 云计算(ID:hulktalk)。


原文链接:


https://mp.weixin.qq.com/s/yJEmY2ZFF0mVlRHmizO2Zg


2019-11-21 15:442777

评论

发布
暂无评论
发现更多内容

面试考试可用,十大排序算法

我不自豪谁志豪

学习 面试 算法

新人怎么寻求解决问题的方法

波波

编程 职场 新人

从2009到2020,世界编程语言排行榜分析

C语言技术网-码农有道

编程语言

SpringIOC源码篇-Bean实例化-Spring如何选择类构造器(1)

申屠鹏会

Java Spring Boot

早起实操手册

超超不会飞

效率 生活 自律

原创 | 类应该是匀称和均匀的

编程道与术

企业招聘的需求决定了C/C++程序员的学习方向

C语言技术网-码农有道

C/C++

聊聊我对开源的理解

zygfengyuwuzu

开源

如何消除写作过程中的痛苦,让写作变成一种享受

董一凡

写作

原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (一)什么是单元测试

编程道与术

职场发展的思考

子不语

生涯规划 职业规划

中年危机,我们如何面对?

石云升

生活不奖赏心血来潮

池建强

个人成长 写作

Python 中怎样合并数据

张利东

Python

NIO 看破也说破(二)—— Java 中的两种BIO

小眼睛聊技术

Java 学习 程序员 架构 编程语言

Centos的初步配置

玉龙BB

Docker Linux Docker-compose Centos 7

断章取义,不一样的C/C++语言的学习策略

C语言技术网-码农有道

C/C++

LeetCode 153. Find Minimum in Rotated Sorted Array

隔壁小王

算法

LeetCode 565: Array Nesting

隔壁小王

算法

死磕Java并发编程(8):CurrentHashMap如何实现高效地线程安全?在Java8中有哪些设计实现的演进?

Seven七哥

Java Java并发 ConcurrentHashMap

Netty 源码解析(六): Channel 的 register 操作

猿灯塔

部署Hexo博客到VPS

ini

DataGrip常用快捷键

fliter

IT培训机构那些不得不说的事儿

C语言技术网-码农有道

IT培训机构

Linux初学-01

Flychen

从草根到百万年薪C/C++程序员的二十年风雨之路

C语言技术网-码农有道

c++ 编程语言 C语言

我们迫切需要块状时间

Neco.W

效率 时间分配 时间管理 工作效率 提升效率

产品周刊 | 第 13 期(20200503)

八味阁

产品 设计 产品经理 产品设计

零基础、非计算机相关专业的如何转型程序员

C语言技术网-码农有道

程序员 转型

终端Terminal:程序员是如何查询天气预报的?

lmymirror

GitHub 工具 命令行 terminal 终端工具

1分钟理解M2M和IoT概念

老任物联网杂谈

物联网 M2M IoT

周期性时间序列的预测_文化 & 方法_OpsDev - 籍鑫璞_InfoQ精选文章