写点什么

周期性时间序列的预测

  • 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:443020

评论

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

精益+敏捷,两大管理思路让研发效能「飞」起来

万事ONES

终究还是错付了!这2种Python字符串格式化的写法已经被淘汰了,你是不是还在用?

程序员晚枫

Python 字符串 格式化

Go 事,Gopher 要学的数字类型,变量,常量,运算符 ,第2篇

梦想橡皮擦

Python 爬虫 8月月更

兆骑科创创服平台,招商引资,招才引智,投融资对接

兆骑科创凤阁

架构实战营模块九作业

Geek_Q

数字先锋 | 海南省数据产品超市:让买数据产品像逛超市一样方便

天翼云开发者社区

数字化

网页制作常见问题网页的必要性与方法

Baklib

一不小心晋级“CCF国际AIOps挑战赛”决赛?

天翼云开发者社区

如何给玩偶建模并让它跳个舞?

HarmonyOS SDK

开源一夏 | 实战Node.js原理对于阻塞和EventEmitter及其继承的运用心得

恒山其若陋兮

开源 8月月更

出海浪潮下,Edgio引领CDN安全新风向!

科技热闻

昇思MindSpore 1.8:丰富的算法集与套件,实现高性能训练,降低部署门槛

科技热闻

C#/VB.NET: 改变Word中的字体颜色

Geek_249eec

C# word VB.NET 改变字体颜色

RT-Thread记录(九、RT-Thread 中断处理与阶段小结)

矜辰所致

RT-Thread 8月月更

带你徒手完成基于MindSpore的CycleGAN实现

华为云开发者联盟

人工智能 mindspore 图像 生成网络

鄢贵海:DPU发展中的四个关键问题

硬科技星球

大咖说·对话开源|企业如何用好开源数据库

大咖说

开源 企业数据库

4KMILES加入艾盛集团,加速中国品牌跨境业务的全域全效增长

极客天地

INFINI 产品更新啦 20220815

极限实验室

elasticsearch infini gateway INFINI Labs 新版本/特性发布 INFINI Console

兆骑科创创新创业服务平台,海内外高层次人才引进,活动赛事

兆骑科创凤阁

【Django | allauth】重写allauth重置密码方法

计算机魔术师

8月月更

4KMILES加入艾盛集团,携手打造中国品牌在全球网络的增长机遇

极客天地

架构实战营毕业总结

Geek_Q

2022BATJ1000道Java面试题解析,已有372人上岸(必看攻略)

程序知音

Java 程序员 java面试 后端技术 Java八股文

【Django | allauth】useprofile 用户模型扩展

计算机魔术师

8月月更

五大数据安全保障措施看这里!

行云管家

信息安全 数据安全 企业安全 数据库审计

EMAS Serverless系列~4步教你快速搭建小程序

hum建应用专家

Serverless #EMAS

文档管理是企业进步必不可少的要素

Baklib

语音直播系统源码——解决应用瘦身问题

开源直播系统源码

软件开发 语聊房 语音直播系统 语音直播系统连麦

【Django | allauth】登录_注册_邮箱验证_密码邮箱重置

计算机魔术师

8月月更

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