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时间序列案例分析实战--奶牛产奶量预测 的相关文章

  • Git客户端的安装

    1 概述 Git有自带的命名行客户端 xff0c 也有自己的图形化客户端 xff0c 这个就是git exe 此外还有TortoiseGit 在这之上又封装了一层 xff0c 使我们用起来更加的方便 xff0c 这个跟TortoiseSVN
  • 13.查看docker容器状态

    1 docker下查看所有容器状态 xff1b docker ps a
  • 进入docker容器带特权(即可使用systemctl命令)

    1 进入docker容器带特权 xff08 即可使用systemctl命令 xff09 创建docker容器时即带特权参数 xff0c 例如 xff1a docker run itd name 61 nginx privileged 61
  • docker中拉取指定版本的镜像

    比如 xff1a docker pull mongo 3 2 4 dockre pull redis 3 2
  • H3C路由器命令查看arp表(mac与ip对应关系)

    用户模式或者全局模式下 命令 xff1a dis arp
  • kvm虚拟机利用virsh查看ip

    1 virsh dumpxml win7 grep mac 查看win7虚拟机mac 2 arp a 显示mac与ip对应关系 示例 xff1a root 64 localhost virsh dumpxml ubuntu yusen gr
  • python取文本中含有指定关键词的行

    python取文本中含有指定关键词的行 脚本内容 xff1a f 61 open 39 home py 9 txt 39 39 r 39 lines 61 f readlines for lines in lines if 34 EIPId
  • VSCode 快捷键

    VsCode可以通过以下快捷键 格式化代码 xff1a On Windows Shift 43 Alt 43 F 巨好用 xff01 有木有 xff01 QAQ xff09 On Mac Shift 43 Option 43 F 1 向上
  • 查看容器暴露的端口

    docker ps 查看运行中的容器 docker port c5b 查看容器c5b的端口状态 27017是容器端口 xff1b 0 0 0 0 37017是27017映射到宿主机上的端口
  • python元组实例

    脚本 xff1a usr bin python coding utf 8 names 61 34 kevin 34 34 liqunxing 34 34 chenxianan 34 print names 0 names 1 names 2
  • 机房温度告警

    https blog csdn net ot512csdn article details 80175323
  • k8s部署教程

    https mp weixin qq com s biz 61 MzI5MjA5Mjg5OA 61 61 amp mid 61 2247484395 amp idx 61 1 amp sn 61 0767cc24ec99ce818e41f7
  • Win10笔记本用雷电3接口外接显卡加速tensorflow深度学习步骤

    简介 xff1a 最近入手了一块rtx3060 xff0c 但自己的主力设备是笔记本 xff0c 于是萌生了通过外接显卡来加速深度学习的想法 xff0c 配置过程中遇到一些小问题 xff0c 经过调试最后解决了 xff0c 现在简单把整个过
  • 使用GitHub和DockerHub自动构建并发布镜像

    要使用自动构建 xff0c 必须在 Docker Hub 和GitHub上拥有一个帐户 首先登录您的Docker Hub账号 xff0c 创建一个Repository xff0c 创建类似如下页面 点击创建的Repository xff0c
  • 三 机器人仿真软件Gazebo介绍

    ROS教程 这是小弟的学习笔记 xff0c 有错求请拍 xff0c 多指教 xff0c 谢谢 三 机器人仿真软件Gazebo介绍 Gazebo功能 1 构建机器人运动仿真模型 在Gazebo里 xff0c 提供了最基础的三个物体 xff0c
  • Protobuf生成Go代码指南

    这个教程中将会描述protocol buffer编译器通过给定的 proto会编译生成什么Go代码 教程针对的是proto3版本的protobuf 在阅读之前确保你已经阅读过Protobuf语言指南 编译器调用 Protobuf核心的工具集
  • ROS sensor_msgs/LaserScan Message简单说明

    std msgs Header header float32 angle min 开始扫描角度 float32 angle max 结束扫描角度 float32 angle increment 每次扫描增加的角度 xff08 角度分辨率 x
  • 双系统Ubuntu分区

    假设整个空闲空间有200G xff0c 主要分4个区 xff1a 1 给系统分区EFI xff1a 在唯一的一个空闲分区上添加 xff0c 大小200M xff0c 逻辑分区 xff0c 空间起始位置 xff0c 用于efi xff1b 这
  • 2 用D435i运行VINS-fusion

    文章目录 1 VINS fusion的安装1 1 环境和依赖的安装1 2 编译VINS Fusion1 3 编译错误解决方法 2 VINS Fusion跑数据集3 用相机运行VINS Fusion 环境 xff1a Ubuntu20 04
  • Python每日一个小程序

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

