时序分析:Python 中的 ARIMA 模型

news2025/6/12 18:39:08
推荐:使用 NSDT场景编辑器 快速助你搭建可二次编辑的3D应用场景

什么是ARIMA模型?

ARIMA 模型是用于分析和预测时间序列数据的统计模型。ARIMA 方法明确迎合了时间序列中的标准结构,为制作熟练的时间序列预测提供了一种简单而强大的方法。

ARIMA 代表 自回归积分移动平均线。它结合了三个关键方面:

  • 自回归 (AR):使用当前观测值和滞后观测值之间相关性的模型。滞后观测值的数量称为滞后顺序或 p。
  • 积分(I):使用原始观测值的差分使时间序列平稳。差异运算的次数称为 d。
  • 移动平均线 (MA):模型考虑当前观测值与应用于过去观测值的移动平均模型的残差之间的关系。移动平均线窗口的大小是阶数或 q。

ARIMA 模型使用符号 ARIMA(p,d,q) 定义,其中 p、d 和 q 替换为整数值以指定所使用的确切模型。

采用 ARIMA 模型时的关键假设:

  • 时间序列是从基础 ARIMA 过程生成的。
  • 参数 p、d、q 必须根据原始观测值适当指定。
  • 在拟合 ARIMA 模型之前,必须通过差分使时间序列数据变得平稳。
  • 残差应不相关,如果模型拟合良好,则正态分布。

总之,ARIMA 模型提供了一种结构化且可配置的方法,用于为预测等目的对时间序列数据进行建模。接下来,我们将研究在 Python 中拟合 ARIMA 模型。

蟒蛇代码示例

在本教程中,我们将使用 Kaggle 的 Netflix 股票数据使用 ARIMA 模型预测 Netflix 股票价格。

数据加载

我们将加载我们的股票价格数据集,并将“日期”列作为索引。

import pandas as pd


net_df = pd.read_csv("Netflix_stock_history.csv", index_col="Date", parse_dates=True)
net_df.head(3)

时序分析:Python 中的 ARIMA 模型

数据可视化

我们可以使用熊猫“绘图”功能来可视化股票价格和交易量随时间的变化。很明显,股价呈指数级增长。

net_df[["Close","Volume"]].plot(subplots=True, layout=(2,1));

时序分析:Python 中的 ARIMA 模型

滚动预测 ARIMA 模型

我们的数据集已拆分为训练集和测试集,我们继续训练 ARIMA 模型。然后预测了第一个预测。

通用ARIMA模型的结果很差,因为它产生了一条平线。因此,我们决定尝试滚动预测方法。

注意:代码示例是 BOGDAN IVANYUK 笔记本的修改版本。

from statsmodels.tsa.arima.model import ARIMA
from sklearn.metrics import mean_squared_error, mean_absolute_error
import math


train_data, test_data = net_df[0:int(len(net_df)*0.9)], net_df[int(len(net_df)*0.9):]


train_arima = train_data['Open']
test_arima = test_data['Open']


history = [x for x in train_arima]
y = test_arima
# make first prediction
predictions = list()
model = ARIMA(history, order=(1,1,0))
model_fit = model.fit()
yhat = model_fit.forecast()[0]
predictions.append(yhat)
history.append(y[0])

在处理时间序列数据时,由于依赖于先前的观测值,滚动预测通常是必要的。执行此操作的一种方法是在收到每个新观测值后重新创建模型。

为了跟踪所有观察结果,我们可以手动维护一个名为 history 的列表,该列表最初包含训练数据,每次迭代都会附加新的观察结果。这种方法可以帮助我们获得准确的预测模型。

# rolling forecasts
for i in range(1, len(y)):
    # predict
    model = ARIMA(history, order=(1,1,0))
    model_fit = model.fit()
    yhat = model_fit.forecast()[0]
    # invert transformed prediction
    predictions.append(yhat)
    # observation
    obs = y[i]
    history.append(obs)

模型评估

我们的滚动预测 ARIMA 模型显示,与简单实施相比,改进了 100%,产生了令人印象深刻的结果。

# report performance
mse = mean_squared_error(y, predictions)
print('MSE: '+str(mse))
mae = mean_absolute_error(y, predictions)
print('MAE: '+str(mae))
rmse = math.sqrt(mean_squared_error(y, predictions))
print('RMSE: '+str(rmse))
MSE: 116.89611817706545
MAE: 7.690948135967959
RMSE: 10.811850821069696

