需求:
构建ARIMA(p,d,q)模型首先根据时间序列的折线图对序列进行初步的平稳性判断,并采用ADF单位根对序列的平稳性进行检验,对非平稳的时间序列,进行差分处理,直至成为平稳序列,差分的次数即为模型阶数d。利用一阶差分后的新序列进行自相关和偏自相关分析,并绘制自相关系数图和偏自相关系数图,再基于AIC和BIC最小化原则进行自动筛选,最终判断出ARIMA(p,d,q)模型中的参数p、q,即得到最终的预测模型。
实战案例:
现有6月1日(8:00-18:00)的值,需要利用ARIMA模型预测19:00-20:00的的值。
导入模块

#Copyright (c) 2021 XiaoxiaoLiang. All rights reserved.
import warnings
warnings.filterwarnings("ignore")
import pandas as pd
import numpy as np
import matplotlib.pylab as plt
from matplotlib.pylab import style
style.use('ggplot')
from statsmodels.graphics.api import qqplot
pd.set_option('display.float_format', lambda x: '%.5f' % x)
np.set_printoptions(precision=5, suppress=True)
"""中文显示问题"""
plt.rcParams['font.family'] = ['sans-serif']
plt.rcParams['font.sans-serif'] = ['SimHei']

加载数据

data = pd.read_excel("D:\Testnumber\一天数据\站点.xlsx",index_col="日期",parse_dates=True)
data.head()
print(data)

绘制时序图、自相关图和偏自相关图

#时序图
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
data.plot()
print(data)
# plt.show()#自相关图
from statsmodels.graphics.tsaplots import plot_acf,plot_pacf
plot_acf(data).show()
plot_pacf(data).show()
# plt.show()

#平稳性检验、差分

#平稳性检验 其中PM2为列名
from statsmodels.tsa.stattools import adfuller as ADF
print( ADF(data[u'PM2']))
#返回值依次为adf、pvalue、usedlag、nobs、critical values、icbest、regresults、resstore#差分
diff1 = data.diff(1).dropna()
diff2= diff1.diff(1).dropna()
diff3= diff2.diff(1).dropna()
diff1.plot(color='red', title='diff 1', figsize=(10, 4))
diff2.plot(color='black', title='diff 2', figsize=(10, 4))
# diff3.plot(color='black', title='diff 3', figsize=(10, 4))
#对差分以后的值进行平稳性检验
print(ADF(diff1[u'PM2']))
print(ADF(diff2[u'PM2']))
#发现一阶差分更好,所以选取一阶差分,d=1#差分以后的时序图、自相关和偏自相关图
diff2.plot()  # 时序图
plot_acf(diff1).show()
plot_pacf(diff1).show()

确定ARIMA(p,d,q)模型的p q值,多次运行取AIC和BIC最小的时候的值

# 参数估计
from statsmodels.tsa.arima_model import ARIMA
model = ARIMA(data, order=(1,1,0))#导入ARIMA模型
result = model.fit(disp=-1)
print(result.summary())#模型检验 QQ图
resid = result.resid#残差
fig = plt.figure(figsize=(12,8))
ax = fig.add_subplot(111)
fig = qqplot(resid, line='q', ax=ax, fit=True)

预测并将预测值写入表格

# #最后画出时序图
pred = result.predict('2021/6/1 18:00:00', '2021/6/1 20:00:00',dynamic=True, typ='levels')
print (pred)# print(result.forecast(5))
x = range(8,18)
xticks_label = [f"{i}:00" for i in x]
plt.figure(figsize=(12, 28))
plt.xticks(rotation=45)
plt.plot(pred)
plt.plot(data.PM2)
# plt.show()#写入表格
writer = pd.ExcelWriter('D:\Testnumber\一天数据\PM2.5pre.xlsx')
pred.to_excel(writer)
writer.save()
writer.close()
plt.show()

关于foreast和predict的区别:
predict 可以对样本内和样本外的进行预测,结果是一样的。
举例说明:forecast(10),表示对未来10个点进行预测,但是可以用model.fittedvalues查看样本内点的拟合值;
而predict(start,end)里面的参数0表示样本内的第一个数,以此类推。
如果想要预测样本外的数,需要将start设置为len(data)+1,即数据长度+1,才表示预测样本外的第一个数字。
而 forecast函数,是对样本外的数据进行预测。
但是这两个函数的预测结果是一样的。

ADF结果如何查看参考了这篇博客:
ADF结果

参考博客:
ARIMA模型

一切文章皆为原创,转载请注明来源@小小梁的实验室

