ARIMA模型:Python实现

ARIMA模型:Python实现

自回归移动平均模型(ARIMA)是一种经典的时间序列分析和预测方法。前期已介绍了ARIMA的概念和公式,本文将介绍ARIMA模型的理论基础,并提供详细的Python代码实现,帮助读者了解如何应用ARIMA模型进行时间序列数据的建模和预测。

ARIMA模型简介

ARIMA模型包括自回归(AR)、差分(I)和移动平均(MA)三个部分,因此常用记法为ARIMA(p, d, q),其中:

  • p:自回归部分的阶数(AR阶数)。
  • d:差分操作的次数。
  • q:移动平均部分的阶数(MA阶数)。

ARIMA模型的基本思想是通过对时间序列进行差分操作,使其变为平稳序列,然后利用自回归和移动平均的组合来建模。

ARIMA模型代码实现步骤

步骤1:导入必要的库

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.arima.model import ARIMA

步骤2:加载时间序列数据

# 读取时间序列数据(示例数据)
data = pd.read_csv('your_time_series_data.csv', parse_dates=['date_column'], index_col='date_column')

步骤3:可视化原始时间序列

# 绘制原始时间序列图
plt.figure(figsize=(10, 6))
plt.plot(data, label='Original Time Series')
plt.title('Original Time Series Data')
plt.xlabel('Date')
plt.ylabel('Value')
plt.legend()
plt.show()

步骤4:差分操作,使序列平稳

# 进行差分操作
differenced_data = data.diff().dropna()

步骤5:确定ARIMA模型的阶数

# 利用ACF和PACF图选择合适的p和q值
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf

# 绘制ACF图
plot_acf(differenced_data)
plt.title('Autocorrelation Function (ACF)')
plt.show()

# 绘制PACF图
plot_pacf(differenced_data)
plt.title('Partial Autocorrelation Function (PACF)')
plt.show()

根据ACF和PACF图的截尾情况,选择合适的p和q值。

步骤6:拟合ARIMA模型

# 创建ARIMA模型对象并拟合
p, d, q = 1, 1, 1  # 请根据步骤5的结果设置p和q的值
arima_model = ARIMA(data, order=(p, d, q))
arima_result = arima_model.fit()

步骤7:模型诊断

# 输出模型诊断信息
print(arima_result.summary())

步骤8:模型预测

# 预测未来时间点的值
forecast_steps = 10  # 设置要预测的时间步数
forecast = arima_result.get_forecast(steps=forecast_steps)
forecast_index = pd.date_range(data.index[-1], periods=forecast_steps + 1, freq='D')[1:]
forecast_values = forecast.predicted_mean

# 绘制原始数据和预测结果
plt.figure(figsize=(12, 8))
plt.plot(data, label='Original Time Series')
plt.plot(forecast_index, forecast_values, color='red', label='ARIMA Forecast')
plt.title('ARIMA Model Forecast')
plt.xlabel('Date')
plt.ylabel('Value')
plt.legend()
plt.show()

以上代码实现了ARIMA模型的关键步骤,包括加载数据、可视化原始序列、差分操作、确定模型阶数、拟合模型、模型诊断和未来预测。

完整代码

# @copyright all reseved
# @author: Persist_Zhang
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.arima.model import ARIMA
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf

# 步骤1:导入必要的库

# 步骤2:加载时间序列数据
# 示例数据
date_rng = pd.date_range(start='2022-01-01', end='2022-12-31', freq='D')
data = pd.DataFrame(date_rng, columns=['date'])
data['value'] = np.random.randn(len(date_rng))

# 步骤3:可视化原始时间序列
plt.figure(figsize=(10, 6))
plt.plot(data['date'], data['value'], label='Original Time Series')
plt.title('Original Time Series Data')
plt.xlabel('Date')
plt.ylabel('Value')
plt.legend()
plt.show()

# 步骤4:差分操作,使序列平稳
differenced_data = data['value'].diff().dropna()

# 步骤5:确定ARIMA模型的阶数
# 绘制ACF图
plot_acf(differenced_data)
plt.title('Autocorrelation Function (ACF)')
plt.show()

# 绘制PACF图
plot_pacf(differenced_data)
plt.title('Partial Autocorrelation Function (PACF)')
plt.show()

# 步骤6:拟合ARIMA模型
p, d, q = 1, 1, 1  # 根据ACF和PACF的结果设置p和q的值
arima_model = ARIMA(data['value'], order=(p, d, q))
arima_result = arima_model.fit()

# 步骤7:模型诊断
print(arima_result.summary())

