使用Python构造ARIMA模型

这篇具有很好参考价值的文章主要介绍了使用Python构造ARIMA模型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简介

基于统计的方法是经典的时间序列预测模型,也是财务时间序列预测的主要方法。他们假设时间序列是由随机冲击的线性集合产生的。一种有代表性的方法是ARMA模型,它是AR和MA模型的组合。它被扩展到非平稳时间序列预测,称为自回归综合移动平均(ARIMA),它结合了差分技术来消除数据中趋势分量的影响,并且由于其巨大的灵活性而成为最受欢迎的线性模型之一。然而,这种方法最初仅限于线性单变量时间序列,并且不能很好地适应多变量设置。为了应对多变量时间序列预测,ARIMA的扩展模型VARMA被提出,该模型通过允许多个进化变量来推广基于单变量ARIMA的模型。

ARIMA模型有三个参数:p、d和q。参数p是模型中滞后观测的数量,也称为滞后阶数。参数d是原始观测值被差分的次数;也称为差异程度。参数q是移动平均窗口的大小,也称为移动平均的阶数。

步骤

  1. 确定平稳性:ARIMA模型是一种统计模型,用于基于历史数据中存在的自相关来预测未来值。它假设未来趋势将遵循与历史趋势相同的模式,并要求时间序列是固定的。非平稳性会导致预测误差和参数估计不稳定,从而降低预测结果的可靠性。因此,确定时间序列是否稳定非常重要。
  2. 数据预处理:应用ADF测试来测试原始数据的平稳性。如果测试结果表明数据是非平稳的,则将对数据进行差分,直到达到平稳状态。
  3. 数据规范化:数据规范化是一种预处理技术,用于将数据调整到一个通用的规模或范围。当处理表现出显著数值幅度的数据时,有必要对数据进行归一化,以促进有效的训练。我在Python中使用了MinMaxScaler函数,并在0和1之间分别转换了每个特性。
  4. 确定参数:使用AIC准则以及观察自相关图(ACF)和偏自相关图(PACF)。

代码构建

首先导入需要用到的Python包:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.stattools import adfuller
from statsmodels.tsa.arima.model import ARIMA
from sklearn.preprocessing import MinMaxScaler
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
from statsmodels.stats.diagnostic import acorr_ljungbox

然后读取.csv文件的时序数据,这里使用了英国的GDP数据

    # 1. 读取csv时序数据
    data = pd.read_csv('datasets/UK_GDP.csv')[["GDP"]]
    data_origin = data.copy()

接着使用adf测试判断稳定性

# 2. 使用adf测试数据是否稳定,如果不稳定进行一阶差分,并打印差分前和差分后的数据图。
    result = adfuller(data)
    print("Test Statistic: %f" % result[0])
    print("p-value: %f" % result[1])
    print("No. of lags used: %f" % result[2])
    print("Number of observations used: %f" % result[3])
    print("critical value 1%%: %f" % result[4]["1%"])
    print("critical value 5%%: %f" % result[4]["5%"])
    print("critical value 10%%: %f" % result[4]["10%"])
    if result[1] > 0.05:
        diff_data = data.diff().dropna()
        plt.figure()
        plt.plot(data, label='Original')
        plt.plot(diff_data, label='Differenced')
        plt.legend()
        data = diff_data
    else:
        plt.figure()
        plt.plot(data, label='Original')
        plt.legend()

然后对处理后的数据进行归一化

    # 3. 对处理后数据进行归一化,打印归一化后的图。
    scaler = MinMaxScaler()
    scaled_data = pd.DataFrame(scaler.fit_transform(data), columns=data.columns, index=data.index)
    plt.figure()
    plt.plot(scaled_data, label='Scaled')
    plt.legend()

然后通过AIC确定参数并打印ACF和PACF图

# 4. 通过AIC确定ARIMA参数,打印原始数据和差分后数据的自相关系数图和偏自相关系数图,打印确定参数后的残差图。
    aic_values = {}
    for p in range(6):
        for q in range(6):
            try:
                model = ARIMA(scaled_data, order=(p, 1, q))
                result = model.fit()
                aic_values[(p, 1, q)] = result.aic
            except:
                continue

    min_aic = min(aic_values, key=aic_values.get)
    print("min aci:", min_aic)
    model = ARIMA(scaled_data, order=min_aic)
    result = model.fit()

    fig, axes = plt.subplots(3, 1, figsize=(10, 8))
    plot_acf(scaled_data, ax=axes[0])
    plot_pacf(scaled_data, ax=axes[1])
    residuals = pd.DataFrame(result.resid)
    residuals.plot(ax=axes[2])
    plt.title('Residuals')
    plt.show()

最后,计算MAPE和RMSE并打印预测对比图文章来源地址https://www.toymoban.com/news/detail-724712.html

# 5. 使用ARIMA模型进行预测,打印预测值和真实值的对比图,计算模型RMSE和MAPE指标。
    train_size = len(scaled_data)-3
    train_data, test_data = scaled_data[:train_size], scaled_data[train_size:]
    model = ARIMA(train_data, order=min_aic)
    result = model.fit()
    predictions = result.forecast(steps=len(test_data))
    predictions = scaler.inverse_transform(predictions.values.reshape(-1, 1)).flatten()
    actual = scaler.inverse_transform(test_data["GDP"].values.reshape(-1, 1)).flatten()

    actual = np.array(data[-3:].cumsum() + data_origin.values[127])
    predictions = predictions.cumsum() + data_origin.values[127]

    plt.figure()
    plt.plot(actual, label='Actual')
    plt.plot(predictions, label='Predicted')
    plt.legend()
    plt.show()

    rmse = np.sqrt(mean_squared_error(actual, predictions))
    mape = mean_absolute_percentage_error(actual, predictions)
    print(f"RMSE: {rmse}")
    print(f"MAPE: {mape}")
    return rmse, mape, actual, predictions

