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

2023-05-16

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/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python时间序列案例分析实战--奶牛产奶量预测 的相关文章

  • 域名+解析+GitHub来搭建自己的个人网站

    摘要 文章主要介绍域名解析 xff0c 使用GitHub上的开源项目来搭建一个个人博客 并不需要购买服务器 xff0c 没有数据库访问 xff0c 适合搭建自己的博客或者个人网站 xff0c 不适合大型网站 购买域名 可以在万网上面注册一个
  • Linux服务器批量管理工具 - TeamRemote

    产生背景 xff1a 当前网上流行的一些优秀且功能强大的工具 xff0c 如puppet xff0c dsh xff0c parallel ssh xff0c ansible等 但不得不说 xff0c 他们的上手起来太复杂了 xff0c 导
  • C语言书籍推荐

    C 语言书籍推荐 宗旨 xff1a 技术的学习是有限的 xff0c 分享的精神是无限的 一 基础 1 C语言入门很简单 零起点学通C语言 xff08 多媒体范例教学 xff09 C语言从入门到精通 2 C程序设计语言 第2版 新版 C程序设
  • MATLAB排序函数

    MATLAB排序函数 2011 06 29 13 02 08 源自网络 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61
  • 具有FTP、FTPS和sftp功能的文本编辑器——EditPlus功能介绍

    EditPlus是Windows的文本编辑器 xff0c 具有内置的FTP FTPS和sftp功能 虽然它可以很好地替代记事本 xff0c 但它也为网页作者和程序员提供了许多强大的功能 功能特征 01 语法高亮 EditPlus 默认支持H
  • 《iOS高级编程》中的内存管理基础【MRC】

    文章目录 关于我的仓库前言准备工作内存管理 引用计数 的思考 p 2 p 13 记住一张表格内存管理四大原则注意点疑点 内存管理四兄弟 alloc retain release dealloc p 13 p 20 说明alloc计数GNU实
  • python获取指定路径的文件夹下所有TXT文本内容

    有时候 xff0c 我们需要读取某个指定路径的文件夹下的所有txt的文本内容 xff0c 具体步骤 xff1a 可以使用os listdir 方法先获取文件夹下所有文本的文件名 xff0c 然后循环遍历文件名 xff0c 使用open 方法
  • 生物识别传感器 安全性要求背景

    7 3 10 生物识别传感器 如需了解衡量生物识别解锁模式的安全性的其他背景 xff0c 请参阅衡量生物识别的安全性文档 如果设备实现包含安全锁定屏幕 xff0c 则 xff1a 应包含生物识别传感器 生物识别传感器可基于其欺骗和冒名攻击的
  • 笔记本win10 睡眠时会自动唤醒?修复后唤醒缓慢也解决了

    家里笔记本 xff08 Dell XPS13 xff09 xff0c 睡眠后就睡觉了 醒来后 xff0c 发现电池一直耗电 xff1f xff01 查看 Event Viewer 34 xff0c 看到睡眠后几秒钟就自动唤醒了 xff0c
  • Python每日一个小程序

    前几天上网 xff0c 收集了20多道Python练习题 这些练习题还是很有价值的 xff0c 正好最近忙着复习准备校招 xff0c 可以用来练手 我会把每道题都写一篇博客详细阐述解题思路和源代码 xff0c 在每道题目后面附上博客地址 希
  • Java运用策略模式+简单工厂消除if-else

    1 问题场景 监听上游服务MQ消息 xff0c 根据不同的操作类型 xff08 opCode xff09 做相对应的个性化处理 目前接收的就三种 xff0c 随着业务拓展还会不断的增加 xff0c 所以此处按照原来的if else去处理会显
  • 解决安装ubuntu18,安装virtualbox虚拟机问题汇总

    安装ubuntu18问题 xff1a 1 安装界面卡死 以XPS15为例 xff1a 开机按f10 xff0c 选u盘启动 xff0c 因显卡有可能有问题导致安装界面卡死 xff0c 在选择安装时 xff08 选项1和选项2都行 xff09
  • Kernel driver not installed (rc=-1908)

    无法创建虚拟机 xff0c 提示错误 xff1a Kernel driver not installed rc 61 1908 安装 linux headers uname r sudo pacman S linux headers 然后根
  • 连接时出现:Can't open display: localhost:10.0

    解决方法 xff1a 在 etc hosts 中增加 127 0 0 1 localhost ipaddress hostname 之后能进入图形界面 注意是实际ip和机器名 转载于 https www cnblogs com lcchug
  • 函数接口配合lambda处理异常

    package cn hsa spp tradeinterface utils import cn hsa spp comm common exception ServiceException import cn hsa spp comm
  • java工作笔记

    工作笔记 java 1 去除字符串拼接后 xff0c 前后逗号 span class token keyword public span span class token keyword static span span class tok
  • JAVA结合InitializingBean, ApplicationContextAware实现策略工厂

    package cn hsa spp comm factory import org jetbrains annotations NotNull import org springframework beans BeansException
  • vue父页面跳转子页面,值传递

    lt 导入弹框 gt lt debugger dialog ref 61 34 ProcDebuggerDialog 34 visible sync 61 34 debuggerVisible 34 64 success 61 34 get
  • easyexcel导入导出

    lt template gt lt div gt lt div class 61 34 elian box 34 gt lt div class 61 34 elian title 34 gt lt i gt lt i gt lt div
  • Java钩子函数方法

    函数方法 package cn hsa spp webservice dto 64 FunctionalInterface public interface SyncOrderFunctionDTO 64 param obj 64 retu

随机推荐