机器学习 | 时间序列预测中的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.hqwc.cn/news/678791.html

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

相关文章

2024 GESP6级 编程第一题 游戏

题目描述 你有四个正整数 ,并准备用它们玩一个简单的小游戏。 在一轮游戏操作中,你可以选择将 减去 ,或是将 减去 。游戏将会进行多轮操作,直到当 时游戏结束。 你想知道游戏结束时有多少种不同的游戏操作序列。两种游戏操作…

虚拟机jvm下

jvm原理与实践 java程序的跨平台特性 jvm基本结构 JVM类加载流程和内存结构总览 类加载 加载阶段 类加载 验证阶段 类加载 准备阶段 类加载 解析阶段 类加载 初始化阶段 程序计数器 虚拟机栈&本地方法栈 栈帧操作 堆 方法区 永久代 元空间 垃圾回收 可触及性

python与java用途区别有哪些

区别: 1.Python比Java简单,学习成本低,开发效率高。 2.Java运行效率高于Python,尤其是纯Python开发的程序,效率极低。 3.Java相关资料多,尤其是中文资料。 4.Java版本比较稳定,Python2和3不…

笔记2:cifar10数据集获取及pytorch批量处理

(1)cifar10数据集预处理 CIFAR-10是一个广泛使用的图像数据集,它由10个类别的共60000张32x32彩色图像组成,每个类别有6000张图像。 CIFAR-10官网 以下为CIFAR-10数据集data_batch_*表示训练集数据,test_batch表示测试…

Ubuntu22.04下安装kafka_2.11-0.10.1.0并运行简单实例

目录 一、版本信息 二、安装Kafka 1.将Kafka安装包移到下载目录中 2.下载Spark并确保hadoop用户对Spark目录有操作权限 三、启动Kafka并测试Kafka是否正常工作 1.启动Kafka 2.测试Kafka是否正常工作 一、版本信息 虚拟机产品:VMware Workstation 17 Pro 虚…

C++从入门到精通---模版

文章目录 泛型编程函数模版模版参数的匹配原则类模版类模版的定义格式类模版的实例化 总结 泛型编程 泛型编程是一种编程范式,旨在实现通用性和灵活性。它允许在编写代码时使用参数化类型,而不是具体的类型,从而使代码更加灵活和可重用。 在…

Autoxjs 实践-Spring Boot 集成 WebSocket

概述 最近弄了福袋工具,由于工具运行中,不好查看福袋结果,所以我想将福袋工具运行数据返回到后台,做数据统计、之后工具会越来越多,就弄了个后台,方便管理。 实现效果 WebSocket? websocket是…

图像处理之SVD检测显示屏缺陷(C++)

图像处理之SVD检测显示屏缺陷(C) 文章目录 图像处理之SVD检测显示屏缺陷(C)前言一、SVD算法简介二、代码实现总结 前言 显示屏缺陷检测是机器视觉领域的一处较广泛的应用场景,显示屏主要有LCD和OLED,缺陷类…

本地连接服务器Jupyter【简略版】

首先需要在你的服务器激活conda虚拟环境: 进入虚拟环境后使用conda install jupyter命令安装jupyter: 安装成功后先不要着急打开,因为需要设置密码,使用jupyter notebook password命令输入自己进入jupyter的密码: …

USB系列一:USB技术概念

在这里USB的历史就不赘述了,有兴趣可以自己去搜索。也省略掉USB接口的概述,这些都是一些飞技术性的常识性的知识,没必要浪费篇幅和文字来描述。 一、USB总线版本:(从USB1.1说起) 1、USB1.1 1998年9月23日…

怎么获取二维码链接?二维码图片链接提取技巧

现在很多内容会使用二维码的方式来做展示,这种方式可以实现内容的快速传递,而且当遇到无法扫码的情况时,也可以通过二维码链接来访问内容,与其他内容分享方式相比更加灵活。那么如何快速提取二维码链接呢?可能有很多小…

0508_IO3

练习1&#xff1a; 1&#xff1a;使用 dup2 实现错误日志功能 使用 write 和 read 实现文件的拷贝功能&#xff0c;注意&#xff0c;代码中所有函数后面&#xff0c;紧跟perror输出错误信息&#xff0c;要求这些错误信息重定向到错误日志 err.txt 中去 1 #include <stdio.h…