到了这里,关于使用Python构造ARIMA模型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 用Python语言进行时间序列ARIMA模型分析

    用Python语言进行时间序列ARIMA模型分析

    应用时间序列 时间序列分析是一种重要的数据分析方法,应用广泛。以下列举了几个时间序列分析的应用场景: 1.经济预测:时间序列分析可以用来分析经济数据,预测未来经济趋势和走向。例如,利用历史股市数据和经济指标进行时间序列分析,可以预测未来股市的走向。

    2024年02月03日
    浏览(8)
  • Python中的ARIMA模型、SARIMA模型和SARIMAX模型对时间序列预测

    Python中的ARIMA模型、SARIMA模型和SARIMAX模型对时间序列预测

    最近我们被客户要求撰写关于时间序列预测的研究报告,包括一些图形和统计输出。  使用ARIMA模型,您可以使用序列过去的值预测时间序列。在本文中,我们从头开始构建了一个最佳ARIMA模型,并将其扩展到Seasonal ARIMA(SARIMA)和SARIMAX模型。 时间序列是在定期时间间隔内记

    2024年02月04日
    浏览(10)
  • 组合预测模型 | ARIMA-LSTM时间序列预测(Python)

    组合预测模型 | ARIMA-LSTM时间序列预测(Python)

    预测结果 基本介绍 ARIMA-LSTM时间序列预测(Python完整源码和数据) ARIMA-LSTM时间序列预测,AQI预测(Python完整源码和数据) 组合模型预测 ARIMA和LSTM都是用于时间序列预测的经典模型。ARIMA是一种基于差分和自回归移动平均模型的统计方法,它可以用来捕捉时间序列中的趋势和季

    2024年02月16日
    浏览(10)
  • 使用Google大模型Bard(PaLM)理解时间序列预测模型ARIMA

    Google Bard的新模型使用的是PaLM,暂时不支持中文,本次测试使用Bard模型来辅助理解一个时间序列预测模型ARIMA。 A: ARIMA stands for Autoregressive Integrated Moving Average. It is a statistical model that is used to forecast time series data. ARIMA models are based on the idea that the current value of a time series can be

    2024年02月08日
    浏览(9)
  • 使用ARIMA进行时间序列预测|就代码而言

    model.fit().predict()函数参数的意思 model.fit() 函数是用来拟合ARIMA模型的,它会根据提供的时间序列数据来估计模型的参数。在这个函数中,没有需要指定额外的参数。 model.predict() 函数是用来进行时间序列的预测的,它可以在拟合后的模型上进行预测。在进行预测时,需要指定

    2024年02月16日
    浏览(9)
  • Python使用pytorch深度学习框架构造Transformer神经网络模型预测红酒分类例子

    Python使用pytorch深度学习框架构造Transformer神经网络模型预测红酒分类例子

    经典的红酒分类数据集是指UCI机器学习库中的Wine数据集。该数据集包含178个样本,每个样本有13个特征,可以用于分类任务。 具体每个字段的含义如下: alcohol:酒精含量百分比 malic_acid:苹果酸含量(克/升) ash:灰分含量(克/升) alcalinity_of_ash:灰分碱度(以mEq/L为单位)

    2024年02月02日
    浏览(9)
  • 【Python数据分析】实践编写篇3:在Python中使用三阶指数平滑模型对金融数据集进行拟合与预测

    【Python数据分析】实践编写篇3:在Python中使用三阶指数平滑模型对金融数据集进行拟合与预测

    目录 一、前期准备 二、数据来源与样式  三、数据的预处理 (一)表格处理 (二)数据导入 (三)数据处理  四、模型构建(指数平滑) (一)数据作图 (二)观察季节性与趋势 (三)一阶指数平滑 (四)二阶指数平滑 (五)三阶指数平滑 (六)均方误(MSE)比较  

    2024年02月17日
    浏览(16)
  • 【ARIMA-LSTM】合差分自回归移动平均方法-长短期记忆神经网络研究(Python代码实现)

    【ARIMA-LSTM】合差分自回归移动平均方法-长短期记忆神经网络研究(Python代码实现)

      💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 1.1 ARIMA模型 1.2 LSTM 模型 📚2 运行结果 🎉3 参考文献

    2024年02月10日
    浏览(11)
  • python使用ARIMA进行时间序列的预测(基础教程)

    python使用ARIMA进行时间序列的预测(基础教程)

    时间序列就是以时间为索引的数据,比如下面这种形式 数据链接:https://pan.baidu.com/s/1KHmCbk9ygIeRHn97oeZVMg 提取码:s0k5 python使用ARIMA建模,主要是使用statsmodels库 首先是建模流程,如果不是太明白不用担心,下面会详细的介绍这些过程 首先要注意一点,ARIMA适用于 短期 单变量

    2024年01月17日
    浏览(11)
  • 时序预测 | Python实现ARIMA-LSTM差分自回归移动平均模型结合长短期记忆神经网络时间序列预测

    时序预测 | Python实现ARIMA-LSTM差分自回归移动平均模型结合长短期记忆神经网络时间序列预测

    预测效果 基本介绍 时序预测 | Python实现ARIMA-LSTM差分自回归移动平均模型结合长短期记忆神经网络时间序列预测 直接替换数据即可用 适合新手小白 附赠案例数据 可直接运行 程序设计 完整程序和数据下载方式私信博主回复: Python实现ARIMA-LSTM差分自回归移动平均模型结合长

    2024年02月07日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包