让我们可视化并将实际结果与预测结果进行比较。很明显,我们的模型已经做出了高度准确的预测。

import matplotlib.pyplot as plt
plt.figure(figsize=(16,8))
plt.plot(net_df.index[-600:], net_df['Open'].tail(600), color='green', label = 'Train Stock Price')
plt.plot(test_data.index, y, color = 'red', label = 'Real Stock Price')
plt.plot(test_data.index, predictions, color = 'blue', label = 'Predicted Stock Price')
plt.title('Netflix Stock Price Prediction')
plt.xlabel('Time')
plt.ylabel('Netflix Stock Price')
plt.legend()
plt.grid(True)
plt.savefig('arima_model.pdf')
plt.show()

时序分析:Python 中的 ARIMA 模型

结论

在这个简短的教程中,我们概述了 ARIMA 模型以及如何在 Python 中实现它们以进行时间序列预测。ARIMA 方法提供了一种灵活且结构化的方式来对依赖于先前观测值和过去预测误差的时间序列数据进行建模。如果您对 ARIMA 模型和时间序列分析的全面分析感兴趣,我建议您查看使用时间序列分析进行股票市场预测。

原文链接:时序分析:Python 中的 ARIMA 模型 (mvrlink.com)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

阿里云Nas文件存储的各种场景使用

文章目录 1.ECS服务器挂载NAS文件存储1.1.添加NAS挂载点1.2.为ECS挂载NAS存储image-202202012230314501.3.验证ECS服务器是否挂载了NAS存储1.4.卸载挂载的NAS存储 2.通过命令行的方式在ECS中挂载NAS存储3.KodCloud云盘系统采用NAS存储用户上传的文件3.1.配置云盘系统接入NAS存储…

MySQL高阶知识点

MySQL 文章目录 MySQLchar和varchar的区别视图视图的特点 存储过程存储过程的特点 触发器触发器的特点 MySQL引擎索引为什么要有索引呢?什么是索引索引的优势索引的劣势索引类型索引种类组合索引最左前缀原则索引创建原则B树和B树的区别数据库为什么使用B树而不是B树…

springcloud3 slueth实现链路状态监控

一 slueth的介绍 1.1 slueth的作用 在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的服务节点调用来协同产生最后的请求结果,每一个阶段请求都会形成一条复杂的分布式调用链路,链路中任何一环出现高延时或者错误都会引起…

0基础学习VR全景平台篇 第83篇:智慧眼-怎么理解分类?

一、功能说明 分类可以理解为,为了方便城市运营工作的管理所实行的行政区划,如XXX乡镇、XXX街道等等。 二、后台编辑界面 1、点击【新增】,填写分类的名称,若有上一级分类,那么还需选择父级分类,建议从最…

【uniapp】uniapp设置安全区域:

