机器学习 | 时间序列预测中的AR模型及应用

自回归模型,通常缩写为AR模型,是时间序列分析和预测中的一个基本概念。它们在金融、经济、气候科学等各个领域都有广泛的应用。在本文中,我们将探索自回归模型,它们如何工作,它们的类型和实际例子。

自回归模型

自回归模型属于时间序列模型家族。这些模型捕捉一个观测值和几个滞后观测值(先前的时间步长)之间的关系。其核心思想是,时间序列的当前值可以表示为过去值的线性组合,带有一些随机噪声。

在数学上,p阶自回归模型,表示为AR(p),可以表示为:

在这里插入图片描述
其中:

  • 在这里插入图片描述
    是时间t的值。

  • c是常数。

  • 在这里插入图片描述
    是模型参数。

  • 在这里插入图片描述
    是滞后值。

  • 在这里插入图片描述
    表示时间t处的白色噪声(随机误差)。

自回归模型中的自相关(ACF)

自相关,通常表示为“ACF”(自相关函数),是时间序列分析和自回归模型中的基本概念。它指的是时间序列与其滞后版本之间的相关性。在自回归模型的背景下,自相关度量时间序列的当前值与其过去值(特别是不同时滞的值)的相关程度。

以下是自回归模型中自相关概念的分解:

  • 自相关涉及计算时间序列与其滞后版本之间的相关性。“滞后”表示序列移位的时间单位数。例如,滞后1对应于将序列与其上一个时间步进行比较,而滞后2则对应于将序列与其上一个时间步进行比较,依此类推。滞后值可帮助您计算自相关性,该自相关性用于度量时间序列中的每个观测与上一个观测的相关程度。
  • 在一个特定的滞后的自相关性提供了洞察的时间依赖性的数据。如果自相关在某个滞后处很高,则表明当前值与该滞后处的值之间存在很强的关系。相反,如果自相关性很低或接近于零,则表明关系很弱或没有关系。
  • 为了可视化自相关性,一种常见的方法是创建ACF图。此图显示不同滞后时的自相关系数。横轴表示滞后,纵轴表示自相关值。ACF图中的显著峰值或模式可以揭示数据的潜在时间结构。自相关在自回归模型中起着关键作用。
  • 在p阶自回归模型中,时间序列的当前值表示为过去p值的线性组合,系数通过最小二乘或最大似然估计等方法确定。AR模型中滞后阶数(p)的选择通常依赖于ACF图的分析。
  • 自相关也可用于评估时间序列是否平稳。在一个平稳的时间序列中,自相关应该随着滞后的增加而逐渐减小。偏离此行为可能表明非平稳性。

自回归模型的类型

AR(1)模型:

  • 在AR(1)模型中,当前值仅取决于前一个值。
  • 它表示为:
    在这里插入图片描述

AR(p)模型:

  • 一般p阶自回归模型包含p个滞后值。
  • 如前文所示。

AR模型在气温预测中的应用

第1步:导入数据

在第一步中,我们导入所需的库和温度数据集。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt# Set a random seed for reproducibility
np.random.seed(0)# Load your temperature dataset with columns "Date" and "Temperature"
data = pd.read_excel('Data.xlsx')# Make sure your "Date" column is in datetime format
data['Date'] = pd.to_datetime(data['Date'])# Sorting the data by date (if not sorted)
data = data.sort_values(by='Date')# Resetting the index
data.set_index('Date', inplace=True)data.dropna(inplace=True)

可视化数据

# Visualize the data
plt.figure(figsize=(12, 6))
plt.plot( data['Temperature '], label='Data')
plt.xlabel('Date')
plt.ylabel('Temperature')
plt.legend()
plt.title('Temperature Data')
plt.show()

在这里插入图片描述
第2步:数据预处理

现在我们有了合成数据,我们需要对其进行预处理。我们将创建滞后特征,将数据分为训练集和测试集,并将其格式化以进行建模。

  • 在第一步中,将滞后要素添加到数据框中。
  • 然后完全删除具有空值的行。
  • 然后将数据分为训练和测试数据集。
  • 定义输入特征和目标变量。
# Adding lag features to the DataFrame
for i in range(1, 6): # Creating lag features up to 5 daysdata[f'Lag_{i}'] = data['Temperature '].shift(i)# Drop rows with NaN values resulting from creating lag features
data.dropna(inplace=True)# Split the data into training and testing sets
train_size = int(0.8 * len(data))
train_data = data[:train_size]
test_data = data[train_size:]# Define the input features (lag features) and target variabley_train = train_data['Temperature ']y_test = test_data['Temperature ']

ACF图

