用Python实现时间序列模型实战——Day 15: 时间序列模型的选择与组合
一、学习内容
1. 模型选择的标准与方法(如 AIC、BIC)
在时间序列建模中,模型的选择是非常重要的,常用的模型选择标准包括 AIC (Akaike Information Criterion) 和 BIC (Bayesian Information Criterion)。
-
AIC (Akaike Information Criterion): AIC 衡量模型的拟合优度和复杂度之间的权衡。其公式为:
其中 是模型的似然函数,
是模型参数的个数。AIC 值越小,模型越优。
-
BIC (Bayesian Information Criterion): BIC 是基于贝叶斯信息准则的模型选择标准,公式为:
其中 是样本量。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_aiccombined_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
三、结果分析:
- AIC 值比较:每个模型的 AIC 值用于评估模型的优劣。AIC 越小,模型的拟合效果越好。
- 单一模型预测:我们分别绘制了 ARIMA、SARIMA 和 Holt-Winters 模型的预测结果。
- 加权组合预测:最终的组合预测曲线结合了各个模型的优势,提供了更加稳健的预测结果。
四、总结
在本案例中,我们通过 AIC 值选择了最佳的模型,并通过加权组合预测方法,结合了 ARIMA、SARIMA 和 Holt-Winters 模型的预测结果。组合预测能够减轻单一模型可能带来的偏差,通常能提高预测准确性。
相关文章:
用Python实现时间序列模型实战——Day 15: 时间序列模型的选择与组合
一、学习内容 1. 模型选择的标准与方法(如 AIC、BIC) 在时间序列建模中,模型的选择是非常重要的,常用的模型选择标准包括 AIC (Akaike Information Criterion) 和 BIC (Bayesian Information Criterion)。 AIC (Akaike Informat…...
大数据之Flink(五)
15、Flink SQL 15.1、sql-client准备 启用Hadoop集群(在Hadoop100上) start-all.sh启用yarn-session模式 /export/soft/flink-1.13.0/bin/yarn-session.sh -d启动sql-client bin/sql-client.sh embedded -s yarn-sessionsql文件初始化 可以初始化模式、环境(流/批…...
SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析
查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但…...
基于 jenkins 的持续测试方案
CI/CD Continuous Integration; Continuous Deployment; 持续集成,将新代码和旧代码一起打包、构建;持续部署,将新构建的包进行部署;持续测试,将新代码、新单元测试一起测试;方案: 公有云DevO…...
我算见识到算法岗transformer面试的难度了
在面试算法岗的时候看到了这篇Transformer面试题,作者梳理一些关于Transformer的知识点,还会陆续更新最新的面试题和讲解答案! 也算是见识到了transformer的面试难度了 1.Transformer为何使用多头注意力机制?(为什么不使用一个头) 2.Tra…...
CommonCollections1
CommonCollections1链 CommonCollections1poc展示调用链分析AbstractInputCheckedMapDecoratorTransformedMapChainedTransformerConstantTransformerInvokerTransformer poc分析通过反射实现Runtime.getRuntime().exec("calc.exe")forNamegetMethodinvoke 依据反射构…...
6、关于Medical-Transformer
6、关于Medical-Transformer Axial-Attention原文链接:Axial-attention Medical-Transformer原文链接:Medical-Transformer Medical-Transformer实际上是Axial-Attention在医学领域的运行,只是在这基础上增加了门机制,实际上也就…...
19_单片机开发常用工具的使用
工欲善其事必先利其器,我们做单片机开发的时候,不管是调试电路还是调试程序,都需要借助一些辅助工具来帮助查找和定位问题,从而帮助我们顺利解决问题。没有任何辅助工具的单片机项目开发很可能就是无法完成的任务,不过…...
最新版微服务项目搭建
一,项目总体介绍 在本项目中,我将使用alibabba的 nacos 作为项目的注册中心,使用 spring cloud gateway 做为项目的网关,用 openfeign 作为服务间的调用组件。 项目总体架构图如下: 注意:我的Java环境是17…...
spring揭秘19-spring事务01-事务抽象
文章目录 【README】【1】事务基本元素【1.1】事务分类 【2】java事务管理【2.1】基于java的局部事务管理【2.2】基于java的分布式事务管理【2.2.1】基于JTA的分布式事务管理【2.2.2】基于JCA的分布式事务管理 【2.3】java事务管理的问题 【3】spring事务抽象概述【3.1】spring…...
基于Matlab的图像去雾系统(四种方法)关于图像去雾的基本算法代码的集合,方法包括局部直方图均衡法、全部直方图均衡法、暗通道先验法、Retinex增强。
基于Matlab的图像去雾系统(四种方法) 关于图像去雾的基本算法代码的集合,方法包括局部直方图均衡法、全部直方图均衡法、暗通道先验法、Retinex增强。 所有代码整合到App designer编写的GUI界面中,包括导入图片,保存处…...
油猴插件录制请求,封装接口自动化参数
参考:如何使用油猴插件提高测试工作效率 一、背景 在酷家乐设计工具测试中,总会有许多高频且较繁琐的工作,比如: 查询插件版本:需要打开Chrome控制台,输入好几个命令然后过滤出版本信息。 查询模型商品&…...
循环购模式!结合引流和复购于一体的商业模型!
欢迎各位朋友,我是你们的电商策略顾问吴军。今天,我将向大家介绍一种新颖的商业模式——循环购模式,它将如何改变我们的消费和收益方式。你是否好奇,为何商家会提供如此慷慨的优惠?消费一千元,不仅能够得到…...
Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧
Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用&…...
c中 int 和 unsigned int
c语言中,char、short、int、int64以及unsigned char、unsigned short、unsigned int、unsigned int64等等类型都可以表示整数。但是他们表示整数的位数不同,比如:char/unisigned char表示8位整数; short/unsigned short表示16位整…...
sheng的学习笔记-AI-话题模型(topic model),LDA模型,Unigram Model,pLSA Model
AI目录:sheng的学习笔记-AI目录-CSDN博客 基础知识 什么是话题模型(topic model) 话题模型(topic model)是一族生成式有向图模型,主要用于处理离散型的数据(如文本集合),在信息检索、自然语言处理等领域有广泛应用…...
html 页面引入 vue 组件之 http-vue-loader.js
一、http-vue-loader.js http-vue-loader.js 是一个 Vue 单文件组件加载器,可以让我们在传统的 HTML 页面中使用 Vue 单文件组件,而不必依赖 Node.js 等其他构建工具。它内置了 Vue.js 和样式加载器,并能自动解析 Vue 单文件组件中的所有内容…...
html+css网页设计 旅行 蜘蛛旅行社3个页面
htmlcss网页设计 旅行 蜘蛛旅行社3个页面 网页作品代码简单,可使用任意HTML辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作)。 获取源码 1&#…...
考拉悠然产品发布会丨以悠然远智全模态AI应用平台探索AI行业应用
9月6日,成都市大模型新技术新成果发布暨供需对接系列活动——考拉悠然专场,在成都市高新区菁蓉汇盛大举行。考拉悠然重磅发布了悠然远智丨全模态AI应用平台,并精彩展示了交通大模型应用——智析快处等最新的AI产品和技术成果。 在四川省科学…...
LLM大模型学习:揭秘LLM应用构建:探究文本加载器的必要性及在LangChain中的运用
构建 LLM 应用为什么需要文本加载器,langchain 中如何使用文本加载器? 在不同的应用场景中需要使用不同的文本内容作为内容的载体,针对不同的类型的文本,langchain 提供了多种文本加载器来帮助我们快速的将文本切片,从…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
