前面两篇给大家介绍了几种对时间序列直接的预测方法,这一篇给大家讲讲如何对时间序列进行分解,并根据分解法对数据进行预测。

要对一个指标进行预测,首先得知道影响这个指标的因素都有哪些。假如,现在领导让你预估下个月的销量情况,这个时候你会从哪些角度进行考虑呢?也就是什么因素会影响下个月的销量呢?

正常情况下,第一个需要考虑的因素就是今年比往年整体销量的增长情况是什么样子的,我们把这个因素称为长期趋势;第二个因素呢就是下个月是一年中的淡季还是旺季,一般业务都是会有淡旺季之分的,我们把这个因素称为季节因素;与淡旺季相类似还有一个因素是循环因素,淡旺季是针对一年内的数据而言的,而循环因素是针对不同年份之间的,比如股市的熊市和牛市周期;前面这三个都是已知的一些因素,实际中总是会有一些其他我们所不知道的因素,但是又确实影响着指标的实际情况的,我们把这种因素称为不规则因素。

综上,一个时间序列可以分为:长期趋势(T)、季节因素(S)、循环因素(C)、不规则因素(I)四部分。

那么我们应该如何把这四个因素组合起来呢?有两种组合方式:

加法模型:Y = T + S + C + I
乘法模型:Y = T * S * C * I

如果各个因素之间对Y值的影响是相互独立的,那么就用加法模型,反之则需要使用乘法模型。

接下来我们看一下这几个因素分别如何求取:

1.首先我们可以通过移动平均的方法求出TC值,即长期趋势和循环因素两部分;
2.对TC值利用方程(线性、二次项、指数、对数、多项式等)进行拟合,得到的拟合值就是T;
3.利用TC值除T值就可得到循环分量C值;
4.用序列值Y除TC值,即可得到SI,即季节因素+不规则因素
5.求取过去几年相同季节的平均数,再计算全季总平均数,然后用各季节平均数去除全季总平均数,得到的值就是各季节指数,需要保证各季节指数之和等于4,如果不为4,则需要调整。最后用SI值除S值即可得到I值。

在实际应用中上面的几个因素不一定同时存在,需要根据实际情况来进行判断。

以上是关于时间序列各因素的一个拆解,接下来给大家一个举个例子:

下表为2015年-2019年各个季度的GDP值,这是一个完整的时间序列,我们接下来就看下如何拆解这个时间序列中的各个因素。



java时间序列预测使用 时间序列预测结果_拟合

先来画个趋势图,看看整体趋势情况:

java时间序列预测使用 时间序列预测结果_数据_02

先进行第一步,求取移动平均值,因为我们的数据有严格的季节性,所以选取4期移动平均,关于移动平均的方法在前面讲过,这里就不重复了。

第二步根据求出来的移动平均值,拟合回归方程,因为看趋势像线性趋势,所以直接选择线性方程进行拟合,结果如下:



java时间序列预测使用 时间序列预测结果_时间序列_03

第三步利用Y值除移动平均TC值即可得到SI值。

第四步求取季节因素S值,我们先对季节因素做个图:



java时间序列预测使用 时间序列预测结果_时间序列_04

可以看到每年的第一季度到第四季度都是稳定上升,接下来求取下具体的季节因素大小,其实就是每个季节的在全年中的一个占比情况。

java时间序列预测使用 时间序列预测结果_数据_05

第五步用SI值除S值,即可得到I值。

最后整体的结果如下:



java时间序列预测使用 时间序列预测结果_时间序列_06

我们并对2020年各个季度的GDP做了一个预测,即下图中红线部分,每个季度的预测值等于该季度对应的TSC,因为每个值对应的I不相同,所以就没放进来,当然也可以对不同季度的I值取均值放进来。

java时间序列预测使用 时间序列预测结果_拟合_07

以上就是关于时间序列预测的下部分。为了理解更加深刻,大家一定要自己跟着过程计算一遍。

java时间序列预测使用 时间序列预测结果_数据_08