用Python实现时间序列模型实战——Day 15: 时间序列模型的选择与组合

news2024/11/24 17:26:24
一、学习内容
1. 模型选择的标准与方法(如 AIC、BIC)

在时间序列建模中,模型的选择是非常重要的,常用的模型选择标准包括 AIC (Akaike Information Criterion)BIC (Bayesian Information Criterion)

  • AIC (Akaike Information Criterion): AIC 衡量模型的拟合优度和复杂度之间的权衡。其公式为:

\text{AIC} = -2 \log(L) + 2k

其中 L 是模型的似然函数,k 是模型参数的个数。AIC 值越小,模型越优。

  • BIC (Bayesian Information Criterion): BIC 是基于贝叶斯信息准则的模型选择标准,公式为:

\text{BIC} = -2 \log(L) + k \log(n)

其中 n 是样本量。BIC 比 AIC 更加倾向于选择简单模型。

2. 时间序列模型的组合预测方法

组合预测 是通过将多个不同模型的预测结果进行加权组合,期望能提高预测准确性。组合预测可以减轻单一模型的局限性,平滑不同模型的偏差。

常用的组合预测方法有:

  • 简单平均法:不同模型的预测结果取平均值。
  • 加权平均法:根据模型的表现,给予不同模型不同的权重。
3. 基于不同模型的加权组合预测

通过使用不同时间序列模型(如 ARIMA、SARIMA、ETS 模型等),可以进行加权组合预测。我们可以使用 AIC 或 BIC 值来决定各模型的权重,权重越低的模型被赋予更大的权重。

二、实战案例

使用不同时间序列模型进行组合预测,在这个案例中,我们将使用 ARIMA、SARIMA 和 Holt-Winters 三种不同的时间序列模型进行组合预测,并比较组合预测与单一模型的效果。

1. 生成模拟时间序列
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.arima.model import ARIMA
from statsmodels.tsa.holtwinters import ExponentialSmoothing
from statsmodels.tsa.statespace.sarimax import SARIMAX

# 生成模拟的时间序列数据
np.random.seed(42)
n_obs = 150
time = pd.date_range(start='2000-01-01', periods=n_obs, freq='M')
trend = 0.1 * np.arange(n_obs)
seasonal = 10 * np.sin(2 * np.pi * time.month / 12)
noise = np.random.normal(0, 1, n_obs)
data = trend + seasonal + noise

# 创建数据框
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 模型
arima_model = ARIMA(ts_data['Value'], order=(1, 1, 1)).fit()
arima_forecast = arima_model.forecast(steps=12)
arima_aic = arima_model.aic

# 构建并拟合 SARIMA 模型
sarima_model = SARIMAX(ts_data['Value'], order=(1, 1, 1), seasonal_order=(1, 1, 1, 12)).fit()
sarima_forecast = sarima_model.forecast(steps=12)
sarima_aic = sarima_model.aic

# 构建并拟合 Holt-Winters 模型
hw_model = ExponentialSmoothing(ts_data['Value'], trend='add', seasonal='add', seasonal_periods=12).fit()
hw_forecast = hw_model.forecast(steps=12)
hw_aic = hw_model.aic

# 绘制各模型的预测结果
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'), arima_forecast, label='ARIMA Forecast')
plt.plot(pd.date_range(start=ts_data.index[-1], periods=12, freq='M'), sarima_forecast, label='SARIMA Forecast')
plt.plot(pd.date_range(start=ts_data.index[-1], periods=12, freq='M'), hw_forecast, label='Holt-Winters Forecast')
plt.title('Forecasts of Different Models')
plt.legend()
plt.show()

代码解释:

  • 使用 ARIMA、SARIMA 和 Holt-Winters 三种模型对时间序列数据进行拟合,并对未来 12 个月进行预测。
  • 获取每个模型的 AIC 值,作为模型优劣的评估指标。

结果输出:

3. 加权组合预测
# 加权组合预测,权重根据 AIC 值反比计算
total_aic = 1/arima_aic + 1/sarima_aic + 1/hw_aic
arima_weight = (1/arima_aic) / total_aic
sarima_weight = (1/sarima_aic) / total_aic
hw_weight = (1/hw_aic) / total_aic

