ARIMA模型(英语:Autoregressive Integrated Moving Average model),差分整合移动平均自回归模型,又称整合移动平均自回归模型(移动也可称作滑动),是时间序列预测分析方法之一。ARIMA(p,d,q)中,AR是“自回归”,p为自回归项数;MA为“滑动平均”,q为滑动平均项数,d为使之成为平稳序列所做的差分次数(阶数)。“差分”一词虽未出现在ARIMA的英文名称中,却是关键步骤。

statsmodels.tsa.arima_model包中有ARIMA集成好的模型,我们只需要输入p,d,q即可。

数据为纽约市的交通进出情况(一个txt进,一个txt出),然后已知一年365天*24小时的数据,想用ARIMA来预测,并计算MAE和RMSE来评估预测准确性。

我的data_prepare()函数是用来拼接两个文件夹里的数据的,一般只要读取一个文件夹的数据即可,返回是一个大矩阵。

其中取了数据集的前66%做训练集,后34%做测试集,与预测的结果做对比。

res()函数是输入测试矩阵和预测矩阵,计算MAE和RMSE来评估预测准确性的。

main中写的三个数组是打算遍历p,d,q找到最优值的,但是我电脑跑的太慢了,最后直接取了0,1,0。

import warnings
import pandas as pd
import numpy as np
from sklearn.metrics import mean_squared_error
from sklearn.metrics import mean_absolute_error
from statsmodels.tsa.arima_model import ARIMAdef data_prepare():matrix = []file1 = "tensor_year_hour_lease.txt"file2 = "tensor_year_hour_return.txt"f1 = open(file1, "r")f2 = open(file2, "r")matrix1 = []lines1 = f1.readlines()for line in lines1:arr = line.split(",")arr = np.array(arr, dtype=int)matrix1.append(arr)f1.close()matrix2 = []lines2 = f2.readlines()for line in lines2:arr = line.split(",")arr = np.array(arr, dtype=int)matrix2.append(arr)f2.close()matrix = np.hstack((matrix1, matrix2))  # 拼接成功 输出(8760*188)return matrixdef evaluate_arima_model(X, arima_order):# 数据集的前66%作为训练集,后34%作为测试集train_size = int(len(X) * 0.66)# print("train_size",train_size)train, test = X[0:train_size], X[train_size:]history = [x for x in train]# make predictionspredictions = list()for t in range(len(test)):model = ARIMA(history, order=arima_order)model_fit = model.fit(disp=0)yhat = model_fit.forecast()[0]predictions.append(yhat)history.append(test[t])predictions = np.array(predictions)# print(predictions.shape)return predictionsdef res(test, predictions):mae = mean_absolute_error(test, predictions)mse = mean_squared_error(test, predictions)rmse = mse ** 0.5return mae, rmsedef evaluate_models(p_values, d_values, q_values):matrix = data_prepare()train_size = int(len(matrix) * 0.66)test = matrix[train_size:]best_mae, best_rmse, best_cfg = float("inf"), float("inf"), Nonefor p in p_values:for d in d_values:for q in q_values:pre = np.zeros((len(matrix)-train_size, 0))for i in range(0, 188):  # 188是列数dataset = matrix[:, i]dataset = dataset.astype('float32')order = (p, d, q)predictions = evaluate_arima_model(dataset, order)pre = np.hstack((pre, predictions))  # 每一列做一次预测,然后拼接成矩阵print("p, d, q, i:", p, d, q, i)# print(pre.shape)# print(pre)mae, rmse = res(test, pre)if mae < best_mae:best_mae, best_rmse, best_cfg = mae, rmse, orderprint('ARIMA%s MAE=%.3f RMSE=%.3f' % (order, mae, rmse))print('Best ARIMA%s MAE=%.3f RMSE=%.3f' % (best_cfg, best_mae, best_rmse))if __name__ == '__main__':p_values = [0, 1, 2, 4, 6, 8, 10]d_values = range(0, 3)q_values = range(1, 3)warnings.filterwarnings("ignore")evaluate_models(p_values, d_values, q_values)