自相关函数(ACF)图是一种图形工具,用于可视化和评估不同滞后时间的时间序列数据的自相关性。ACF图帮助您了解时间序列的当前值如何与其过去值相关。您可以使用Stats模型库中的plot_acf函数在Python中创建ACF图。

from statsmodels.graphics.tsaplots import plot_acf
series = data['Temperature ']
plot_acf(series)
plt.show()

在这里插入图片描述
该图显示了前20个滞后的自相关值。该图显示不同滞后的自相关值,其中滞后在x轴上,自相关值在y轴上。该图帮助我们识别自相关值在置信区间之外的显著滞后(由阴影区域表示)。

我们可以观察到从lag=1到lag=4的显著相关性。我们使用下面提到的方法检查滞后值的相关性:

data['Temperature '].corr(data['Temperature '].shift(1))

输出

0.7997281316018658

Lag=1为我们提供了最高的相关值0.799。类似地,我们已经检查了lag= 2,3,4。对于移位设置为4,我们得到的相关性为0.31。

第3步:建模

我们将使用AutoReg模型构建一个自回归模型。

  • 我们导入所需的库来创建自回归模型。
  • 然后我们在训练数据上训练自回归模型。
from statsmodels.tsa.ar_model import AutoReg
from statsmodels.graphics.tsaplots import plot_acf
from statsmodels.tsa.api import AutoReg
from sklearn.metrics import mean_absolute_error, mean_squared_error# Create and train the autoregressive model
lag_order = 1 # Adjust this based on the ACF plot
ar_model = AutoReg(y_train, lags=lag_order)
ar_results = ar_model.fit()

第4步:模型评估

使用平均绝对误差(MAE)和均方根误差(RMSE)评估模型的性能。

  • 然后,我们使用AutoReg模型进行预测,并将其标记为y_pred。
  • 通过计算MAE和RMSE指标来评估AutoReg模型的性能。
# Make predictions on the test set
y_pred = ar_results.predict(start=len(train_data), end=len(train_data) + len(test_data) - 1, dynamic=False)
#print(y_pred)# Calculate MAE and RMSE
mae = mean_absolute_error(y_test, y_pred)
rmse = np.sqrt(mean_squared_error(y_test, y_pred))
print(f'Mean Absolute Error: {mae:.2f}')
print(f'Root Mean Squared Error: {rmse:.2f}')

输出

Mean Absolute Error: 1.59
Root Mean Squared Error: 2.30

在代码中,ar_results是拟合我们的时间序列数据的ARIMA模型。为了对测试集进行预测,我们使用ARIMA模型的预测方法。它是这样工作的:

  • start指定预测的起始点。在这种情况下,我们在训练数据中的最后一个数据点之后开始预测,这相当于我们测试集中的第一个数据点。
  • end指定预测的结束点。我们将其设置为测试集中的最后一个数据点。
  • dynamic=False表示我们正在使用样本外预测。这意味着每个预测点使用先前观测的真实值。这通常用于测试集上的模型评估。
  • 预测存储在y_pred中,其中包含测试集的预测值。

第5步:可视化

根据实际温度数据可视化模型的预测。最后,使用Matplotlib库可视化AutoReg模型所做的预测。

实际预测值图:

# Visualize the results
plt.figure(figsize=(12, 6))
plt.plot(test_data["Date"] ,y_test, label='Actual Temperature')
plt.plot( test_data["Date"],y_pred, label='Predicted Temperature', linestyle='--')
plt.xlabel('Date')
plt.ylabel('Temperature')
plt.legend()
plt.title('Temperature Prediction with Autoregressive Model')
plt.show()

在这里插入图片描述
预测图:

# Define the number of future time steps you want to predict (1 week)
forecast_steps = 7# Extend the predictions into the future for one year
future_indices = range(len(test_data), len(test_data) + forecast_steps)
future_predictions = ar_results.predict(start=len(train_data), end=len(train_data) + len(test_data) + forecast_steps - 1, dynamic=False)# Create date indices for the future predictions
future_dates = pd.date_range(start=test_data['Date'].iloc[-1], periods=forecast_steps, freq='D')# Plot the actual data, existing predictions, and one year of future predictions
plt.figure(figsize=(12, 6))
plt.plot(test_data['Date'], y_test, label='Actual Temperature')
plt.plot(test_data['Date'], y_pred, label='Predicted Temperature', linestyle='--')
plt.plot(future_dates, future_predictions[-forecast_steps:], label='Future Predictions', linestyle='--', color='red')
plt.xlabel('Date')
plt.ylabel('Temperature')
plt.legend()
plt.title('Temperature Prediction with Autoregressive Model')
plt.show()