构建ARIMA模型对数据进行预测的案例(尺度5min)相关推荐

  1. 时序预测构建ARIMA模型时报错:NotImplementedError: statsmodels.tsa.arima_model.ARMA and statsmodels.tsa.arima_

    在我时序预测构建ARIMA模型时出现报错: NotImplementedError: statsmodels.tsa.arima_model.ARMA and statsmodels.tsa.arim ...

  2. Python通过ARIMA模型进行时间序列分析预测

    ARIMA模型预测 时间序列分析预测就是在已有的和时间有关的数据序列的基础上构建其数据模型并预测其未来的数据,例如航空公司的一年内每日乘客数量.某个地区的人流量,这些数据往往具有周期性的规律.如下图所 ...

  3. ML:教你聚类并构建学习模型处理数据(附数据集)

    翻译: 王雨桐 校对: 顾佳妮 本文约1500字,建议阅读6分钟. 本文以Ames住房数据集为例,对数据进行聚类,并构建回归模型. 摘要 本文将根据41个描述性分类特征的维度,运用无监督主成分分析(P ...

  4. 如何MATLAB实现用ARIMA模型输出参数实施预测

    正文 自回归(AR)模型.移动平均(MA)模型.自回归移动平均(ARMA)和自回归差分移动平均(ARIMA)模型是时间序列模型,它们主要是使用历史时间步的观测值作为回归方程的输入,以预测下一时间步的值 ...

  5. 利用ARIMA模型对房价进行预测

    所有代码与解析 ARIMA模型我理解也不是太好,建议大家学习的话去B站搜一下ARIMA找个视频看就可以了,我这个代码在jupyter是跑通的,如果有问题可以按照方格放入jupyter跑 #!/usr/ ...

  6. ARIMA模型的建模和预测

    目录 基本过程: 1.Green 函数递推公式 2.ARIMA模型的预测 例题 小结 基本过程: 1.Green 函数递推公式 ARIMA模型 也可写成 确定 设 则可得Green函数递推公式 2.A ...

  7. Eviews7.2模型建模与预测时间序列分析(ARIMA 模型的建立与预测)

    1.模型识别 (1)数据录入 打开 Eviews 软件,选择―File菜单中的―New–Workfile|选项,在"Workfile structure type" 栏选择&quo ...

  8. 基于指数平滑模型与ARIMA模型在苹果股价的预测应用

    一.项目背景 股票投资已经随着人们生活水平的逐步提高而变得普遍,更多的人开始逐渐关注并参与到股票投资市场中来.股票具有高收益的同时也伴随着较高的风险,我们知道,股票价格的变动受很多因素的影响,因此对于 ...

  9. 数据挖掘实战(3)——时间序列预测ARIMA模型(附踩坑日志)

    文章目录 1 导包 2 数据准备 3 可视化 4 构建ARIMA模型 5 预测 6 踩坑日志 1 导包 import numpy as np import matplotlib.pyplot as p ...

最新文章

  1. 2014年下半年信息系统项目管理师上午试题试题与答案 54
  2. 继承的综合运用《Point类派生出Circle类而且进行各种操作》
  3. 不是内部或外部命令也不是可运行的程序?
  4. 切换图片 ImageSwitcher
  5. PaddleDetection的学习笔记
  6. 【php】使用phpdbg来调试php程序
  7. EF安装和更新数据库
  8. SpringBoot 中解决跨域请求
  9. iosmask_iOS Mask属性的详细介绍及应用实例_IOS_脚本之家
  10. 触摸式计算机屏幕,触控屏笔记本好不好 触摸屏笔记本优缺点分析【详细介绍】...
  11. Navicat 恢复mysql psc 备份文件
  12. Ubuntu查看当前IP地址
  13. 微信小店二次开发_怎么吧微信小店装修的更好看
  14. APP被应用商店下架了怎么办?
  15. skimage.io模块读取图片
  16. 数据库第八周实验——第五章课后题
  17. ppp项目是什么意思?ppp模式是什么意思?PPP问题大全
  18. linux内核源码分析之per-CPU
  19. 仿射函数的仿射函数还是仿射函数
  20. 长安大学计算机科学与技术(交通信息工程)课程专业课,浙江大学软件学院公布考试大纲!又有多所学校公布专业目录...

热门文章

  1. Python实现企业微信接收消息之API验证部分
  2. 拿到企鹅offer的学弟来报喜了!
  3. 糟糕的软件设计:幻想出来的问题
  4. typedef 与 typename 的用法
  5. 生成虚拟摄像头软件有哪些
  6. C# 使用微软的Visual Studio International Pack 类库提取汉字拼音首字母 转
  7. moldflow2015安装教程
  8. C语言中指针初始化和常规运算
  9. 【MOT】GHOST: Simple Cues Lead to a Strong Multi-Object Tracker
  10. 芬兰高中免费留学是真的吗?芬兰留学免费项目介绍