文章目录

  • 1.数据格式
  • 2.连续预测
  • 3.滚动预测
  • 4.下一次更新-ARIMA

我也是初学者,话不多说,直接上代码,欢迎交流!!!

1.数据格式

2.连续预测

#!usr/bin/env python
# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@author: liujie
@software: PyCharm
@file: auto_arima.py
@time: 2020/11/7 21:27
"""
# 一次性预测多个值
'''
# 文档部分参考:http://alkaline-ml.com/pmdarima/modules/generated/pmdarima.arima.auto_arima.html?highlight=auto_arima
ARIMA是一个非常强大的时间序列预测模型,但是数据准备与参数调整过程非常耗时
Auto ARIMA让整个任务变得非常简单,舍去了序列平稳化,确定d值,创建ACF值和PACF图,确定p值和q值的过程Auto ARIMA的步骤:1.加载数据并进行数据处理,修改成时间索引2.预处理数据:输入的应该是单变量,因此需要删除其他列3.拟合Auto ARIMA,在单变量序列上拟合模型4.在验证集上进行预测5.计算RMSE:用验证集上的预测值和实际值检查RMSE值Auto-ARIMA通过进行差分测试,来确定差分d的顺序,然后在定义的start_p、max_p、start_q、max_q范围内拟合模型。
如果季节可选选项被启用,auto-ARIMA还会在进行Canova-Hansen测试以确定季节差分的最优顺序D后,寻找最优的P和Q超参数。
为了找到最好的模型,给定information_criterion auto-ARIMA优化,(‘aic’,‘aicc’,‘bic’,‘hqic’,‘oob’)
并返回ARIMA的最小值。
注意,由于平稳性问题,auto-ARIMA可能无法找到合适的收敛模型。如果是这种情况,将抛出一个ValueError,
建议在重新拟合之前使数据变稳定,或者选择一个新的顺序值范围。
非逐步的(也就是网格搜索)选择可能会很慢,特别是对于季节性数据。Hyndman和Khandakar(2008)中概述了逐步算法。
'''
import warnings
import pandas as pd
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
from datetime import datetime
from math import sqrt
from sklearn.metrics import mean_squared_error
from pmdarima.arima import auto_arimadef main():warnings.filterwarnings(action='ignore')# 第一步:加载数据# 定义将字符串时间转化成日期时间数组date_parser = lambda dates: datetime.strptime(dates, '%Y/%m/%d')data = pd.read_csv('../data/Data.csv', header=0, parse_dates=['month'], date_parser=date_parser, index_col='month')data.fillna(method='pad', inplace=True)# print(data.head(5))# print(data.index)# print(data.dtypes)# 第二步:预处理数据-由于所给数据本身就是单变量序列,并且没有空值,因此,可以不进行这一步处理# 将数据分成训练集与验证集val_size = 100train_size = 10 * val_sizetrain, val = data[-(train_size + val_size):-val_size + 1]['data'], data[-val_size:]['data']# plot the datafig = plt.figure()fig.add_subplot()plt.plot(train, 'r-', label='train_data')plt.plot(val, 'y-', label='val_data')plt.legend(loc='best')plt.show(block=False)# 第三步:buliding the model# 仅需要fit命令来拟合模型,而不必要选择p、d、q的组合,模型会生成AIC值和BIC值,以确定参数的最佳组合# AIC和 BIC是用于比较模型的评估器,这些值越低,模型就越好'''网址:http://alkaline-ml.com/pmdarima/modules/generated/pmdarima.arima.auto_arima.html?highlight=auto_arimaauto_arima部分参数解析(季节性参数未写):1.start_p:p的起始值,自回归(“AR”)模型的阶数(或滞后时间的数量),必须是正整数2.start_q:q的初始值,移动平均(MA)模型的阶数。必须是正整数。3.max_p:p的最大值,必须是大于或等于start_p的正整数。4.max_q:q的最大值,必须是一个大于start_q的正整数5.seasonal:是否适合季节性ARIMA。默认是正确的。注意,如果season为真,而m == 1,则season将设置为False。6.stationary :时间序列是否平稳,d是否为零。6.information_criterion:信息准则用于选择最佳的ARIMA模型。(‘aic’,‘bic’,‘hqic’,‘oob’)之一7.alpha:检验水平的检验显著性,默认0.058.test:如果stationary为假且d为None,用来检测平稳性的单位根检验的类型。默认为‘kpss’;可设置为adf9.n_jobs :网格搜索中并行拟合的模型数(逐步=False)。默认值是1,但是-1可以用来表示“尽可能多”。10.suppress_warnings:statsmodel中可能会抛出许多警告。如果suppress_warnings为真,那么来自ARIMA的所有警告都将被压制11.error_action:如果由于某种原因无法匹配ARIMA,则可以控制错误处理行为。(warn,raise,ignore,trace)12.max_d:d的最大值,即非季节差异的最大数量。必须是大于或等于d的正整数。13.trace:是否打印适合的状态。如果值为False,则不会打印任何调试信息。值为真会打印一些'''model = auto_arima(train, start_p=0, start_q=0, max_p=6, max_q=6, max_d=2,seasonal=True, test='adf',error_action='ignore',information_criterion='aic',njob=-1, trace=True, suppress_warnings=True)model.fit(train)# 第四步:在验证集上进行预测forecast = model.predict(n_periods=len(val))print(forecast)forecast = pd.DataFrame(forecast, index=val.index, columns=['prediction'])# calculate rmsermse = np.sqrt(mean_squared_error(val, forecast))print('RMSE : %.4f' % rmse)# plot predictionsfig = plt.figure()fig.add_subplot()plt.plot(train, 'r-', label='train')plt.plot(val, 'y-', label='val')plt.plot(forecast, 'b-', label='prediction')plt.legend(loc='best')plt.title('RMSE : %.4f' % rmse)plt.show(block=False)if __name__ == '__main__':main()

3.滚动预测

#!usr/bin/env python
# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@author: liujie
@software: PyCharm
@file: auto_arima.py
@time: 2020/11/8 14:29
"""
# 滚动预测-滚动窗口大小为120,预测个数为100
'''
# 文档部分参考:http://alkaline-ml.com/pmdarima/modules/generated/pmdarima.arima.auto_arima.html?highlight=auto_arima
ARIMA是一个非常强大的时间序列预测模型,但是数据准备与参数调整过程非常耗时
Auto ARIMA让整个任务变得非常简单,舍去了序列平稳化,确定d值,创建ACF值和PACF图,确定p值和q值的过程Auto ARIMA的步骤:1.加载数据并进行数据处理,修改成时间索引2.预处理数据:输入的应该是单变量,因此需要删除其他列3.拟合Auto ARIMA,在单变量序列上拟合模型4.在验证集上进行预测5.计算RMSE:用验证集上的预测值和实际值检查RMSE值Auto-ARIMA通过进行差分测试,来确定差分d的顺序,然后在定义的start_p、max_p、start_q、max_q范围内拟合模型。
如果季节可选选项被启用,auto-ARIMA还会在进行Canova-Hansen测试以确定季节差分的最优顺序D后,寻找最优的P和Q超参数。
为了找到最好的模型,给定information_criterion auto-ARIMA优化,(‘aic’,‘aicc’,‘bic’,‘hqic’,‘oob’)
并返回ARIMA的最小值。
注意,由于平稳性问题,auto-ARIMA可能无法找到合适的收敛模型。如果是这种情况,将抛出一个ValueError,
建议在重新拟合之前使数据变稳定,或者选择一个新的顺序值范围。
非逐步的(也就是网格搜索)选择可能会很慢,特别是对于季节性数据。Hyndman和Khandakar(2008)中概述了逐步算法。
'''
import os
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from datetime import datetime
from sklearn.metrics import mean_squared_error
from pmdarima.arima import auto_arima# 生成一个路径
def generpath(path):if not os.path.exists(path):os.makedirs(path)# 生成文件
def generfile(path,filename,m):if not os.path.exists(path+filename):order = [x for x in range(1,m+1)]dataframe = pd.DataFrame({"order":order})dataframe.to_csv(path+filename,sep=',')     # 将对象写入文件中# 生成数据
def datasave(savepath,saveindex,y_test_pre):sdata =pd.read_csv(savepath)sdata= pd.DataFrame(sdata)y_test_pre = np.array(y_test_pre)sdata[saveindex] = y_test_presdata.to_csv(savepath,index = False)def main():# 加载数据# 定义将字符串时间转化成日期时间数组date_parser = lambda dates: datetime.strptime(dates, '%Y/%m/%d')data = pd.read_csv('../data/Data.csv', header=0, parse_dates=['month'], date_parser=date_parser, index_col='month')data.fillna(method='pad', inplace=True)# print(data.head(5))# print(data.index)# print(data.dtypes)# 预处理数据-由于所给数据本身就是单变量序列,并且没有空值,因此,可以不进行这一步处理# 设置滚动预测的参数columns = 'data'ts = data[columns]test_size = 100  # 需要预测的个数rolling_size = 120  # 滚动窗口大小ps = 1  # 每次预测的个数horizon = 1  # 用来消除切片的影响pre = []  # 存放预测值test = ts[-test_size:]# 滚动预测for i in range(test_size):print(i)train = ts[-(rolling_size + test_size - i):-(test_size + horizon - i)]'''网址:http://alkaline-ml.com/pmdarima/modules/generated/pmdarima.arima.auto_arima.html?highlight=auto_arimaauto_arima部分参数解析:1.start_p:p的起始值,自回归(“AR”)模型的阶数(或滞后时间的数量),必须是正整数2.start_q:q的初始值,移动平均(MA)模型的阶数。必须是正整数。3.max_p:p的最大值,必须是大于或等于start_p的正整数。4.max_q:q的最大值,必须是一个大于start_q的正整数5.seasonal:是否适合季节性ARIMA。默认是正确的。注意,如果season为真,而m == 1,则season将设置为False。6.stationary :时间序列是否平稳,d是否为零。6.information_criterion:信息准则用于选择最佳的ARIMA模型。(‘aic’,‘bic’,‘hqic’,‘oob’)之一7.alpha:检验水平的检验显著性,默认0.058.test:如果stationary为假且d为None,用来检测平稳性的单位根检验的类型。默认为‘kpss’;可设置为adf9.n_jobs :网格搜索中并行拟合的模型数(逐步=False)。默认值是1,但是-1可以用来表示“尽可能多”。10.suppress_warnings:statsmodel中可能会抛出许多警告。如果suppress_warnings为真,那么来自ARIMA的所有警告都将被压制11.error_action:如果由于某种原因无法匹配ARIMA,则可以控制错误处理行为。(warn,raise,ignore,trace)12.max_d:d的最大值,即非季节差异的最大数量。必须是大于或等于d的正整数。13.trace:是否打印适合的状态。如果值为False,则不会打印任何调试信息。值为真会打印一些'''model = auto_arima(train, start_p=0, start_q=0, max_p=6, max_q=6, max_d=2,seasonal=True, test='adf',error_action='ignore',information_criterion='aic',njob=-1, suppress_warnings=True)model.fit(train)forecast = model.predict(n_periods=ps)pre.append(forecast[-1])predictions_ = pd.Series(pre,index=test.index)# print(predictions)# 计算RMSErmse = np.sqrt(mean_squared_error(predictions_, test))# 画图fig = plt.figure()fig.add_subplot()plt.plot(test, 'r-', label='test')plt.plot(predictions_, 'b-', label='predictions')plt.title('RMSE : %.4f' % rmse)plt.legend(loc='best')plt.show(block=False)predictions = np.array(pre).reshape(-1,1)test = np.array(test[:len(predictions)].values).reshape(-1,1)# 保存模型savepath = "predata/AUTO-ARIMA/"filename = "AUTO-ARIMA预测.csv"saveindex = columns + "_" + "day" + str(horizon)generpath(savepath)generfile(savepath, filename, len(predictions))datasave(savepath + filename, "y_true", test)datasave(savepath + filename, saveindex, predictions)if __name__ == '__main__':main()