combined_forecast = arima_weight * arima_forecast + sarima_weight * sarima_forecast + hw_weight * hw_forecast

代码解释:

  • 根据每个模型的 AIC 值,计算各自的权重。AIC 越小,模型越优,因此权重根据 AIC 值的倒数计算。
  • 使用加权组合方法,对三个模型的预测结果进行组合,得到最终的组合预测。
4. 结果可视化
# 绘制组合预测结果
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'), combined_forecast, label='Combined Forecast', linestyle='--')
plt.title('Combined Forecast Using ARIMA, SARIMA, and Holt-Winters')
plt.legend()
plt.show()

# 打印各模型的AIC值和权重
print(f"ARIMA AIC: {arima_aic}, Weight: {arima_weight}")
print(f"SARIMA AIC: {sarima_aic}, Weight: {sarima_weight}")
print(f"Holt-Winters AIC: {hw_aic}, Weight: {hw_weight}")

代码解释:

  • 绘制各个模型的单独预测结果,并绘制加权组合后的预测结果。

结果输出:

ARIMA AIC: 736.542904871795, Weight: 0.00031402143071579
SARIMA AIC: 417.8555476646313, Weight: 0.0005535172574926239
Holt-Winters AIC: 0.23149108424296116, Weight: 0.9991324613117917

 三、结果分析:

  1. AIC 值比较:每个模型的 AIC 值用于评估模型的优劣。AIC 越小,模型的拟合效果越好。
  2. 单一模型预测:我们分别绘制了 ARIMA、SARIMA 和 Holt-Winters 模型的预测结果。
  3. 加权组合预测:最终的组合预测曲线结合了各个模型的优势,提供了更加稳健的预测结果。
四、总结

在本案例中,我们通过 AIC 值选择了最佳的模型,并通过加权组合预测方法,结合了 ARIMA、SARIMA 和 Holt-Winters 模型的预测结果。组合预测能够减轻单一模型可能带来的偏差,通常能提高预测准确性。

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

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

相关文章

U盘管控软件|禁止拷贝怎么解决?防止U盘拷贝的6款专业软件推荐

某公司员工将U盘插入公司电脑拷贝了重要的研发资料,随后该员工跳槽至竞争对手公司,导致公司商业机密外泄,造成了巨大的经济损失。 随着移动设备的普及,U盘的使用为工作带来了便利,但同时也增加了数据泄密的风险。这一案…

记一次knife4j文档请求异常 SyntaxError: Unexpected token ‘<‘, ... is not valid JSON

knife4j页面报错问题定位 前几天开发新接口,开发完成后想使用knife4j测试一下接口功能,突然发现访问页面报错提示:knife4j文档请求异常,但之前运行还是正常的,想想会不会与升级依赖有关系,启动其他微服务发…

非标金属零件加工的质量与效率是如何体现的?

在现代工业制造领域中,非标金属零件加工以其独特的方式实现了质量与效率的完美融合,成为推动众多行业发展的关键力量。时利和将详细解析非标金属零件加工的质量与效率是如何体现的? 一、先进设备保障高效加工 非标金属零件加工往往依赖于先进的加工设备…

从文字到世界:2024外语阅读大赛报名开启,赛氪网全程护航

中国外文局CATTI项目管理中心与中国外文界联合宣布,将举办2024年外语阅读大赛,旨在激发外语学习兴趣,选拔并培养优秀的语言应用人才,同时向世界展示和传播具有中国特色的优秀文化。此次大赛旨在激发外语学习兴趣,选拔优…

arm64高速缓存基础知识

高速缓存的替换策略 随机法:随机地确定替换的高速缓存行,由一个随机数产生器产生随机数来确认替换行 FIFO法:选择最先调入的高速缓存行进行替换 LRU法:最少使用的行优先替换。 高速缓存的共享属性 内部共享的高速缓存通常指的…

50ETF期权交易对手方是谁?对手方怎么交易?

今天期权懂带你了解50ETF期权交易对手方是谁?对手方怎么交易?上证50ETF期权投资作为目前金融业呼声较高的投资品种,其实与其他类型的金融产品相比,风险是相对较低的了,因为对于投资者而言,亏损只会影响到权…

《mkcert介绍及使用》

🤖 作者简介:水煮白菜王 ,一位资深前端劝退师 👻 👀 文章专栏: 前端专栏 ,记录一下平时在博客写作中,总结出的一些开发技巧✍。 感谢支持💕💕💕 关…

如何在 DigitalOcean Droplet 云服务器上部署 Next.js 应用

Next.js 是一个流行的 React 框架,可轻松构建服务器渲染的 React 应用程序。在本教程中,我们将介绍如何使用 Nginx 作为反向代理,在 DigitalOcean 的 droplet 云主机上部署 Next.js 应用程序。以下是逐步指南,假设你已经准备好部署…

数学建模笔记—— 线性规划

数学建模笔记—— 线性规划 线性规划1. 模型引出1.1 线性规划模型的三要素1.2 线性规划模型建立步骤1.3 线性规划的表现形式1.4 线性规划的模型特点 2.典型例题3. python代码求解3.1 求解KK升级的问题3.2 求解投资收益问题 线性规划 在人们的生产实践中,经常会遇到…

jenkins工具的介绍和gitlab安装

使用方式 替代手动,自动化拉取、集成、构建、测试;是CI/CD持续集成、持续部署主流开发模式中重要工具;必须组件 jenkins-gitlab,代码公共仓库服务器(至少6G内存);jenkins-server,需…

【LoRa】对TX与RX的TOA时间的理解

目录 1 前言2 解释说明3 延申-计算TOA 1 前言 大家可能已经知道在射频传输中,TOA(Time on Air)是指本包传输所需时间。本章主要来讨论如何理解这段时间,并从发送端和接收端一起来理解。本章是基于LoRa所做的测试,但我…

OutBrain原生广告新赛道助力欧美流量变现优势与实战策略

揭秘欧美流量变现新蓝海:OutBrain原生广告的优势与实战策略 在数字化时代,流量即金钱的观念深入人心,尤其是对于欧美市场而言,高效、精准的流量变现策略成为了众多网站主、博主及内容创作者关注的焦点。OutBrain,作为…

凭什么要买净水器?

近年来,购买净水器的人越来越多,净水器似乎成了一件必不可少的家电。 但仍有部分人保持着传统的观念,认为喝自来水烧开的白开水是最健康的,净水器都是商家炒作出来的,不可信。 可事实是这样吗?其实你家水…

多语言ASO – 本地化的10个技巧

ASO优化是一个复杂的领域,即使你只关注讲英语的用户。如果您想面向国际受众并在全球范围内发展您的应用程序业务,您必须在App Store和Google Play Store上本地化应用程序的产品页面。不过,应用程序商店本地化的过程也有很多陷阱。 应用商店本…

U盘数据恢复秘籍:四款软件的亲测推荐!

U盘作为便捷的存储工具被广泛使用,但随之而来的是数据丢失的风险。面对U盘中的宝贵资料不慎丢失,如何高效、安全地恢复成为关键。推荐几款亲测好用的U盘数据恢复软件! 第一款:福昕数据恢复 直达链接:www.pdf365.cn/f…

elementui Cascader 级联选择器的使用总结

实现效果 技术要点总结如下: 1、点击添加自动增加多行,实现自主选择增加多条节点数据 2、节点地址使用的是Cascader 级联选择器,需要动态生成,涉及到一个技术要点是:因v-modal只能获取value不能获取label,故…

CCF编程能力等级认证GESP—C++7级—20240907

CCF编程能力等级认证GESP—C1级真题 单选题(每题 2 分,共 30 分)判断题(每题 2 分,共 20 分)编程题 (每题 25 分,共 50 分)小杨寻宝矩阵移动 单选题(每题 2 分,共 30 分&…

Spring AOP,通知使用,spring事务管理,spring_web搭建

spring AOP AOP概述 AOP面向切面编程是对面向对象编程的延续(AOP (Aspect Orient Programming),直译过来就是 面向切面编程,AOP 是一种编程思想,是面向对象编程(OOP)的一种补充。) 面向切面编…

开放系统,面向各类业务需求可提供定制化服务的智慧物流开源了

智慧物流视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。构建基于Ai技术的…

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中,能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候,一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具! 365在线转文字 直达链接&…