# 步骤8:模型预测
forecast_steps = 10
forecast = arima_result.get_forecast(steps=forecast_steps)
forecast_index = pd.date_range(data['date'].iloc[-1], periods=forecast_steps + 1, freq='D')[1:]
forecast_values = forecast.predicted_mean

# 绘制原始数据和预测结果
plt.figure(figsize=(12, 8))
plt.plot(data['date'], data['value'], label='Original Time Series')
plt.plot(forecast_index, forecast_values, color='red', label='ARIMA Forecast')
plt.title('ARIMA Model Forecast')
plt.xlabel('Date')
plt.ylabel('Value')
plt.legend()
plt.show()

在这里插入图片描述
在这里插入图片描述

通过上述代码,你可以根据具体的时间序列数据应用ARIMA模型,进行建模和未来预测。注意调整模型的阶数(p、d、q)以适应实际数据。

小结

ARIMA模型是一种强大的时间序列分析和预测工具,它能够帮助我们理解数据的趋势、季节性和周期性,并进行未来值的预测。在上述代码实现中,通过几个关键步骤来完成ARIMA模型的应用:

  1. 加载数据: 首先加载了时间序列数据,确保时间列为日期类型。

  2. 可视化原始时间序列: 通过绘制原始时间序列图,可以初步了解数据的整体趋势和特征。

  3. 差分操作: 为了使时间序列平稳,进行了一次差分操作。这是为了减小趋势和季节性的影响,使序列更加平稳。

  4. 确定ARIMA模型的阶数: 利用自相关函数(ACF)和偏自相关函数(PACF)的图,我们选择了适当的自回归阶数(p)和移动平均阶数(q)。

  5. 拟合ARIMA模型: 使用确定好的阶数拟合了ARIMA模型,得到了模型的参数和拟合结果。

  6. 模型诊断: 输出了模型的诊断信息,以确保模型的有效性。

  7. 模型预测: 最后,使用训练好的ARIMA模型对未来一定时间步长内的数据进行了预测,并通过可视化展示了原始数据和预测结果。

结论:

  • ARIMA模型是一种强大的时间序列建模工具,尤其适用于具有趋势和季节性的数据。
  • 模型的性能取决于选取的阶数,需要根据数据的特点进行调参。
  • 通过模型诊断,我们可以评估模型的拟合情况,检查残差是否是白噪声。
  • 预测结果展示了模型对未来数据的趋势,可以帮助我们做出决策和规划。

在实际应用中,需要谨慎选择模型的阶数,并对不同的时间序列数据进行个性化的调整。ARIMA模型是时间序列分析领域的经典方法之一,但在面对更复杂的情况时,可能需要考虑其他高级的模型和算法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/351983.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VS生成报错:MSB8036 The Windows SDK version 8.1 was not found.找不到 Windows SDK 版本 8.1

目录 一、查看本机SDK二、 解决法一:适配本电脑的SDK法二:下载SDK 8.1 VS生成报错:MSB8036 找不到 Windows SDK 版本 8.1。请安装所需版本的 Windows SDK,或者在项目属性页中或通过右键单击解决方案并选择“重定解决方案目标”来更…

用ChatGPT写申请文书写进常春藤联盟?

一年前,ChatGPT 的发布引发了教育工作者的恐慌。现在,各大学正值大学申请季,担心学生会利用人工智能工具伪造入学论文。但是,聊天机器人创作的论文足以骗过大学招生顾问吗? ChatGPT简介 ChatGPT,全称聊天生…

C++ 之LeetCode刷题记录(二十)

😄😊😆😃😄😊😆😃 开始cpp刷题之旅。 依旧是追求耗时0s的一天。 110. 平衡二叉树 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二…

构建外卖跑腿系统:技术实现与架构设计

在当今数字化时代,外卖跑腿系统已成为人们生活中不可或缺的一部分。本文将探讨如何利用先进的技术和架构设计,开发一个高效、可靠的外卖跑腿系统。 1. 技术选型 在开发外卖跑腿系统之前,我们需要仔细选择适合的技术栈,以确保系…

[C++13]:stack queue priority_queue 模拟实现

stack && queue && priority_queue 模拟实现 一.stack1.概念:2.使用:3.模拟实现:一些题目:1.最小栈:2.栈的压入弹出序列:3.逆波兰表达式求值: 二.queue1.概念:2.使用…

SpringBoot之时间数据前端显示格式化

背景 在实际我们通常需要在前端显示对数据操作的时间或者最近的更新时间,如果我们只是简单的使用 LocalDateTime.now()来传入数据不进行任何处理那么我们就会得到非常难看的数据 解决方式: 1). 方式一 在属性上加上注解,对日期进行格式…

