R语言中使用多重聚合预测算法(MAPA)进行时间序列分析

第一估计模型在每个时间聚合级别的拟合度,还提供已识别ETS的可视化。

由Kaizong Ye,Weilong Zhang撰写

第二提供样本内和样本外预测。


这是一个简短的演示,可以使用该代码进行操作。使用MAPA生成预测。

> mapasimple(admissions)
     t+1      t+2      t+3      t+4      t+5      t+6      t+7      t+8      t+9     t+10     t+11     t+12 
457438.0 446869.3 450146.7 462231.5 457512.8 467895.1 457606.0 441295.7 471611.2 454282.0 458308.0 453472.5
×

时间序列预测就是利用过去一段时间的数据来预测未来一段时间内的信息,包括连续型预测(数值预测,范围估计)与离散型预测(事件预测)等,具有非常高的商业价值。

需要明确一点的是,与回归分析预测模型不同,时间序列模型依赖于数值在时间上的先后顺序,同样大小的值改变顺序后输入模型产生的结果是不同的。如之前的文章所介绍,时间序列可以分为平稳序列,即存在某种周期,季节性及趋势的方差和均值不随时间而变化的序列,和非平稳序列。如何对各种场景的时序数据做准确地预测,是一个非常值得研究的问题。

本文为大家总结时间序列预测的有关方法,浅析这些技术并探索如何可以提高这些方法的预测效果。

01

基本规则法

要预测一个时间序列,我们首先需要发现其变化的规律。最基本的方法,就是通过人工经验,挖掘时序数据的演化特征,找到时序变化的周期,从而预估时间序列的未来走势。具体的观察一个时间序列,当序列存在周期性时,提取时间序列的周期性特征进行预测。

图 | 抽取时序的周期进行拟合

02

传统参数法

之前我们介绍了时间序列的统计分析方法,该方法可以将时间序列的演化变为数学参数,天然的,我们可以通过拟合好的模型,进行时间序列的预测。

传统的参数预测方法可以分为两种,一种拟合标准时间序列的餐顺方法,包括移动平均,指数平均等;另一种是考虑多因素组合的参数方法,即AR,MA,ARMA等模型。这类方法比较适用于小规模,单变量的预测,比如某门店的销量预测等。总的来说,基于此类方法的建模步骤是:

首先需要对观测值序列进行平稳性检测,如果不平稳,则对其进行差分运算直到差分后的数据平稳;
在数据平稳后则对其进行白噪声检验,白噪声是指零均值常方差的随机平稳序列;
如果是平稳非白噪声序列就计算ACF(自相关系数)、PACF(偏自相关系数),进行ARMA等模型识别,
对已识别好的模型,确定模型参数,最后应用预测并进行误差分析。

这类方法一般是统计或者金融出身的人用的比较多,对统计学或者随机过程知识的要求比较高。而在数据挖掘的场景中比较难适用,因为需要大量的参数化建模。比如有一个连锁门店的销售数据,要预测每个门店的未来销量,用这类方法的话就需要对每个门店都建立模型, 这样就很难操作了。

03

时间序列分解

时间序列分解法是数年来一直非常有用的方法,一个时间序列往往是一下几类变化形式的叠加或耦合:

长期趋势(Secular trend, T):长期趋势指现象在较长时期内持续发展变化的一种趋向或状态。季节变动(Seasonal Variation, S):季节波动是由于季节的变化引起的现象发展水平的规则变动循环波动(Cyclical Variation, C):循环波动指以若干年为期限,不具严格规则的周期性连续变动不规则波动(Irregular Variation, I): 不规则波动指由于众多偶然因素对时间序列造成的影响

图 | 原始时间序列

时间序列分解模型


// 移动平均法

在原时间序列内依次求连续若干期的平均数作为其某一期的趋势值,如此逐项递移求得一系列的移动平均数,形成一个平均数时间序列。

// 时间回归法

使用回归分析中的最小二乘法,以时间t或t的函数为自变量拟合趋势方程。常用的趋势方程如下:

一阶线性方程
二次(多次)方程曲线
指数曲线

时间序列季节变动分析

时间序列短期会受季节等短期因素影响,从而存在一些周期性

图 | 拟合的季节变动

// 乘法模型-季节指数

乘法模型中的季节成分通过季节指数来反映。常用的方法称为移动平均趋势剔除法。步骤如下:

  1. 计算一动平均值

  2. 从序列中剔除移动平均值

时间序列循环变动分析

时序长期来看会存在一个循环往复,通常通过剩余法来计算循环变动成分C:

如果有季节成分,计算季节指数,得到季节调整后的数据TCI根据趋势方程从季节调整后的数据中消除长期趋势,得到序列CI对消去季节成分和趋势值的序列CI进行移动平均以消除不规则波动,得到循环变动成分C

图 | 拟合的长期循环变动


04

机器学习

近年来时间序列预测方法,多采用机器学习方式。机器学习的方法,主要是构建样本数据集,采用“时间特征”到“样本值”的方式,通过有监督学习,学习特征与标签之前的关联关系,从而实现时间序列预测。

