首页 > 编程语言 >时序分析:Python 中的 ARIMA 模型

时序分析:Python 中的 ARIMA 模型

时间:2023-08-11 11:33:11浏览次数:47  
标签:plt Python 模型 ARIMA 时序 df model net

推荐:使用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)

标签:plt,Python,模型,ARIMA,时序,df,model,net
From: https://www.cnblogs.com/mvrlink/p/17622604.html

相关文章

  • 2.0 Python 数据结构与类型
    数据类型是编程语言中的一个重要概念,它定义了数据的类型和提供了特定的操作和方法。在python中,数据类型的作用是将不同类型的数据进行分类和定义,例如数字、字符串、列表、元组、集合、字典等。这些数据类型不仅定义了数据的类型,还为数据提供了一些特定的操作和方法,例如字符串支持......
  • Python处理Nginx配置的实现方法
    Nginx是一个高性能的Web服务器和反向代理服务器,它可以用于实现多种功能。在实际应用中,我们可能需要根据不同的需求修改Nginx的配置文件。本文将介绍如何使用Python来处理Nginx配置文件。一、安装必要的库为了方便地操作Nginx配置文件,我们需要安装一些Python库。其中,pyparsing和ngin......
  • ubuntu 22.04安装python3.8
    ubuntu22.04如果直接安装python3,装的是python3.10,但现在某外部程序依赖python3.8,所以需要重新安装。不推荐方法网上常见方法是add-apt-repository添加ppa:deadsnakes源,但这样会导致同时安装python3.8和python3.10。可我不想有两个版本。命令如下:#这是不推荐的安装方法,更......
  • python中的集合、元祖、any()等方法介绍
    #{'a','b','c'}怎么变成‘a,b,c’my_set={'a','b','c'}result=','.join(my_set)print(result)#输出:'a,b,c'any()函数:any() 是Python内置的一个函数,用于判断可迭代对象中的元素是否至少有一个满足条件。它接受一个可迭代对象......
  • opencv-python 车牌检测和识别
    首先利用级联分类器把车牌位置找到取出来,然后用ocr进行车牌识别。1 OCR之Tesseract安装Tesseract安装可以参考这个链接: https://blog.csdn.net/m0_53192838/article/details/127432761 写的比较详细,我在使用的时候有一个报错有点意思,记录一下: Tesseractocr识别报错:tesser......
  • 终于搞懂了python2和python3的encode(编码)与decode(解码)
    终于搞懂了python2的编码在python2下碰到非常多次的中文乱码,这次来梳理一下编码问题。在python2中默认编码是ASCII,而在python3中默认编码是unicode。unicode是中间编码,任何字符编码之前的转换都必须解码成unicode,再编码成目标字符编码在python2读取文件时,如果文件编码......
  • Couldn't launch Python exit code 9009
    Couldn'tlaunchPythonexitcode9009startstable-diffusion-webui,发现,python环境没有,我本地其实是已经安装完毕的,后来发现是因为windows的应用商店的快捷键,当你CMD命令行输入python的时候,会自动跳转到应用商店,然后你就会发现,你的python环境没有了,所以,需要将应用商店......
  • opencv-python 人脸人眼检测
    人脸检测:在一张图像中判断是否存在人脸并找出人脸所在的位置。人脸识别:在人脸检测的基础上收集人脸数据集合进行处理保存信息,将输入人脸与保存的信息进行比对校验,得到是否为其中某个人脸。特征值:以某种特定规则对输入源进行处理得到具有唯一性质量化的值,在人脸识别中特征值的提......
  • opencv-python 视频前后景分离
    背景分离(BS)是一种通过使用静态相机来生成前景掩码(即包含属于场景中的移动对象像素的二进制图像)的常用技术。BS计算前景掩码,在当前帧与背景模型之间执行减法运算,其中包含场景的静态部分,或者更一般而言,考虑到所观察场景的特征,可以将其视为背景的所有内容。前后景分离分为两步:第一步......
  • opencv-python 视频处理
    视频是由图片组成的,视频的每一帧就是一幅图片,一般是30帧,表示一秒钟显示30张图片。opencv中可以用 VideoCapture来捕获摄像头,用数字表示不同的设备,比如0,1。如果是视频文件,直接指定路径即可。VideoCapture类提供了初始化,打开视频文件或设备,视频帧捕获,视频文件或设备关闭,属性设......