周期性时间序列的预测

女主宣言

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

PS:丰富的一线技术、多元化的表现形式,尽在“HULK一线技术杂谈”,点关注哦!

640?wx_fmt=jpeg

At Tranquility Base, 1969

by NASA IOTD

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


1

数据处理

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

640?wx_fmt=png  

2

划分数据集

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


3

平滑处理

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

640?wx_fmt=jpeg

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

640?wx_fmt=png  

4

周期性分解

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

640?wx_fmt=jpeg
640?wx_fmt=png

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


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


5

预测

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

640?wx_fmt=jpeg


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

640?wx_fmt=jpeg


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

640?wx_fmt=png
 

6

评估

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


7

总结

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

HULK一线技术杂谈

由360云平台团队打造的技术分享公众号,内容涉及云计算数据库大数据监控泛前端自动化测试等众多技术领域,通过夯实的技术积累和丰富的一线实战经验,为你带来最有料的技术分享

640?wx_fmt=gif
  • 10
    点赞
  • 122
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
基于分解法的周期性时间序列预测是一种常用的预测方法。该方法基于对时间序列进行分解,将其分解为趋势、季节性和随机性三个组成部分,并通过对这些部分进行分析和建模来进行预测。 首先,通过趋势分解,我们可以了解时间序列的长期趋势变化。可以使用一些常见的方法,如移动平均法、指数平滑法或回归分析等来估计趋势成分,并进行趋势拟合。这样可以确定时间序列的整体趋势变化规律。 其次,通过季节性分解,我们可以了解时间序列的季节性变化。可以使用季节指数法或季节回归法等方法来估计季节性成分,并进行季节性拟合。这样可以确定时间序列周期性规律。 最后,通过对随机性进行分析,我们可以了解时间序列的随机波动。可以使用自回归移动平均模型(ARMA)或自回归集成移动平均模型(ARIMA)等方法来估计随机性成分,并进行随机性拟合。这样可以确定时间序列的不规则性波动。 基于以上分解的结果,我们可以对趋势、季节性和随机性进行组合,得到时间序列预测结果。可以通过拟合误差(如平均绝对误差、均方根误差等)来评估预测的准确性,并根据需要进行调整和改进。 总之,基于分解法的周期性时间序列预测可以帮助我们了解时间序列的趋势、季节性和随机性特征,并进行相应的预测。这是一种常用且有效的预测方法,可以应用于各种周期性时间序列预测问题中。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值