4.下一次更新-ARIMA

敬请期待!!!


如果对您有帮助,麻烦点赞关注,这真的对我很重要!!!如果需要互关,请评论留言!


时间序列-Auto-ARIMA模型相关推荐

  1. 时间序列分析模型——ARIMA模型

    时间序列分析模型--ARIMA模型 一.研究目的 传统的经济计量方法是以经济理论为基础来描述变量关系的模型.但经济理论通常不足以对变量之间的动态联系提供一个严密的说明,而且内生变量既可以出现在方程的左 ...

  2. 时间序列 :ARIMA模型-原理

    时间序列是在时间点上形成的数值序列,时间序列预测是通过观察历史数据预测未来的值.ARIMA模型(Autoregressive Integrated Moving Average model)是时间序列 ...

  3. arima基本原理_时间序列 :ARIMA模型-原理

    时间序列是在时间点上形成的数值序列,时间序列预测是通过观察历史数据预测未来的值.ARIMA模型(Autoregressive Integrated Moving Average model)是时间序列 ...

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

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

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

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

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

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

  7. 【时间序列预测-ARIMA模型】

    转载 https://blog.csdn.net/qq_35495233/article/details/83514126 参考[概念]https://blog.csdn.net/TU_JCN/art ...

  8. 基于spss的多变量时间序列的ARIMA模型

    概述 数学建模的过程中必然会出现许多难以预料的问题,哪怕仅仅是一个温度预测模型也有莫大学问,譬如预测二十四小时内的温度变化,这多变量时间序列短期预测确实让我伤透了脑筋. 查阅了不少资料后,小弟我也勉勉 ...

  9. arima 预测模型_预测未来:学习使用Arima模型进行预测

    arima 预测模型 XTS对象 (XTS Objects) If you're not using XTS objects to perform your forecasting in R, the ...

  10. 数据分析技术:时间序列分析的AR/MA/ARMA/ARIMA模型体系

    基础准备 前面草堂君已经按照时间序列分析的教学顺序推送了以下文章,大家可以直接点击下方文章名称阅读回顾: 数据分析技术:时间序列分析:时间是把杀猪刀: SPSS分析技术:时间序列描述:磨刀不误砍柴工, ...

