时间序列-Auto-ARIMA模型

该博客介绍了如何使用Auto-ARIMA模型进行时间序列分析,包括数据格式的处理、连续预测、滚动预测的步骤,并预告将深入探讨ARIMA模型。作者呼吁读者点赞关注并提供互动支持。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


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

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-'
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值