05

深度学习

深度学习方法近年来逐渐替代机器学习方法,成为人工智能与数据分析的主流,对于时间序列的分析,有许多方法可以进行处理,包括:循环神经网络-LSTM模型/卷积神经网络/基于注意力机制的模型(seq2seq)/…

// 循环神经网络

循环神经网络(RNN)框架及其变种(LSTM/GRU/…)是为处理序列型而生的模型,天生的循环自回归的结构是对时间序列的很好的表示。所采用的方式也是监督学习,不过不需要人为的构建时序特征,可以通过深度学习网络拟合时序曲线,捕捉时间先后顺序关系,长期依赖,进行特征学习与预测。

// 卷积神经网络

传统的卷积神经网络(CNN)一般认为不太适合时序问题的建模,这主要由于其卷积核大小的限制,不能很好的抓取长时的依赖信息。但是最近也有很多的工作显示,特定的卷积神经网络结构也可以达到很好的效果,通常将时间序列转化为图像,再应用基于卷积神经网络的模型做分析。

Gramian Angular Field (格拉姆角场GAF)

将笛卡尔坐标系下的一维时间序列,转化为极坐标系表示,再使用三角函数生成GAF矩阵。计算过程:

数值缩放:将笛卡尔坐标系下的时间序列缩放到[0,1]或[-1,1]区间
极坐标转换:使用坐标变换公式,将笛卡尔坐标系序列转化为极坐标系时间序列
角度和/差的三角函数变换:若使用两角和的cos函数则得到GASF,若使用两角差的cos函数则得到GADF

Short Time Fourier Transform (短时傅里叶变换STFT)

在语音信号处理场景使用很广泛,其目标主要将时间序列转为时频图像,进而采用卷积网络进行特征分析。

// 时间卷积网络

时间卷积网络(TCN)是一种特殊的卷积神经网络,针对一维空间做卷积,迭代多层捕捉长期关系。具体的,对于上一层t时刻的值,只依赖于下一层t时刻及其之前的值。和传统的卷积神经网络的不同之处在于,TCN不能看到未来的数据,它是单向的结构,不是双向的。也就是说只有有了前面的因才有后面的果,是一种严格的时间约束模型,因此又被称为因果卷积。

// 基于注意力机制的模型

在RNN中分析时间序列需要我们一步步的顺序处理从 t-n 到 t 的所有信息,而当它们相距较远(n非常大)时RNN的效果常常较差,且由于其顺序性处理效率也较低。基于注意力机制(Attention)的模型,采用跳步的方式计算每个数值之间的两两关联,然后组合这些关联分数得到一个加权的表示。该表示通过前馈神经网络的学习,可以更好的考虑到时序的上下文的信息。

以上步骤如下动图所示:

// 结合CNN+RNN+Attention,作用各不相同互相配合

主要设计思想:

  • CNN捕捉短期局部依赖关系

  • RNN捕捉长期宏观依赖关系

  • Attention为重要时间段或变量加权



这提供了序列和预测的简单图解: 每个时间预测状态的详细视图:


视频

在Python和R语言中建立EWMA,ARIMA模型预测时间序列

探索见解

去bilibili观看

探索更多视频

 
在此示例中,我还使用了paral = 2。创建一个并行集群,然后关闭该集群。如果已经有并行集群在运行,则可以使用paral = 1

第一估计模型在每个时间聚合级别的拟合度,还提供ETS的可视化。 第二提供样本内和样本外预测。


Python用广义加性模型GAM进行时间序列分析

阅读文章




随时关注您喜欢的主题


通过在上述任何函数中设置outplot = 0来停止绘制输出。这些函数还有更多选项,可以设置最大时间聚合级别,MAPA组合的类型等。
第一个是在所有聚合级别上强制使用特定的指数平滑模型。


在这种情况下,将非季节性阻尼趋势模型拟合到时间序列。

由于MAPA不能再在模型之间进行更改并选择一个简单的模型,因此对于给定系列的汇总版本,预选模型可能具有太多的自由度。 此外,如果选择了季节性模型,则对于具有非整数季节性的任何聚合级别,将拟合该模型的非季节性版本。 另一个新选项是能够计算经验预测间隔。由于这些都需要模拟预测以进行计算,因此它们的计算量很大。要获得80%,90%,95%和99%的预测:

> mapa(admissions,conf.lvl=c(0.8,0.9,0.95,0.99),paral=2)
mapaR.fig7

可下载资源

关于作者

Kaizong Ye拓端研究室(TRL)的研究员。

本文借鉴了作者最近为《R语言数据分析挖掘必知必会 》课堂做的准备。

​非常感谢您阅读本文,如需帮助请联系我们!

 
QQ在线咨询
售前咨询热线
15121130882
售后咨询热线
0571-63341498

关注有关新文章的微信公众号


永远不要错过任何见解。当新文章发表时,我们会通过微信公众号向您推送。

技术干货

最新洞察

This will close in 0 seconds