您的位置:首页 > 编程语言 > Python开发

[置顶] Python时间序列案例分析实战--奶牛产奶量预测

2017-10-23 17:53 676 查看
Python时间序列实践之奶牛产奶量预测

CSDN:http://blog.csdn.net/kicilove/article/

数据及完整示例代码下载(https://github.com/zhaohuicici/Time-Series-Model

前言

数据介绍

一所用库的导入

二使用pandas读入数据整理数据

三平稳性检验

四数据进行平稳性处理

五ARMAARIMA模型识别

六模型拟合

七模型诊断

八预测

分析流程:

1. 使用pandas读入数据、整理数据;

2. 检验数据的稳定性;

3. 数据进行平稳性处理;

4. 使用statsmodels库中相关的时间序列函数进行时间序列模型AR、MA、ARIMA的识别;

5. 拟合模型;

6. 模型诊断;

7. 预测结果。

前言:

时间序列是时间间隔不变的情况下收集的时间点集合。这些集合被分析用来了解长期发展趋势,为了预测未来或者表现分析的其他形式。每时刻的甲醛浓度变化、每日股票闭盘价格、共享单车每日租车数等等都可以看做一系列时间点上的观测,在一系列时间点上观测获取的数据也就是我们俗称的时间序列数据。文中使用matplotlib库进行数据可视化,使用pandas进行数据整理,使用statsmodels库中时间序列相关函数建模分析。由于时间序列和时间相关连,不同的数据有不同的建模方法,本文仅为了介绍时间序列常用的建模流程,不会追求真正的精度,对于精益求精的同学可以尝试使用不同模型和参数对比提高预测结果。

数据介绍

本文将使用一头从1962年一月到1975年12月的每月产奶量的数据集,单位为:磅。

数据及完整示例代码下载(https://github.com/zhaohuicici/Time-Series-Model

一.所用库的导入

所需要的库主要分为三部分:

数据处理:pandas

时间序列建模:statsmodels

可视化:matplotlib

载入需要的库



二.使用pandas读入数据、整理数据

读入所需要的奶牛产奶量数据集,并且可视化数据集,代码如下:





从上图可以看出,数据呈现出明显的整体上升趋势,并且也有季节性的迹象。

为了方便处理,我们将数据进行重新索引,代码如下:





三.平稳性检验

数据处理完毕,下面进行数据的平稳性检验,其实从上面的可视化已经看出数据是不平稳的,但是为了阐述建模流程的完整性,下面还是例行的进行平稳性的检验。首先,对数据进行滚动求均值,然后给出数据的标准差,并对数据进行一阶差分处理,从这里就进行差分是为了简便后边的处理步骤,之后在AIC和BIC标准下使用ADF来检验自回归模型的单位根是否满足平稳性要求,这里以可视化的方式给出,代码如下:







图像解释:蓝色的是原始的数据的可视化,红色的线是滚动12阶求平均后的可视化图,可以看出确实数据呈现明显的上升趋势,黑色的线是标准差可视化,黄色的线是0位置的线,绿色的线是一阶差分数据后的可视化,从绿色与黄色线的比对可以看出,一阶差分后数据基本满足了平稳性的要求。

从使用AIC为标准的ADF检验及使用BIC为标准的ADF检验的p值以及统计量与各临界值分位数的对比可以看出,原始数据确实在自回归模型下是不平稳的,因此下面我们尝试对数据进行差分平稳性的检验。

补充:

这里也可以尝试对数变换、指数平滑等方法,请读者自行实践查看效果。

四.数据进行平稳性处理:

从上面对原始数据的平稳性检验看出,数据不平稳,因此,下面我们使用一阶差分后的数据进行平稳性的检验,代码如下:





图像解释:上面的图像中,蓝色线条是一阶差分后的数据的可视化,绿色线条相当于对一阶差分后的数据进行了又一次的差分,黄线是0 基准线,从这两条差分的曲线可以看出,数据在一阶差分下基本满足了平稳性要求,没有必要进行二次差分,虽然12阶滚动均值还是有一点点的差,这个读者也可以自行建模效果,篇幅所限就不再展开了。

五.AR、MA、ARIMA模型识别

本文主要想采用ARIMA相关模型进行建模,但是我们上文中提到过,可以看出数据有季节性的趋势,所以我们顺手做一个季节性的检验,从图像中看看数据是否真的有季节性趋势,代码如下:





图像解释:上图中第一格图是原始数据的图像,第二格图像是数据的趋势图像,可以看出明显的上升趋势,第三格图是季节性的趋势,可以看出图像展现了我们的猜测,非常规矩的季节性趋势摆在眼前,最后一格图是残差的部分,可以大体看出残差也是有白噪声的迹象。

下面言归正传,我们使用AIC。BIC。HQIC标准来看看,如果使用AR,MA,或者ARIMA需要怎样的参数输入,代码如下:





从上面的AIC,BIC,HQIC的输出结果来看,我们大体上可以尝试AR(1),MA(2),AR(2)

ARIMA(1,0,2)等几个模型。

当我们决定使用AR 或者 MA模型的时候,可以使用ACF、PACF来判断参数的取值。

六.模型拟合

首先尝试模型AR(2),代码如下:





从上面的AR(2)模型输出结果可以看出,RSS值为139.9542。

下面尝试MA(2)模型,代码如下:





从上面的MA(2)模型输出结果可以看出,RSS值为43.9771。

下面我们使用ARIMA(1,0,2)来查看数据的拟合效果,代码如下:



从上面的ARIMA(1,0,2)模型输出结果可以看出,RSS值为8.2697。

对比AR(2),MA(2)的模型输出结果RSS来看,ARIMA(1,0,2)的RSS值是最小的,看来把AR和MA模型组合起来建模效果是有明显改善的。

其中RSS的定义代码中给出。

七.模型诊断

下面我们来看看关于模型ARIMA(1,0,2)的诊断结果,代码如下:



从上面的ACF及PACF来看,在低阶处残差已经不存在相关性,但是高阶处还是有些问题。

下面看看D_W检验,代码如下:





D_W检验输出结果为2.02,课件残差已经不存在一阶自相关。对于D_W输出结果的查看方法及代表意义,请读者自行查找。

下面我们来看看残差的QQ图,代码如下:



从图中可以看出,残差还是有一丢丢问题,但是只看右侧还是不错的。暂时不再尝试其他模型的检验,感兴趣的同学自行检验。

八.预测

对模型诊断完毕之后,因为诊断结果还算尽如人意,我们下面对数据进行预测,这里输出预测的结果与真实结果的比对,代码如下:





图中是一阶差分的数据和对一阶差分数据的预测的可视化,其中绿色的图像是原始数据一阶差分的可视化,蓝色的图像是对绿色数据预测的结果的可视化。从图中可以看出,预测结果基本抓住了数据的特点。

由于真正要得到的结果是原始数据的预测结果,现在对差分的数据进行还原操作,这一步好多的同学可能会忘记,特此提醒,代码如下:







下面代码用于输出我们对于原始数据的预测结果:





下面代码用来可视化原始数据预测结果的可视化:





上面已经给出了原始数据与预测结果的可视化对比,下面进入建模的最后一步,也就是我们最终的目的,就是对未来几期的数据进行预测,这里预测1976-1到1976-12一年奶牛产量的预测,并且给出可视化的结果,代码如下:





我的个天,终于写完了,下面还是按照惯例总结一下。

总结:

本文主要介绍时间序列ARIMA相关模型的建立及诊断和预测过程。文章首先使用pandas读入数据、整理数据;然后使用test_stationarity函数进行原始数据以及一阶差分数据的平稳性检验,用于满足后边ARIMA模型对于平稳性的要求;之后对数据进行差分,使数据满足平稳性;之后使用网格搜索的方法对最优参数进行初步确定,之后使用statsmodels库中相关的时间序列函数进行时间序列模型AR、MA、ARIMA的识别,拟合模型;对ARIMA(1,0,2)模型进行模型的诊断,主要包括自相关性、独立性等的检验;基于此我们接着使用ARIMA(1,0,2)模型对一阶差分数据进行了预测,并且对预测的数据进行了一阶差分的还原,以此得到对于原始数据的预测结果;最后,我们预测得到1976-1到1976-12月奶牛产奶量的12期预测结果,至此完成了整个时间序列模型的全流程建模过程。

数据及完整示例代码下载(https://github.com/zhaohuicici/Time-Series-Model

CSDN:http://blog.csdn.net/kicilove/article/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: