用Python实现时间序列模型实战——Day 16: 时间序列预测方法

news2024/12/25 12:33:20
一、学习内容
1. 一步预测与多步预测的区别与方法
  • 一步预测: 一步预测指的是仅预测下一个时间步的值。模型只预测未来一个时间点,然后终止。这种预测方法通常用于短期预测,且误差较小。

  • 多步预测: 多步预测指的是预测多个未来时间点。多步预测可以分为两种方法:

    • 直接多步预测:同时预测多个未来时间点的值。
    • 递归多步预测:先进行一步预测,然后将预测值用于下一步的输入,继续预测后续的多个时间点。
2. 时间序列的滚动预测与滑动窗口方法
  • 滚动预测: 滚动预测是一种递归多步预测方法,在每一步预测后,将预测值作为下一个时间步的输入,并滚动窗口前进。这种方法适合于连续预测,但误差可能随着预测步长增加而累积。

  • 滑动窗口: 滑动窗口方法是将一定数量的过去观测值作为窗口输入,预测下一个时间点的值。随着时间步进,窗口不断前移,用新的观测值替换旧的观测值。

3. 预测区间的计算

预测区间(或置信区间)表示模型预测值的不确定性范围。通常我们使用模型的残差来计算预测区间,它是对未来某个时间点值的估计范围,通常包含 95% 或 99% 的可能性。

预测区间的计算公式为:

\text{Forecast Interval} = \hat{y}_t \pm z \times \sigma

其中 \hat{y}_t 是预测值,z 是正态分布下的临界值(例如对于 95% 置信区间,z \approx 1.96),\sigma是预测的标准误差。

二、实战案例

我们将使用 statsmodels 对时间序列数据进行一步预测和多步预测,并计算预测区间。

1. 数据生成

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.arima.model import ARIMA

# 生成模拟的时间序列数据
np.random.seed(42)
n_obs = 150
time = pd.date_range(start='2000-01-01', periods=n_obs, freq='M')
data = 0.5 * np.arange(n_obs) + np.random.normal(0, 1, n_obs)

# 创建数据框
ts_data = pd.DataFrame({'Date': time, 'Value': data})
ts_data.set_index('Date', inplace=True)

# 绘制时间序列
plt.figure(figsize=(10, 6))
plt.plot(ts_data['Value'], label='Original Data')
plt.title('Simulated Time Series Data')
plt.legend()
plt.show()

代码解释:

  • 我们生成了一个模拟时间序列,包含趋势和噪声,用于模型训练和预测。

结果输出:

2. 一步预测
# 构建 ARIMA 模型 (p=1, d=1, q=1)
arima_model = ARIMA(ts_data['Value'], order=(1, 1, 1)).fit()

# 一步预测 (One-step forecast)
one_step_forecast = arima_model.forecast(steps=1)
one_step_conf_int = arima_model.get_forecast(steps=1).conf_int()

print(f"One-step forecast: {one_step_forecast}")
print(f"One-step forecast confidence interval: \n{one_step_conf_int}")

代码解释:

  • 使用 ARIMA 模型进行一步预测,并输出预测值和置信区间。预测区间表示模型预测值的不确定性范围。

结果输出:

One-step forecast: 2012-07-31    74.700013
Freq: M, dtype: float64
One-step forecast confidence interval: 
            lower Value  upper Value
2012-07-31    71.990793    77.409233
3. 多步预测
# 多步预测 (Multi-step forecast)
multi_step_forecast = arima_model.forecast(steps=12)
multi_step_conf_int = arima_model.get_forecast(steps=12).conf_int()

# 绘制多步预测结果
plt.figure(figsize=(10, 6))
plt.plot(ts_data.index, ts_data['Value'], label='Original Data')
plt.plot(pd.date_range(start=ts_data.index[-1], periods=12, freq='M'), multi_step_forecast, label='Multi-step Forecast')
plt.fill_between(pd.date_range(start=ts_data.index[-1], periods=12, freq='M'),
                 multi_step_conf_int.iloc[:, 0],
                 multi_step_conf_int.iloc[:, 1], color='gray', alpha=0.3, label='Confidence Interval')
