文章目录
我也是初学者,话不多说,直接上代码,欢迎交流!!!
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_arima
def 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 = 100
train_size = 10 * val_size
train, val = data[-(train_size + val_size):-val_size + 1]['data'], data[-val_size:]['data']
# plot the data
fig = plt.figure()
fig.add_subplot()
plt.plot(train, 'r-', label='train_data')
plt.plot(val, 'y-'