Web3 游戏开发者的数据分析指南

作者:lesleyfootprint.network 在竞争激烈的 Web3 游戏行业中,成功不仅仅取决于游戏的发布,还需要在游戏运营过程中有高度的敏锐性,以应对下一次牛市的来临。 人们对 2024 年的游戏行业充满信心。A16Z GAMES 和 GAMES FUND ONE …

探索IOC和DI:解密Spring框架中的依赖注入魔法

IOC与DI的详细解析 IOC详解1 bean的声明2 组件扫描 DI详解 IOC详解 1 bean的声明 IOC控制反转,就是将对象的控制权交给Spring的IOC容器,由IOC容器创建及管理对象。IOC容器创建的对象称为bean对象。 要把某个对象交给IOC容器管理,需要在类上…

深度学习知识

context阶段和generation阶段的不同 context阶段(又称 Encoder)主要对输入编码,产生 CacheKV(CacheKV 实际上记录的是 Transformer 中 Attention 模块中 Key 和 Value 的值),在计算完 logits 之后会接一个Sampling 采…

【MySQL进阶】InnoDB引擎存储结构和架构

文章目录 逻辑存储结构架构内存结构Buffer Pool&Adaptive Hash IndexChange BufferLog Buffer 磁盘结构 逻辑存储结构 表空间(Tablespaces):InnoDB使用表空间来管理存储表和索引的数据文件。每个表空间包含一个或多个数据文件&#xff0c…

【学网攻】 第(9)节 -- 路由器使用以及原理

系列文章目录 目录 系列文章目录 文章目录 前言 一、路由器是什么? 二、实验 1.引入 总结 文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交换机认识及使用【学网攻】 第(3)节 -- 交换机配置聚合端口【学网攻】 第(4)节 -- 交换机划分Vlan…

解锁一些SQL注入的姿势

昨天课堂上布置了要去看一些sql注入的案例,以下是我的心得: ​​​​​​​ ​​​​​​​ ​​​​​​​ 1.新方法 打了sqli的前十关,我发现一般都是联合查询,但是有没有不是联合查询的方法呢&#xf…

Python基础学习 -05 基本类型

Python3 基本数据类型 Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。 在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。 等号&…

Nodejs前端学习Day1_补档

我给day1搞没了,还是觉得该补一个,有用 文章目录 前言一、学习目标二、学习目录三、为什么JavaScript代码可以在浏览器中运行四、为什么JavaScript可以操作DOM和BOM五、浏览器中的JavaScript运行环境总结 前言 补档 一、学习目标 二、学习目录 三、为什…

苹果备忘录删除了怎么恢复?看这,5分钟学会4种方法

在日常使用中,我们有时会不小心删除苹果备忘录中的重要内容。这些内容可能是重要的提醒、重要的日程安排,也可能是珍贵的回忆。一旦删除,可能会对我们的生活和工作带来很大的困扰。那么,苹果备忘录删除了怎么恢复呢?本…

小屏幕大作用 电子墨水屏桌牌、门牌—构建绿色办公环境新途径

在当今信息化社会,电子设备已经深入到我们生活的方方面面。其中,电子墨水屏作为一种特殊的显示技术,因其低功耗、护眼、节能环保等特点,受到了广泛欢迎。本文将探讨电子墨水屏在构建绿色办公环境中的重要作用,特别是电…

上位机图像处理和嵌入式模块部署(python opencv)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面我们谈到了qt,谈到了opencv,也谈到了嵌入式,但是没有说明python在这个过程当中应该扮演什么样的角色。open…

无线测温在线监测系统工作原理与产品选型

摘要:本文首先介绍了无线测温在线监测系统的基本工作原理以及软硬件组成,重点介绍了在线监测的无线测温技术特点。在此研究基础上,探讨了无线测温在线监测系统在实际工作场景中的应用案例,证明了其在温度检测方面的重要应用价值。…

FlashInternImage实战:使用FlashInternImage实现图像分类任务(一)

文章目录 摘要安装包安装timm 数据增强Cutout和MixupEMA项目结构编译安装DCNv4环境安装过程配置CUDAHOME解决权限不够的问题 按装ninja编译DCNv4 计算mean和std生成数据集 摘要 https://arxiv.org/pdf/2401.06197.pdf 论文介绍了Deformable Convolution v4(DCNv4&…

#include<iomanip>前不可以加#define int long long

加了会报许多奇怪的错 但是放后面就可以了 尽量不要在头文件前宏定义原始类型