时间序列模型 ARIMA相关推荐

  1. python时间序列模型有哪些_时间序列模型(ARIMA)

    时间序列简介 时间序列 是指将同一统计指标的数值按其先后发生的时间顺序排列而成的数列.时间序列分析的主要目的是根据已有的历史数据对未来进行预测. 常用的时间序列模型 常用的时间序列模型有四种:自回归模 ...

  2. 时间序列模型--ARIMA模型

    1. 数据平稳性与差分法 平稳性: 平稳性就是要求经由样本时间序列所得到的拟合曲线,在未来的一段时间内仍然能顺着现有的形态"惯性"的延续下去 平稳性要求,序列的方差和均值不发生明显 ...

  3. 时间序列模型-ARIMA

    一.ARIMA模型基本概念 1.1 自回归模型(AR) 描述当前值与历史值之间的关系,用变量自身的历史数据对自身进行预测: 自回归模型必须满足平稳性的要求:(何为平稳性:见时间序列数据分析基本概念) ...

  4. 理论加实践,终于把时间序列预测ARIMA模型讲明白了

    上篇我们一起学习了一些关于时间序列预测的知识.而本文将通过一段时间内电力负荷波动的数据集来实战演示完整的ARIMA模型的建模及参数选择过程,其中包括数据准备.随机性.稳定性检验.本文旨在实践中学习,在 ...

  5. 时间序列模型(ARIMA模型)

    时间序列分析? 时间序列,就是按时间顺序排列的,随时间变化的数据序列. 生活中各领域各行业太多时间序列的数据了,销售额,顾客数,访问量,股价,油价,GDP,气温... 常用的时间序列模型 常用的时间序 ...

  6. CSDN ARIMA R语言_R语言时间序列:ARIMA / GARCH模型的交易策略在外汇市场预测应用...

    原文链接: http://tecdat.cn/?p=17622​tecdat.cn 最近,我们继续对时间序列建模进行探索,研究时间序列模型的自回归和条件异方差族.我们想了解自回归移动平均值(ARIMA ...

  7. 时间序列之ARIMA模型原理

    ARIMA模型 时间序列模型的意义: 在经典的回归模型中,主要是通过回归分析来建立不同变量之间的函数关系(因果关系),以考察事物之间的联系.本案例要讨论如何利用时间序列数据本身建立模型,以研究事物发展 ...

  8. 时间序列模型步骤教程(ARIMA)

    目录 0.前言 一.数据准备&探索 1.平稳性 1.1 平稳性检验 1.2 数据处理(平滑.变换.差分.分解) 1.2.1 对数变换 1.2.2 平滑法(移动平均&指数平均) 1.2. ...

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

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

最新文章

  1. ADAS系统长篇综述(下)
  2. linux系统是否支持gpt分区,Linux下进行GPT分区
  3. Matlab | Matlab从入门到放弃(6)——数组
  4. 上传项目到gitHub,上传报错和删除gitHub上的项目
  5. 50种方法巧妙优化你的SQLServer数据库(转)
  6. qdir 自动创建多级目录_Qt 判断文件或文件夹是否存在及创建文件夹
  7. testng 定时构建_10自动化测试_持续集成篇
  8. C#实现二维码功能,winform 以及 asp.net均可以用
  9. r语言 不同长度 list 转 dataframe_解决R效率问题—parallel多线程启动
  10. Faster RCNN好文(转)
  11. webservice helloworld案例
  12. 令人眼前一亮的下拉式终端 Tilda Guake
  13. mongodb sharding maintenance (分片维护1)
  14. 如何经营好(开好)一家淘宝店铺
  15. Paraview:Python Calculator Filter
  16. Lync 2013安装要点
  17. linux文件夹可视化工具,4款简单实用的的服务器文件管理工具推荐
  18. 如何用七牛云上传音乐生成外链
  19. 云服务服务器免费使用
  20. 实战之jvm-sandbox动态加载插件实现

热门文章

  1. IP地址冲突查找办法
  2. 网站莫名跳转,从百度谈什么是网站劫持?百度快照劫持怎么解决
  3. 微信小程序—选择地理位置并显示
  4. 数据库管理工具V1.0
  5. 局域访问本地项目报403,拒绝别人的访问记录
  6. ffmpeg rtmp 花屏_FFmpeg代码架构
  7. 【转】如何将FLAC格式转为MP3格式
  8. 【软件测试】大学毕业后顶着压力,巧合的开启了我人生的新篇章......
  9. rust核电站要什么卡_召唤与合成升级需要什么卡 卡片资源使用攻略
  10. OpenGL-案例-矩阵压栈绘制