在这里插入图片描述

自回归模型的优点和缺点

自回归模型(AR模型)是一类时间序列模型,具有自己的优点和缺点。理解这些可以帮助选择何时使用它们以及何时考虑替代建模方法。

自回归模型的优点:

  • 简单性:AR模型相对容易理解和实现。它们依赖于时间序列的过去值来预测未来值,使它们在概念上简单明了。
  • 可解释性:AR模型中的系数有明确的解释。它们代表了过去和未来价值观之间关系的强度和方向,使我们更容易从模型中获得见解。
  • 适用于平稳数据:AR模型适用于平稳时间序列数据。随着时间的推移,平稳数据具有稳定的统计特性,这是建立AR模型的假设。
  • 效率:AR模型在计算上是高效的,特别是对于短时间序列或当您拥有合理数量的数据时。
  • 建模时间模式:AR模型擅长捕捉数据中的短期时间依赖性和模式,这使得它们对短期预测很有价值。

自回归模型的缺点:

  • 平稳性假设:AR模型假设时间序列是平稳的,这意味着其统计特性不会随时间而变化。在实践中,许多真实世界的时间序列是非平稳的,需要差分等预处理步骤。
  • 局限于短期依赖性:AR模型不适合捕捉数据中的长期依赖性。它们主要用于建模短期时间模式。
  • 滞后选择:在AR模型中选择适当的滞后阶数(p)可能具有挑战性。选择太少的滞后可能导致欠拟合,而选择太多的滞后可能导致过拟合。ACF和PACF图等技术用于确定滞后阶数。
  • 对噪声的敏感性:AR模型可能对数据中的随机噪声敏感。这种敏感性可能导致过拟合,特别是在处理噪声或不规则的时间序列时。
  • 有限的预测范围:AR模型通常不适合长期预测,因为它们被设计用于捕获短期依赖性。对于长期预测,ARIMA、SARIMA或机器学习模型等其他模型可能更合适。
  • 数据质量依赖性:AR模型的有效性高度依赖于数据质量。离群值、缺失值或数据不规则性会显著影响模型的性能。

总结

自回归(AR)模型为分析和预测时间序列数据提供了一个强大的框架。我们探讨了AR模型的基本概念,从理解自相关到拟合模型和进行未来预测。通过生成模拟温度数据集,我们能够应用AR建模。AR模型在处理平稳时间序列数据时特别有用,因为过去的值会影响未来的观测结果。滞后阶数的选择是关键的一步,可以通过检查自相关函数(ACF)图来确定。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【小迪安全2023】第61天:服务攻防-中间件安全CVE复现K8sDockeruettyWebsphere

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收…

IaC实战指南:DevOps的自动化基石

基础设施即代码(Infrastructure as Code,IaC)是指利用脚本、配置或编程语言创建和维护基础设施的一组实践和流程。通过IaC,我们可以轻松测试各个组件、实现所需的功能并在最小化停机时间的前提下进行扩展。更值得一提的是&#xf…

STM32单片机实战开发笔记-独立看门狗IWDG

嵌入式单片机开发实战例程合集: 链接:https://pan.baidu.com/s/11av8rV45dtHO0EHf8e_Q0Q?pwd28ab 提取码:28ab IWDG模块测试 1、功能描述 STM32F10X内置两个看门狗,提供了更高的安全性,时间的精确下性和使用的灵活性…

聊聊BitLocker

最近有消息称微软决定在Windows 11 24H2中默认开启BitLocker,这个消息在网上引起了不小的波澜。有人说,对于我们这些普通用户来说,BitLocker真的有必要吗? 什么是BitLocker BitLocker 是一项 Windows 安全功能,可为整…

Qt与MySQL连接

QT连接Mysql数据库(详细成功版)-CSD N博客 我的MySQL是64位的,所以我的Qt的套件也需要是64位的 遇到的问题: (available drivers中已经有QMYSQL QMYSQL3,还是not loaded) QSqlDatabase: QMYS…

Splashtop 荣获 TrustRadius 颁发的“2024年度最受欢迎奖”

2024年5月8日 加利福尼亚州库比蒂诺 Splashtop 在全球远程访问和支持解决方案领域处于领先地位,该公司正式宣布将连续第三年荣获远程桌面和远程支持类别的“TrustRadius 最受欢迎奖”。Splashtop 的 trScore 评分高达8.6分(满分10分)&#x…

[图解]DDD架构好简单我学会了-学会也没啥用

1 00:00:03,720 --> 00:00:05,920 内部共有,首先是内部的 2 00:00:08,150 --> 00:00:09,220 所以不能说什么 3 00:00:09,630 --> 00:00:10,730 不能跟外部连在一起 4 00:00:10,740 --> 00:00:15,280 比如说,功能架构,可以吗 …