随机推荐

  • 数分下(第1讲):一阶微分方程的三类模型求解

    第1 1讲 xff1a 一阶微分方程的解法 第一周第一讲将用3个小时时间 xff0c 完整讲解一阶微分方程y 61 f x y 的三种典型模型求解方法 掌握以下知识点 xff0c 并熟练做题训练 对应同济高数教材第七章1 4节 知识点脑图如
  • 非常详细的 Linux C/C++ 学习路线总结!助我拿下腾讯offer

    点击关注上方 五分钟学算法 xff0c 设为 置顶或星标 xff0c 第一时间送达干货 转自后端技术学堂 正文 我的另一篇文章 腾讯 C 43 43 后台开发面试笔试知识点参考笔记 整理了 C 43 43 后台开发知识点 xff0c 本文尝
  • 一线互联网公司程序员技术面试的流程以及注意事项

    先来了解面试的流程是什么 xff0c 然后再一一做准备 xff01 企业一般通过几轮技术面试来考察大家的各项能力 xff0c 一般流程如下 xff1a 一面机试 xff1a 一般会考选择题和编程题 二面基础算法面 xff1a 就是基础的算法
  • 为什么C++永不过时?

    Linus曾说过 xff1a C 43 43 是一门很恐怖的语言 xff0c 而比它更恐怖的是很多不合格的程序员在使用着它 xff01 这足以说明C 43 43 有多难 xff01 不过 xff0c 你也要明白 难度越高意味着含金量与竞争力
  • STM32 USB学习笔记6

    主机环境 xff1a Windows 7 SP1 开发环境 xff1a MDK5 14 目标板 xff1a STM32F103C8T6 开发库 xff1a STM32F1Cube库和STM32 USB Device Library 现在来分
  • Invalid bound statement (not found)

    目录 一 遇到的问题 二 分析思路 1 映射文件 2 测试类 三 解决方案 一 遇到的问题 前几日 xff0c 有个工作不久的同事找我帮他解决一个 Mybatis 的问题 他写了一个增删改查 xff0c 但是在启动程序的时候报错 xff1a
  • ThinkPHP6 解决小程序调用接口返回错误是网页的尴尬

    背景 早在开始了解ThinkPHP时就一直记得一段话 xff1a 在一开始无知的我以为出现错误后能在调试阶段优雅的了解错误信息 xff0c 但结果大家试一下便知道 xff0c 十分尴尬 尤其是当在小程序里请求api xff0c 在过程中发生
  • 大数据技术Canal总结和详细案例

    0 Canal介绍 Canal 是用 Java 开发的基于数据库增量日志解析 xff0c 提供增量数据订阅 amp 消费的中间件 目前Canal 主要支持了 MySQL 的 Binlog 解析 xff0c 解析完成后才利用 Canal Cl
  • T507 Ubuntu18.04 LXDE桌面汉化

    本文硬件平台采用飞凌T507开发板 xff0c 主要讲解Ubuntu图形桌面LXDE如何修改为中文界面 xff0c 本文使用的思路和方法仅供参考使用 xff0c 其它arm开发板虽然芯片不同 xff0c 但思路和方法有很多的共性 xff0c
  • 工作站和台式机的区别

    转自 xff1a 微点阅读 xff08 www weidianyuedu com xff09 微点阅读 范文大全 免费学习网站 工作站电脑非常高配 xff0c 那么它和台式机有什么区别呢 下面由小编给你做出详细的工作站和台式机区别介绍 希望
  • 分布式锁-简单入门

    状态不是很好 xff0c 记一下以前学过的分布式锁吧 样例简介 不谈大概念 xff0c 就是简单入门以及使用 为什么要用分布式锁呢 xff1f 假设我需要一个定时操作 xff0c 每天在某个点 xff0c 我要处理一批数据 xff0c 要先
  • 深度神经网络的成功应用,深度神经网络发展历程

    深度学习与神经网络有什么区别 深度学习与神经网络关系2017 01 10最近开始学习深度学习 xff0c 基本上都是zouxy09博主的文章 xff0c 写的蛮好 xff0c 很全面 xff0c 也会根据自己的思路 xff0c 做下删减 x
  • Ubuntu22.04启用root账户 2208120941

    Ubuntu22 04启用root账户 2208120941 Ubuntu是有root账户的 只是没有密码 所以无法切换 所以启用的方法是 管理员账户用 sudo passwd root 给 root 设置密码 span class tok
  • WARNING: CLOCK SKEW DETECTED. YOUR BUILD MAY BE INCOMPLETE

    make时遇到这个问题几次了 xff0c 就记录一下吧 WARNING CLOCK SKEW DETECTED YOUR BUILD MAY BE INCOMPLETE 警告 xff1a 检测到时钟偏移 您的构建可能不完整 xff08 来自
  • ROS学习(五):构建系统

    ROS的构建系统默认使用CMake xff08 Cross Platform Make xff09 xff0c 其构建环境在功能 包目录中的CMakeLists txt文件中描述 在ROS中 xff0c CMake被修改为适合于ROS的 c
  • ROS学习(七):三维可视化工具(RViz)

    RViz是ROS的三维可视化工具 它的主要目的是以三维方式显示ROS消息 xff0c 可以将 数据进行可视化表达 例如 xff0c 可以无需编程就能表达激光测距仪 xff08 LRF xff09 传感器中的传感 器到障碍物的距离 xff0c
  • 你想拥有开挂的人生吗?

    此前 xff0c 时任百度首席科学家的吴恩达 xff0c 在接受机器之心视频专访时曾提及 xff0c 我想对所有还在考虑自己的职业生涯的年轻人说一句 xff0c 我知道当你很年轻的时候 xff0c 有时候你无法确定该追求怎样的事业 我认为我
  • 【数据处理】R语言--data.table包使用总结

    data table包使用总结 R中的data table包提供了一个data frame的高级版本 xff0c 让你的程序做数据整型的运算速度大大的增加 data table已经在金融 xff0c 基因工程学等领域大放光彩 他尤其适合那些
  • R语言--异常值检测

    自编函数 boxplot 原理 span class hljs title outlier span span class hljs type IQR span lt function x multiple 61 span class hl
  • Python时间序列案例分析实战--奶牛产奶量预测

    Python时间序列实践之奶牛产奶量预测 CSDN xff1a http blog csdn net kicilove article 数据及完整示例代码下载 xff08 https github com zhaohuicici Time