plt.title('Multi-step Forecast with Confidence Intervals')
plt.legend()
plt.show()

代码解释:

  • 使用 ARIMA 模型进行未来 12 个月的多步预测,并绘制预测结果及其置信区间。置信区间反映了预测的不确定性。

结果输出:

4. 滚动预测
# 滚动预测 (Rolling forecast)
history = [x for x in ts_data['Value'][:120]]
rolling_predictions = list()
for t in range(30):
    model = ARIMA(history, order=(1, 1, 1))
    model_fit = model.fit()
    yhat = model_fit.forecast()[0]
    rolling_predictions.append(yhat)
    history.append(ts_data['Value'][120 + t])

# 绘制滚动预测结果
plt.figure(figsize=(10, 6))
plt.plot(ts_data.index, ts_data['Value'], label='Original Data')
plt.plot(ts_data.index[120:150], rolling_predictions, label='Rolling Forecast', linestyle='--')
plt.title('Rolling Forecast')
plt.legend()
plt.show()

代码解释:

  • 滚动预测是一种逐步更新预测的方法。我们使用历史数据进行预测,然后将新预测值加入历史数据中,重复此过程以进行多步预测。

结果输出:

三、结果分析

1. 一步预测结果
  • 输出了下一步的预测值和置信区间。置信区间通常围绕预测值展开,显示了预测值的可能范围。
2. 多步预测结果
  • 多步预测显示了未来 12 个月的预测值及其置信区间。由于多步预测是递归进行的,预测误差可能会随着时间的推移而增加。
3. 滚动预测结果
  • 滚动预测结果展示了 30 个时间步的逐步预测。滚动预测适合于需要连续更新预测值的场景。

四、总结

通过使用一步预测、多步预测和滚动预测方法,我们可以为不同场景下的时间序列数据生成合理的预测结果。结合置信区间,我们可以评估预测值的准确性和不确定性。

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

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

相关文章

好书推荐!《Transformer与扩散模型:生成式AI实战指南》,附赠PDF!

《Transformer 和扩散模型的生成式 AI 实用指南》 是一本关于生成式人工智能的技术指南,特别关注了Transformer和扩散模型在AI领域的应用。 这本大模型书籍已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】 这本…

三、数组————相关算法题探讨(持续更新中)

数组中相关算法题探讨 前言一、二分查找1.1 思路分析1.2 数组遍历的做法1.2 二分查找的做法1.2.1 二分查找定义1.2.2 二分查找代码实现(方法一)1.2.3 二分查找代码实现(方法二) 二、移除数组中的元素2.1 思路分析2.2 三种解法2.2.…

yolov5 自训练模型转 tensorrt 及测试

文章目录 一、准备yolov5自训练模型二、下载tensorrtx源码三、从pt模型生成wts模型四、修改tensorrtx源码4.1 修改 yololayer.h4.2 修改 yolov5.cpp 五、编译运行tensorrt/yolov5 在yolov5训练完模型后,将其转换为tensorrt格式,可以加速推理时间&#xf…

基于单片机的仔猪喂饲系统设计

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设…

【Authing身份云-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…

音频处理学习,部分有代码

操作步骤整理 pip install audiomentations官方文档 audiomentations documentation (iver56.github.io) 官网:Core IO and DSP — librosa 0.10.2 documentation 语音信号处理:librosa-CSDN博客 安装依赖 pip install librosa 加载音频文件 ibro…

走进低代码报表开发(二):高效报表设计新利器

在前面的文章中,我们已经详细介绍了勤研低代码开发平台的报表数据源可视化设计,接下来,让我们一起来继续了解勤研低代码平台的报表设计,在当今数字化快速发展的时代,高效便捷的开发工具对于企业和开发者来说至关重要。…

股票Alpha模型的案例实现

一:股票Alpha模型的介绍 股票Alpha模型是一种量化投资策略,它旨在通过各种数学和统计方法来预测股票或其他金融资产的未来表现,并以此获取超越市场平均水平的超额收益。Alpha模型的核心思想是识别市场中的Alpha,即与市场波动无关…