企业计算机服务器中了faust勒索病毒如何处理,faust勒索病毒解密恢复

随着网络技术的不断发展与应用,越来越多的企业利用网络走向了数字化办公模式,网络也极大地方便了企业生产运营,大大提高了企业生产效率,但对于众多企业来说,企业的数据安全一直是大家关心的主要话题,保护好…

Flutter笔记:Widgets Easier组件库(10)快速处理承若型对话

Flutter笔记 使用Widgets Easier组件库快速处理承若型对话 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://…

IoTDB 入门教程 基础篇⑦——数据库管理工具 | DBeaver 连接 IoTDB

文章目录 一、前文二、下载iotdb-jdbc三、安装DBeaver3.1 DBeaver 下载3.2 DBeaver 安装 四、安装驱动五、连接数据库六、参考 一、前文 IoTDB入门教程——导读 二、下载iotdb-jdbc 下载地址org/apache/iotdb/iotdb-jdbc:https://maven.proxy.ustclug.org/maven2/o…

ai可以做思维导图吗?当然是可以的!

ai可以做思维导图吗?在快节奏的现代生活中,思维导图作为一种高效的信息组织和表达工具,越来越受到人们的青睐。随着人工智能(AI)技术的不断发展,AI思维导图软件也应运而生,它们不仅能够帮助用户…

为什么现在越来越多的人会选择陪诊

现在越来越多的人选择陪诊的原因有多方面。 首先,随着人口老龄化、医疗资源分配不均等问题的日益突出,许多老年人和病患在就医过程中面临诸多困难,如挂号、排队、取药等繁琐的手续和流程。陪诊服务能够为他们提供极大的便利,帮助…

【Gateway远程开发】0.5GB of free space is necessary to run the IDE.

【Gateway远程开发】0.5GB of free space is necessary to run the IDE. 报错 0.5GB of free space is necessary to run the IDE. Make sure that there’s enough space in following paths: /root/.cache/JetBrains /root/.config/JetBrains 原因 下面两个路径的空间不…

【excel】统计单元格内数字/字符串的数量

文章目录 一、问题二、步骤(一)将A1中的数字分解出来,在不同的单元格中显示(二)统计每个数字出现的个数(三)去重 三、尾巴 一、问题 单元格中有如下数值:12345234534545&#xff0c…

Nginx(参数设置总结)

文章目录 Nginx(工作机制&参数设置)1.Master&Worker工作机制1.示意图2.解释3.Nginx争抢机制4.accept_mutex解决惊群现象5.多进程结构不用多线程结构的好处6.IO多路复用,实现高并发7.优势 2.参数配置1.work_processes1.基本介绍2.work…

Javaweb项目 博客系统(后端代码编写)

准备工作,创建项目 引入依赖 1.servlet 2.mysql 3.jackson 导入前端代码 1.博客列表页 2.博客详情页 3.登录页 4.博客编辑页 接下来要进行的操作就是两大方面 1.前端和服务器的交互 2.服务器和数据库的交互 进行数据库设计创建数据库和数据表 一把需要把建库建表的操作写错sq…

C语言实验-数组、字符串以及指针

一&#xff1a; 求一个NN矩阵主、次对角线上所有元素之和。矩阵输入、矩阵输出、矩阵对角线求和分别用三个子函数实现。&#xff08;N的值由用户从键盘输入&#xff09; #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h>void print(int(*arr…

323_C++_QT_QProcess执行cmd解压、压缩、删除tar.gz等等其他压缩包文件到指定目录,不需要外部库,QT自带API的就行

// decompressPath : 解压到此目录 // fileName : 解压的tar.gz文件名executeCommand(decompressPath , QString::fromStdString(fileName));// 开始解压 void executeCommand

获取和修改线程的id和名称

当创建两个线程时&#xff0c;需要获取线程的id和名称&#xff0c;这样可以知道是哪个线程执行的 方式1&#xff1a;this.getId()和this.getName() 写代码注意点&#xff1a;要写对类名 方式2&#xff1a;Thread.currentThread().getId()和Thread.currentThread().getName() 修…

初识Node.js-REPL(详解交互式解释器)

目录 一、REPL介绍 1.概念 2.主要特点和用途 3.应用 二、 REPL语法 1.简单的表达式运算 2.使用变量 3.多行表达式 下划线(_)变量 三、REPL 命令 四、停止 REPL 五、Gif 实例演示 六、REPL应用实例 七、总结 一、REPL介绍 1.概念 Read&#xff08;读取&#xff09…