返回顶部
首页 > 资讯 > 后端开发 > Python >使用Python构造ARIMA模型
  • 855
分享到

使用Python构造ARIMA模型

pythonpandasnumpyipythonconda线性回归 2023-09-25 05:09:13 855人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

简介 基于统计的方法是经典的时间序列预测模型,也是财务时间序列预测的主要方法。他们假设时间序列是由随机冲击的线性集合产生的。一种有代表性的方法是ARMA模型,它是AR和MA模型的组合。它被扩展到非平稳时间序列预测,称为自回归综合移动平均(A

简介

基于统计的方法是经典的时间序列预测模型,也是财务时间序列预测的主要方法。他们假设时间序列是由随机冲击的线性集合产生的。一种有代表性的方法是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 pdimport numpy as npimport matplotlib.pyplot as pltfrom statsmodels.tsa.stattools import adfullerfrom statsmodels.tsa.arima.model import ARIMAfrom sklearn.preprocessing import MinMaxScalerfrom statsmodels.graphics.tsaplots import plot_acf, plot_pacffrom 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并打印预测对比图

# 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

来源地址:https://blog.csdn.net/weixin_54634208/article/details/131511359

--结束END--

本文标题: 使用Python构造ARIMA模型

本文链接: https://lsjlt.com/news/417189.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 使用Python构造ARIMA模型
    简介 基于统计的方法是经典的时间序列预测模型,也是财务时间序列预测的主要方法。他们假设时间序列是由随机冲击的线性集合产生的。一种有代表性的方法是ARMA模型,它是AR和MA模型的组合。它被扩展到非平稳时间序列预测,称为自回归综合移动平均(A...
    99+
    2023-09-25
    python pandas numpy ipython conda 线性回归
  • ARIMA(p,d,q)模型原理及其实现 --------python
     1.简介 ARIMA模型(Autoregressive Integrated Moving Average model),差分整合移动平均自回归模型,又称整合移动平均自回归模型,时间序列预测分析方法之一。ARIMA(p,d,q)中,AR是...
    99+
    2023-09-11
    python 机器学习
  • Python时间序列分析--ARIMA模型实战案例
    Python时间序列分析–ARIMA模型实战案例,利用ARIMA模型对时间序列进行分析的经典案例(详细代码) **本文将介绍使用Python来完成时间序列分析ARIMA模型的完整步骤与流程,绘制时序图...
    99+
    2023-09-10
    python 机器学习 人工智能
  • 组合预测模型 | ARIMA-LSTM时间序列预测(Python)
    组合预测模型 | ARIMA-LSTM时间序列预测(Python) 目录 组合预测模型 | ARIMA-LSTM时间序列预测(Python)预测结果基本介绍程序设计参考资料 预测...
    99+
    2023-08-31
    python lstm 机器学习 ARIMA-LSTM 时间序列预测
  • Python 3中使用ARIMA进行时间
    最好的做法是,从笔记本电脑的顶部导入需要的库: import warnings import itertools import pandas as pd import numpy as np import statsmodels.api...
    99+
    2023-01-31
    时间 Python ARIMA
  • 如何使用TensorFlow神经网络构造线性回归模型
    小编给大家分享一下如何使用TensorFlow神经网络构造线性回归模型,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!先制作一些数据:import num...
    99+
    2023-06-25
  • Python统计学10——时间序列分析自回归模型(ARIMA)
    时间序列也是传统统计学很重要的一个领域,现代经济类的数据基本都是时间序列数据。时间序列最经典的模型自然是ARIMA模型,全称是自回归积分滑动平均模型(Autoregressive Integrated Moving Average Mode...
    99+
    2023-10-04
    python 回归 数据分析 pandas 机器学习
  • Python数据分析之使用scikit-learn构建模型
    一、使用sklearn转换器处理 sklearn提供了model_selection模型选择模块、preprocessing数据预处理模块、decompisition特征分...
    99+
    2024-04-02
  • JavaScript构造函数和原型使用实例分析
    本文小编为大家详细介绍“JavaScript构造函数和原型使用实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“JavaScript构造函数和原型使用实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1...
    99+
    2023-07-04
  • 什么是java构造器?怎么使用构造器?
    1、怎么使用构造方法通过一个类创建一个对象,这个过程叫做实例化。实例化就是通过调用构造方法(又叫做构造器)实现的。1.1、什么是构造方法方法名和类名一样(包括大小写)没有返回类型实例化一个对象的时候,必然调用构造方法public class...
    99+
    2016-02-13
    java教程 构造器
  • Java结构型设计模式中建造者模式示例详解
    目录建造者模式概述角色优缺点应用场景基本使用创建产品类创建建造者类使用链式写法创建产品类与建造者类使用建造者模式 概述 建造者模式(Builder Pattern)属于创建型模式。 ...
    99+
    2024-04-02
  • Python设计模式结构型代理模式
    目录一、代理模式二、应用场景三、代码示例一、代理模式 代理模式,为其他对象提供一种代理,以此控制一个对象的访问方式。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象...
    99+
    2024-04-02
  • Python设计模式结构型组合模式
    目录一、组合模式二、应用场景三、代码示例一、组合模式 组合,将多个对象组合成为一个树状结构,来表示业务逻辑上的层次。组合模式使得用户对单个对象和组合对象的使用具有一致性。 比如,描述...
    99+
    2024-04-02
  • Python设计模式结构型享元模式
    目录一、享元模式二、应用场景三、代码示例一、享元模式 享元,可理解为 Python 中的元类、最小粒度的类,系统中存在大量的相似对象时,可以选择享元模式提高资源利用率。 享元具有两种...
    99+
    2024-04-02
  • Python 设计模式中的创建型建造者模式
    目录一、建造者模式二、代码示例一、建造者模式 建造者模式,顾名思义类似于建筑工人,他们按照有条理的施工顺序(e.g. 打桩 => 浇筑框架 => 砌墙 => 装修)...
    99+
    2024-04-02
  • 详解Python手写数字识别模型的构建与使用
    目录一:手写数字模型构建与保存1 加载数据集2 特征数据 标签数据3 训练集 测试集4 数据流图 输入层5 隐藏层6 损失函数7 梯度下降算法8 输出损失值 9 模型 保存...
    99+
    2022-12-22
    Python手写数字识别 Python手写数字识别模型 Python 数字 识别
  • typescript实用程序类型怎么构造
    本文小编为大家详细介绍“typescript实用程序类型怎么构造”,内容详细,步骤清晰,细节处理妥当,希望这篇“typescript实用程序类型怎么构造”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,...
    99+
    2024-04-02
  • 怎么用Python构造决策树
    本篇内容介绍了“怎么用Python构造决策树”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!起步本章介绍如何不利用第三方库,仅用python自...
    99+
    2023-06-17
  • python使用邻接矩阵构造图代码示例
    问题 如何使用list构造图 邻接矩阵的方式 Python代码示例 # !/usr/bin/env python # -*-encoding: utf-8-*- # author:LiYanwei #...
    99+
    2022-06-04
    矩阵 示例 代码
  • python如何不使用循环构造一个列表
    这篇文章将为大家详细讲解有关python如何不使用循环构造一个列表,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。不使用循环构造一个列表import itertoolstest= [[-...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作