最新文章

  1. h5在线浏览word_怎样将PDF在线转换成Word?教你成为一个高手的方法
  2. python argparse_Python 命令行之旅:初探 argparse
  3. 杜教筛模板(P4213 【模板】杜教筛(Sum))
  4. [html] 如何去除标签<i>默认斜体?
  5. c语言实现函数给主函数中的指针赋值的方法
  6. matplotlib设置画布大小_PyTorch 49.matplotlib模块
  7. aspmysql发布_ASP如何使用MYSQL数据库
  8. Out-of-Process iframes (OOPIFs)
  9. opencv sobel算子的理解
  10. c11标准的c语言编译器,官宣:MSVC新加入C11和C17标准
  11. 展讯SC8810平台虚拟机分析在QEMU中模拟运行
  12. 仰睇天路,俯促鸣弦。神仪妩媚,举止详妍
  13. 使用 paddlehub的人物识别 对游戏人物识别 绘制方框
  14. 移动应用数据统计平台(之一)
  15. 星际争霸2-数据编辑器-菜鸟入门
  16. 博达:经营管理再升级,从选对CRM开始
  17. python 图像识别游戏_基于Python的浏览器图像识别
  18. 判断回文数的简便算法
  19. SweetAlert2
  20. Ceres求解直接法BA实现自动求导

热门文章

  1. 虚拟机备份克隆导致SQL SERVER 出现IO错误案例
  2. SetWindowLong 除去窗体标题栏
  3. vs2005开发Silverlight平台搭建
  4. 将文件保存到数据库中
  5. CentOS 安装Docker 并部署配置MySql
  6. Qt: 监听文件夹QFileSystemWatcher;
  7. Cookie 版购物车
  8. Android Stutio 3.0 - Gradle sync failed
  9. python对拍程序
  10. 日常邮件用语(一)网摘学习