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

news/2024/5/20 8:41:51

自回归模型,通常缩写为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.mrgr.cn/p/58478610

相关文章

英语学习笔记6——What make is it?

What make is it? 它是什么牌子的? make n.(产品的)品牌名称    v. 制作 区别:model n.(产品的)型号       n. 模型       n. 模特 make 指的是大的品牌名称, model 是旗下产品…

小组练习:拿出手机发朋友圈/微信群, 收集你的目标用户对你当前产品的NPS。 每个项目小组收集不少于

小组练习: 拿出手机发朋友圈/微信群, 收集你的目标用户对你当前产品的NPS。 每个项目小组收集不少于 30 条投票,截图展示 在学习通提交解答的同时,可以同步发布在团队和个人博客上,作为学习心得体会,记录下来。 我的答案: 【第二组】 NPS(Net Promoter Score)是一种用来…

商超物联网方案-Hotspot Service和客流分析方案概述

商超物联网方案-Hotspot Service和客流分析方案概述 场景概述 大型商场、大型综合体在相互竞争及线上消费的影响下,利润增长缓慢,迫切需要通过提供个性化服务提升顾客购物体验,促进利润增长。 向不同顾客推送其感兴趣的广告,不仅…

python在Scikit-learn中用决策树和随机森林预测NBA获胜者

原文链接:http://tecdat.cn/?p=5222 原文出处:拓端数据部落公众号在本文中,我们将以Scikit-learn的决策树和随机森林预测NBA获胜者。美国国家篮球协会(NBA)是北美主要的男子职业篮球联赛,被广泛认为是首屈一指的男子职业篮球联赛在世界上。它有30个队(美国29个,加拿大…

【Azure Function】Azure Function中的Timer Trigger无法自动触发问题

问题描述 在Azure Function中,部署了定时触发器函数(Timer Trigger),却无法按时触发。问题解答 登录Function的Kudu站点,查看 logfiles中 application/function/host目录下的日志文件,发现错误消息:Singleton lock renewal failed for blob xxxxxxxxxxxxxxxxxxxxxxxxxxxxx…

自学错误合集--项目打包报错,运行报错持续更新中

java后端自学错误总结 一.项目打包报错2.项目打包之后运行报错 二.项目运行报错 一.项目打包报错 javac: �Ҳ����ļ�: E:\xx\xx\xx\docer-xx\src\main\java\xx\xx\xx\xx\xx\xx.java �&#xff…

ESP32-C6测评-环境安装

import time from machine import Pinled=Pin(15,Pin.OUT)while True:led.value(1)time.sleep(0.01)led.value(0)time.sleep(0.3)

Transformer 解析 超级详细版

推荐学习视频 汉语自然语言处理-从零解读碾压循环神经网络的transformer模型(一)- 注意力机制-位置编码-attention is all you need_哔哩哔哩_bilibili 目录 首先下transformer和LSTM的最大区别是什么? 1.positional \ encoding, 即位置嵌入(或位置编码); 2 自注…

国产持续集成工具 - Gokins

国产持续集成工具 - Gokins 持续集成(Continuous Integration ,CI) 介绍 在传统软件开发过程中,集成通常发生在每个人都完成了各自的工作之后。在项目尾声阶段,通常集成还要痛苦的花费数周或者数月的时间来完成。持续集成是一个将集成提前至开发周期的早期阶段的实践方式,…

链表面试题目:反转一个单链表的两种方法(解析+代码)

我们继续来看一下单链表的题目和代码吧,把学习的知识运用到实际中,大家加油 先看OJ题目 OJ题目(反转单链表) 双指针法 1.创建两个指针,为pre curr,curr指向头结点,curr用来遍历链表 2.curr指向…

【汇编语言小练习输入两个数字然后输出它们的和】

这个程序是用汇编语言编写一个简单的程序,它将从键盘输入两个数字,然后输出它们的和。 .MODEL SMALL .STACK 100H.DATAINPUT_MSG1 DB Enter the first number: $INPUT_MSG2 DB 13, 10, Enter the second number: $RESULT_MSG DB 13, 10, The sum is: $N…

2024 FIC取证比赛wp

本次竞赛容器挂载密码为: 2024Fic@杭州Powered~by~HL!2024年4月,卢某报案至警方,声称自己疑似遭受了“杀猪盘”诈骗,大量钱财被骗走。卢某透露,在与某公司交流过程中结识了员工李某。李某私下诱导卢某参与赌博游戏,起初资金出入均属正常。但随后,李某称赌博平台为提升安…

建设电池超级工厂?从MES开始

锂离子电池产量的增长令人震惊。为了支持电动汽车 (EV) 制造能力的提高,电池需求预计到 2030 年将达到 9.3 太瓦时,比 2020 年的 水平增长1,600%以上。 虽然亚洲在产能方面继续处于领先地位,但目前计划在欧洲新建 38 个电池超级工厂&#xf…

剁手党必看——转转红包使用规则与最优组合计算全解析

​ 1、省钱攻略基础之“了解平台红包使用规则” 2、举个栗子 3、最优红包组合计算方法进化过程 3.1、初代“笛卡尔乘积”版 3.2、二代“边算边比较Map聚合”版 3.3、三代“边算边比较数组索引定位”版 4、总结 1、省钱攻略基础之“了解平台红包使用规则” 规则一&#x…

【只显示某一层,其它层隐藏】- PCB板工艺及AD软件配置

在pcb文件视图下,按下字母L,弹出如下框, 选择view options 在single layer mode 勾选ON,就可以隐藏其他层 单层显示效果 方法二:shitfs快捷键

抖音赚钱可以看看这些小众赛道,很多人都赚到了自己的第一个一百万!2024适合小白入手的项目!白手起家新手小白创业真经

抖音创业最大的魅力是什么? 如果你还想创业,还想在抖音这个赛道上发光发热,不妨停下来思考一下这个问题。 那就是可以让一个及其小众的小品类的产品,捅破天花板!达到一个不可思议的销售额!这就是我的答案&…

[Cmake Qt]找不到文件ui_xx.h的问题?有关Qt工程的问题,看这篇文章就行了。

前言 最近在开发一个组件,但是这个东西是以dll的形式发布的界面库,所以在开发的时候就需要上层调用。如果你是很懂CMake的话,ui_xx.h的文件目录在$下 然后除了有关这个ui_xx.h,还有一些别的可以简单聊聊的 一、父子工程组织,或者说依赖关系 在使用CMake进行开发的时候,一…

第50期|GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练Transformer(GPT)、人工智能生成内容(AIGC)以及大语言模型(LLM)等安全领域应用的知识。在这里,您可以找…

Linux之手把手教会修改网卡名称【转载】

一、为什么要修改网卡名称在早期的linux系统中,网卡名称常常以传统的命名方式eth0、eth1、eth2来命名。 例如,CentOS 6之前,网络接口使用连续号码命名:eth0、eth1等,但是,如果再新增硬件设备,也有可能会被识别成 eth0,eth1等。 CentOS 7开始,改变了网卡设备命名规则,…