centos7搭建harbor私有镜像仓库

centos7搭建harbor私有镜像仓库 1.准备工作 1.1更换软件源 #更换阿里yum源 wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo yum makecache#更换阿里docker源 yum install -y yum-utils yum-config-manager --add-repo http://mi…

如何鉴定各类组件未授权情况

kubelet https://10.211.55.7:10250/healthz 存在授权情况 未授权 dockersock 2375开出来就是未授权 etcd apiserver 6443 8080

php+mysql日志审计管理系统

phpmysql日志审计管理系统 一、系统介绍二、系统展示1.用户登陆2.监控日志3.监控规则4.用户管理 四、其他1.其它系统 一、系统介绍 本系统实现了:用户登陆、日志审计、监控规则、用户管理。 二、系统展示 1.用户登陆 2.监控日志 3.监控规则 4.用户管理 四、其他 …

java实现文本相似度计算

需求 **文本推荐:**有多个文本字符串,如何设计一个简单的统计方法(从词频的角度设计),来计算出多个文本字符串两两之间的相似度,并输出大于指定相似度阈值的文本 分析理解 使用Java实现文本相似度计算的…

9月产品更新 | 超10项功能升级,快来看看你的需求上线了吗?

Smartbi用户可以在官网(PC端下载),更新后便可以使用相关功能,也可以在官网体验中心体验相关功能。 接下来,我们一起来看看都有哪些亮点功能更新吧。 ▎插件商城 Smartbi麦粉社区的应用市场新增了“插件”模块&#xf…

Python(PyTorch和TensorFlow)图像分割卷积网络导图(生物医学)

🎯要点 语义分割图像三层分割椭圆图像脑肿瘤图像分割动物图像分割皮肤病变分割多模态医学图像多尺度特征生物医学肖像多类和医学分割通用图像分割模板腹部胰腺图像分割分类注意力网络病灶边界分割气胸图像分割 Python生物医学图像卷积网络 该网络由收缩路径和扩…

《黑神话悟空》四大弟子三十六难解锁方法

在《黑神话悟空》的神秘世界中,探索和战斗是永恒的主题。对于许多玩家而言,解锁游戏中的成就不仅是对技巧的挑战,也是对游戏深度理解的证明。今天,就让我们一起深入探索如何解锁“四大弟子三十六难”这一成就,让你的旅…

基于协同过滤算法+SpringBoot+Vue+MySQL的商品推荐系统

系统展示 用户前台界面 管理员后台界面 系统背景 当前的网络技术,软件技术等都具备成熟的理论基础,市场上也出现各种技术开发的软件,这些软件都被用于各个领域,包括生活和工作的领域。随着电脑和笔记本的广泛运用,以及…

SmartNews如何赋能日本市场解锁购买力强劲广告营销新篇章

SmartNews如何赋能日本市场解锁购买力强劲广告营销新篇章 在数字化浪潮席卷全球的今天,日本市场以其独特的消费文化和强大的购买力,成为了众多品牌竞相角逐的舞台。而SmartNews,作为一款集新闻聚合、个性化推荐与深度内容分析于一体的智能新…

[Linux]:文件(上)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:Linux学习 贝蒂的主页:Betty’s blog 1. C语言文件操作 C语言文件操作接口如下,详情可参照——C语言文…

零基础国产GD32单片机编程入门(十九)红外避障传感器模块实战含源码

文章目录 一.概要二.红外避障模块主要参数1.模块引脚定义2.模块特点3.模块原理图 三.GD32单片机红外避障模块检测实验四.工程源代码下载五.小结 一.概要 红外避障模块具有一对红外线发射与接收管,发射管发射出一定频率的红外线,当检测遇到障碍物时&…

HTML5( HTML5 、CSS3) 第一天

HTML5 第一天 HTML5 第一天一、什么是 HTML5二、HTML5 新增标签三、多媒体音频标签四、多媒体视频标签五、新增 input 标签六、新增表单属性七、CSS3 新特性八、CSS3 属性选择器九、结构伪类选择器十、nth-child 参数详解十一、nth-child 和 nt-of-type 的区别十二、伪元素选…