文章目录 一、效果图:二、实现代码: 一、效果图: 二、实现代码: {"path": "pages/index/index","style": {"navigationStyle": "custom","navigationBarTextStyle": "white","navigationBarTitle…

VS code 2023下载安装教程(非常详细)从零基础入门到精通,看完这一篇就够了

安装步骤 1、下载后鼠标右键【解压到 Visual Studio Code2023 】; 2、打开解压的文件夹,找到【Setup.exe】运行程序,双击运行或者鼠标右键【以管理员身份运行】; 3、勾选【我同意此协议】后,点击【下一步】&#xff1…

【我的2023秋招记录】溯流

我的2023秋招记录 开篇(2023-08-11) 2023已经过去大半年了,久违地打开CSDN,发现上一篇博客还停留在2022年的10月。那时候正值疫情严重,研究所回不去,整天呆在家里面摆烂摸鱼,也时常忧虑之后的…

el-dialog嵌套,修改内层el-dialog样式(自定义样式)

el-dialog嵌套使用时,内层的el-dialog要添加append-to-body属性 给内层的el-dialog添加custom-class属性,添加自定义类名 <el-dialog:visible.sync"dialogVisible"append-to-bodycustom-class"tree-cesium-container"><span>这是一段信息<…

机器学习、深度学习项目开发业务数据场景梳理汇总记录五

本文的主要作用是对历史项目开发过程中接触到的业务数据进行整体的汇总梳理&#xff0c;文章会随着项目的开发推进不断更新。 这里是续文&#xff0c;因为CSDN单篇文章内容太大的话就会崩溃的&#xff0c;别问我怎么知道的&#xff0c;问就是血泪教训&#xff0c;辛辛苦苦写了一…

Python-程序的控制结构

hello&#xff0c;这里是Token_w的博客&#xff0c;欢迎各位的阅读点赞评论 今天给大家带来的是Python程序的控制结构&#xff0c;希望对大家有多帮助 整理不易&#xff0c;希望得到您的认可与点赞&#xff01; 感谢&#xff01; 目录 知识点知识导图1、程序的基本结构1.1 程序…

整理分享Springboot项目中java实现将数据库表中指定表中的的数据按条件导出生成Excel表格的功能实现(学习笔记)

在Spring Boot中&#xff0c;我们可以使用Apache POI库来实现将数据库表中的数据导出为Excel表格。可以根据条件从数据库中查询数据并将其导出为Excel&#xff1a;如下 准备工作&#xff1a;首先&#xff0c;确保在你的项目中引入Apache POI依赖。在pom.xml文件中添加以下依赖项…

电脑蓝屏显示恢复怎么办,电脑蓝屏后出现恢复界面怎么回事

电脑蓝屏显示恢复怎么办,电脑蓝屏后出现恢复界面怎么回事 目录 下面是问题描述&#xff08;看看和你遇到的问题一不一样&#xff09; 图片一 图片二 图片三 开始解决问题 步骤 1&#xff1a;耐心等待 步骤 2&#xff1a;重启计算机 步骤 3&#xff1a;进入安全模式 步骤…

USB协议精读

1.1.枚举 1.1.1.上电连接过程 1.1.2.设备识别过程 1.1.3.枚举过程 1.1.3.1.获取设备描述符&#xff08;只关注设备描述符中最大数据包长度&#xff09; 1.1.3.2.设置设备针对主机的唯一从机地址 1.1.3.3.获取完整设备描述符 1.1.3.4.获取配置描述符 先获取标准配置描述符&a…

关于replace()字符串截取的思考

使用replace方法获取组装所需字符串: 总结&#xff1a; 以上方法可用于获取文件名、获取获取文件后缀、组装自己想要的字符串

为Windows Terminal设置背景图片

直接通过界面上选项无法达到修改背景图片的目的&#xff0c;后再在官网&#xff0c;和git上找到通过修改配置文件来更改背景图片 首先打开设置界面 点击左下角打开settings.json文件 在json中profiles关键字default选项相面增加几个key,就像下面 修改前修改后 修改后的termin…

【问题记录】antd icons报rev属性缺失错误

闲来无事将项目中的antd从v4升级到了v5&#xff0c;之前正常的页面中如有图标&#xff0c;如<PlusOutlined />&#xff0c;总是报以下错误&#xff1a; TS2741: Property rev is missing in type {} but required in type Pick<AntdIconProps, "name" …

Games101学习笔记2

参考博客&#xff1a;GAMES101 梳理 / 个人向图形学笔记_games101笔记_river_of_sebajun的博客-CSDN博客 lecture 05 Rasterization 1(Triangles) 光栅化 把东西画在屏幕上的过程就是光栅化的过程 视口变换 为什么模型用三角形&#xff1f; 最基本的几何平面&#xff1b;保…

虹科Pico技术交流会 | 广州站圆满成功,免拆诊断汽修之旅启程成都!

全国巡回 / 技术交流 / 以技会友 成都&#xff1a;2023.9.2~9.3 主办单位 广州虹科电子科技有限公司 Tech Gear 免拆诊断学院 支持单位 英国Pico Technology Ltd. 上周末&#xff08;8月5、6号&#xff09;虹科Pico汽车示波器技术交流会在广州圆满举办&#xff01;在本次…

PPSLick.js-个人/初始团队的网站基础弹窗组件库,快速创建登录、注册、搜索、联系我和订阅等弹窗组件,无需写html+css

PPSlick 个人/初始团队的网站基础弹窗组件库 一个javascript组件库&#xff0c;提供基本的联系我、登录、注册、搜索和邮件订阅之类的弹窗组件&#xff08;无需写htmlcss&#xff09;&#xff0c;拿来即用 使用参考 1、搜索组件&#xff0c;参考testsearch.html //创建一个搜…

合并两个有序链表 题解

题目描述&#xff1a;21. 合并两个有序链表 - 力扣&#xff08;LeetCode&#xff09; 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 题解思路&#xff1a; 创建一个新的链表&#xff0c;并将头节点设置为 newHead&#xf…