前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >霍尔特-温特斯的时间序列预测

霍尔特-温特斯的时间序列预测

作者头像
磐创AI
发布于 2024-04-03 11:17:18
发布于 2024-04-03 11:17:18
67400
代码可运行
举报
运行总次数:0
代码可运行

背景

我们讨论一组非常知名的预测模型,指数平滑。指数平滑的基本原则是将更多的权重放在最近的观测值上,而在历史观测值上放置更少的权重,以用来预测时间序列。

最基本的指数平滑模型是(有趣的是)简单指数平滑,也称为单一指数平滑。这个模型只预测时间序列的水平,不考虑趋势或季节性。要了解有关此模型的更多信息,请查看我的先前文章:

https://towardsdatascience.com/forecasting-with-simple-exponential-smoothing-dd8f8470a14c

从这个简单模型出发的下一步是霍尔特的线性趋势方法,也称为双指数平滑。顾名思义,该模型包括趋势以及水平。如果想了解有关霍尔特方法的更多信息,请参阅以下链接:

https://towardsdatascience.com/forecasting-with-holts-linear-trend-exponential-smoothing-af2aa4590c18

最后,从霍尔特方法出发的下一步是找到一种方法,将季节性纳入指数平滑模型中。这就是霍尔特-温特斯(三重指数平滑)发挥作用的地方!

在本文中,我们将回顾指数平滑的理论,深入探讨霍尔特-温特斯模型如何包括季节性的数学原理,最后通过Python进行实际示例演示。

霍尔特-温特斯模型理论

简单指数平滑回顾

让我们快速回顾一下简单指数平滑的工作原理:

有关简单指数平滑的详细解释,请参阅我之前的文章:

其中ŷ_{t+1}是我们要预测的值,y_t 是最近观察到的值,ŷ_{t-1} 是我们以前的预测,α 是平滑因子(0 ≤ α ≤ 1)。

该模型的分量形式是:

其中 h 是我们要预测的时间步,l_t = ŷ_{t+1} 明确表示这是模型的水平分量。

霍尔特的线性趋势方法回顾

霍尔特的线性趋势模型将趋势分量引入到预测中:

其中 b_t 是预测的趋势,b_{t-1} 是先前的预测趋势,β 是趋势平滑因子(0 ≤ β ≤ 1)。

有关霍尔特线性趋势方法的详细解释,请参阅我的先前文章。

霍尔特-温特斯

如上所述,霍尔特-温特斯模型通过将季节性纳入预测进一步扩展了霍尔特的线性趋势方法。季节性的添加导致了两种不同的霍尔特-温特斯模型,加法和乘法。

这两种模型之间的区别在于季节性波动的大小。对于加法模型,季节性波动主要是恒定的。然而,对于乘法模型,波动与该特定时间的时间序列值成比例。有关加法和乘法时间序列模型的更多信息,请查看我的先前博客文章:

https://towardsdatascience.com/time-series-decomposition-8f39432f78f9

现在让我们来看看这两种霍尔特-温特斯模型的方程式:

https://otexts.com/fpp3/holt-winters.html

加法模型:

其中 m 是时间序列的季节性,s_t 是季节性预测分量,s_{t-m} 是上一季度的预测,γ 是季节性分量平滑因子(0 ≤ γ ≤ 1-α)。

乘法模型:

这些方程式的细节我们不再详细讨论,它们的目的是计算时间序列的趋势线,并按季节性变化对趋势线上的值进行加权。

值得注意的是,还有其他形式的这些方程,其中包含一个阻尼参数。我们在本文中不涉及这些内容,但感兴趣的读者可以在此处了解更多信息。

够了,让我们不再讨论这些乏味的数学内容,转而在Python中实现这个模型!

Python示例

我们将像往常一样使用美国航空公司的数据集,并使用statsmodel库中的ExponentialSmoothing类来拟合霍尔特-温特斯预测模型。

https://www.statsmodels.org/dev/generated/statsmodels.tsa.holtwinters.ExponentialSmoothing.html

代码语言:javascript
代码运行次数:0
运行
复制
# Import packages
import plotly.graph_objects as go
import pandas as pd
from statsmodels.tsa.holtwinters import SimpleExpSmoothing, Holt, ExponentialSmoothing

# Read in the data
data = pd.read_csv('AirPassengers.csv')
data['Month'] = pd.to_datetime(data['Month'])

# Split train and test
train = data.iloc[:-int(len(data) * 0.2)]
test = data.iloc[-int(len(data) * 0.2):]


def plot_func(forecast1: list[float],
              forecast2: list[float],
              forecast3: list[float],
              title: str,
              save_path: str) -> None:
    """Function to plot the forecasts."""
    fig = go.Figure()
    fig.add_trace(go.Scatter(x=train['Month'], y=train['#Passengers'], name='Train'))
    fig.add_trace(go.Scatter(x=test['Month'], y=test['#Passengers'], name='Train'))
    fig.add_trace(go.Scatter(x=test['Month'], y=forecast1, name='Simple'))
    fig.add_trace(go.Scatter(x=test['Month'], y=forecast2, name="Holt's Linear"))
    fig.add_trace(go.Scatter(x=test['Month'], y=forecast3, name='Holt Winters'))
    fig.update_layout(template="simple_white", font=dict(size=18), title_text=title,
                      width=700, title_x=0.5, height=400, xaxis_title='Date',
                      yaxis_title='Passenger Volume')
    return fig.show()


# Fit simple model and get forecasts
model_simple = SimpleExpSmoothing(train['#Passengers']).fit(optimized=True)
forecasts_simple = model_simple.forecast(len(test))

# Fit Holt's model and get forecasts
model_holt = Holt(train['#Passengers'], damped_trend=True).fit(optimized=True)
forecasts_holt = model_holt.forecast(len(test))

# Fit Holt Winters model and get forecasts
model_holt_winters = ExponentialSmoothing(train['#Passengers'], trend='mul',
                                          seasonal='mul', seasonal_periods=12)\
                                          .fit(optimized=True)
forecasts_holt_winters = model_holt_winters.forecast(len(test))

# Plot the forecasts
plot_func(forecasts_simple, forecasts_holt, forecasts_holt_winters,  "Holt-Winters Exponential Smoothing")

从上图可以看出,霍尔特-温特斯的预测明显是最好的,因为它捕捉到了时间序列的趋势和季节性。

在调用模型时,我们传递了参数seasonal_periods、trend和seasonal给模型对象。从上图可以看出,有明显的年度季节性,因此我们设置seasonal_periods=12。此外,趋势不是很直线,因此它是乘法的,因此trend='multi'。最后,季节性波动不是一些固定的一致值,而是与时间序列的值成比例,因此季节性是乘法的,即seasonal='multi'。

霍尔特-温特斯模型还可以通过执行summary方法进行诊断:

代码语言:javascript
代码运行次数:0
运行
复制
print(model_holt_winters.summary())

平滑度参数smoothing_level、α和smoothing_seasonal、γ相对较高,表明季节性和水平分量经常变化。然而,平滑趋势参数smoothing_trend、β的值相对较小,意味着趋势变化不是很大。

总结

通过讨论可能是最有用的模型霍尔特-温特斯,我们完成了指数平滑家族的介绍。这个模型考虑了趋势和季节性分量,因此可以有效地用来建模大多数时间序列。正如我们的Python示例所示,它很好地捕捉了季节性和趋势分量。

本文中使用的完整代码在我的GitHub上可用:

https://github.com/egorhowell/Medium-Articles/blob/main/Time%20Series/Exponential%20Smoothing/holt_winters.py?source=post_page-----b78ffc322f24

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-03-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 磐创AI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
LLM资料大全:文本多模态大模型、垂直领域微调模型、STF数据集、训练微调部署框架、提示词工程等
自ChatGPT为代表的大语言模型(Large Language Model, LLM)出现以后,由于其惊人的类通用人工智能(AGI)的能力,掀起了新一轮自然语言处理领域的研究和应用的浪潮。尤其是以ChatGLM、LLaMA等平民玩家都能跑起来的较小规模的LLM开源之后,业界涌现了非常多基于LLM的二次微调或应用的案例。本项目旨在收集和梳理中文LLM相关的开源模型、应用、数据集及教程等资料,目前收录的资源已达100+个!
汀丶人工智能
2024/04/29
3K0
LLM资料大全:文本多模态大模型、垂直领域微调模型、STF数据集、训练微调部署框架、提示词工程等
使用LLaMA-Factory对LLM大模型进行微调!训练专属于你的模型!
如今也是出现了各种各样的大模型,如果想要针对性的让他扮演某个角色我们通常采用的是给他输入prompt(提示词)。
MGS浪疯
2024/11/22
1.7K2
92秒 < 75秒?E-EVAL揭露一众大模型不会做小学题目!
随着大型语言模型(LLM)的快速发展,LLM和教育领域的结合变得越来越切。但是,目前还没有一个专门为中国K-12教育领域设计的LLM评估基准。为了准确评估各种LLM在中国K-12教育领域的表现,我们推出了E-EVAL。E-EVAL包括4351道选择题,涵盖了小学、初中和高中阶段,如图 1 所示,涵盖了23个学科,包括小学语文、数学、英语、科学、思想品德,以及初中和高中阶段的各种学科。我们进一步将问题分为两类:文科和理科,理科包括数学、物理、化学等,文科包括语文、英语、历史等。通常来说,理科的难度要高于文科。
zenRRan
2024/02/22
3070
92秒 < 75秒?E-EVAL揭露一众大模型不会做小学题目!
奥林匹克竞赛里选最聪明的AI:Claude-3.5-Sonnet vs. GPT-4o?
上海交通大学生成式人工智能实验室 (GAIR Lab) 的研究团队,主要研究方向是:大模型训练、对齐与评估。‍
机器之心
2024/06/27
3730
奥林匹克竞赛里选最聪明的AI:Claude-3.5-Sonnet vs. GPT-4o?
LLM 大模型学习必知必会系列(五):数据预处理(Tokenizer分词器)、模板(Template)设计以及LLM技术选型
在模型训练过程中,数据及数据处理是最为重要的工作之一。在当前模型训练流程趋于成熟的情况下,数据集的好坏,是决定了该次训练能否成功的最关键因素。
汀丶人工智能
2024/05/26
4.3K0
LLM 大模型学习必知必会系列(五):数据预处理(Tokenizer分词器)、模板(Template)设计以及LLM技术选型
阿里Qwen2正式开源,性能全方位包围Llama-3
斯坦福团队套壳清华大模型的事件不断发酵后,中国模型在世界上开始得到了更多关注。不少人发现,原来中国已经有不少成熟的大模型正在赶超国外。
机器之心
2024/06/17
4730
阿里Qwen2正式开源,性能全方位包围Llama-3
NL2SQL基础系列(2):主流大模型与微调方法精选集,Text2SQL经典算法技术回顾七年发展脉络梳理
MiniCPM是一系列端侧语言大模型,主体语言模型MiniCPM-2B具有2.4B的非词嵌入参数量。在综合性榜单上与Mistral-7B相近(中文、数学、代码能力更优),整体性能超越Llama2-13B、MPT-30B、Falcon-40B等模型。在当前最接近用户体感的榜单MTBench上,MiniCPM-2B也超越了Llama2-70B-Chat、Vicuna-33B、Mistral-7B-Instruct-v0.1、Zephyr-7B-alpha等众多代表性开源大模型。
汀丶人工智能
2024/04/10
1.3K0
NL2SQL基础系列(2):主流大模型与微调方法精选集,Text2SQL经典算法技术回顾七年发展脉络梳理
LLM 大模型学习必知必会系列(一):大模型基础知识篇
2023 年,随着 LLM 技术的发展,中国模型研究机构的开源模型迎来了爆发式的增长:
汀丶人工智能
2024/05/11
3.2K0
LLM 大模型学习必知必会系列(一):大模型基础知识篇
直追GPT-4!李开复Yi-34B新成绩公布:94.08%的胜率超越LLaMA2等主流大模型
在Alpaca经认证的模型类别中,以94.08%的胜率,超越LLaMA2 Chat 70B、Claude 2、ChatGPT!
量子位
2023/12/12
2620
直追GPT-4!李开复Yi-34B新成绩公布:94.08%的胜率超越LLaMA2等主流大模型
性能与效率比拼:开源大语言模型竞逐 | 开源专题 No.76
ChatGLM3 是智谱 AI 和清华大学 KEG 实验室联合发布的新一代对话预训练模型。其主要功能包括更强大的基础模型、更完整的功能支持以及全面开源序列。具体特点如下:
小柒
2024/05/17
2480
性能与效率比拼:开源大语言模型竞逐 | 开源专题 No.76
【2024年必备免费人工智能(AI)API大全】全方位解锁高效开发神器
大家好,我是猫头虎!今天特别为开发者朋友们带来一份 2024年度最全免费AI API清单。💎 无论你是 AI开发新手,还是在寻找更强大工具的资深程序员,这些免费的API都将成为你的得力助手。✅ 它们不仅可以帮你节省成本、提升开发效率,还支持多种场景,包括 自然语言处理、图像生成、语音识别 和 机器学习 等领域,助你轻松玩转AI!📈
猫头虎
2024/11/30
9880
【2024年必备免费人工智能(AI)API大全】全方位解锁高效开发神器
弱智吧:大模型变聪明,有我一份贡献
百度「弱智吧」是个神奇的地方,在这里人人都说自己是弱智,但大多聪明得有点过了头。最近几年,弱智吧的年度总结文章都可以顺手喜提百度贴吧热度第一名。所谓总结,其实就是给当年吧里的弱智发言排个名。
统计学家
2024/04/12
2990
弱智吧:大模型变聪明,有我一份贡献
赶超Gemini Pro,提升推理、OCR能力的LLaVA-1.6太强了
去年 4 月,威斯康星大学麦迪逊分校、微软研究院和哥伦比亚大学研究者共同发布了 LLaVA(Large Language and Vision Assistant)。尽管 LLaVA 是用一个小的多模态指令数据集训练的,却在一些样本上展示了与 GPT-4 非常相似的推理结果。10 月,LLaVA-1.5 重磅发布,通过对原始 LLaVA 的简单修改,在 11 个基准上刷新了 SOTA。
机器之心
2024/02/06
7510
赶超Gemini Pro,提升推理、OCR能力的LLaVA-1.6太强了
《书生·浦语大模型实战营》第5课 学习笔记:LMDeploy 量化部署 LLM 实践
这种说法是片面的,虽然计算机计算定点数和整数比计算浮点数快,但是模型的参数仅仅是以定点或者整数的方式存储,在实际计算时,还需要把定点数和整数反量化为浮点数进行数值计算,再把计算的结果以定点数或整数进行存储,这一步的目的是最大化减少计算精度的损失。
流川疯
2024/07/01
5310
《书生·浦语大模型实战营》第5课 学习笔记:LMDeploy 量化部署 LLM 实践
世界顶尖多模态大模型开源!又是零一万物,又是李开复
模型名为Yi Vision Language(Yi-VL),现已正式面向全球开源。
量子位
2024/01/23
1K0
世界顶尖多模态大模型开源!又是零一万物,又是李开复
数据驱动与 LLM 微调: 打造 E2E 任务型对话 Agent
作者:Thought Agent 社区在对话系统的设计和实现中,传统的基于 Rasa-like 框架的方法往往需要依赖于多个模块的紧密协作,例如我们在之前的文章中提到的基于大模型(LLM)构建的任务型对话 Agent,Thought Agent,其由自然语言理解(NLU)、对话管理(DM)和对话策略(DP)等模块共同协作组成。这种模块化的设计虽然在理论上具有灵活性,但在实践中却带来了诸多挑战,尤其是在系统集成、错误传播、维护更新以及开发门槛等方面。
ThoughtWorks
2024/05/30
9671
数据驱动与 LLM 微调: 打造 E2E 任务型对话 Agent
ChatGLM推出第三代基座大模型在论文阅读、文档摘要和财报分析等方面提升超过50%推理成本降低一半
“ 智谱AI发布了第三代基座大模型ChatGLM3,在模型性能、功能支持、开源序列等方面进行了全面升级。ChatGLM3在语义、数学、推理、代码、知识等不同角度的数据集上测评显示,具有在10B以下的基础模型中最强的性能。同时,ChatGLM3还支持多模态理解、代码增强、联网搜索等新功能,并可支持网络边缘端部署和高效推理。”
技术人生黄勇
2024/07/19
2640
ChatGLM推出第三代基座大模型在论文阅读、文档摘要和财报分析等方面提升超过50%推理成本降低一半
零一万物 Yi 大模型最新评测,英语能力仅次于 GPT-4
继11月初零一万物发布性能优异的 Yi-34B 基座模型后,Yi-34B-Chat 微调模型在11月24日开源上线 ,再度获得全球开发者关注。
AI科技评论
2023/12/12
6920
零一万物 Yi 大模型最新评测,英语能力仅次于 GPT-4
AI大模型应用开发实战(02)-国内外LLM的多模型,强应用
很多同学只知类似ChatGPT或者说对国内的一些比较了解,对国外不了解,所以在这总结。
JavaEdge
2024/08/08
2360
AI大模型应用开发实战(02)-国内外LLM的多模型,强应用
Xinference实战指南:全面解析LLM大模型部署流程,携手Dify打造高效AI应用实践案例,加速AI项目落地进程
Xorbits Inference (Xinference) 是一个开源平台,用于简化各种 AI 模型的运行和集成。借助 Xinference,您可以使用任何开源 LLM、嵌入模型和多模态模型在云端或本地环境中运行推理,并创建强大的 AI 应用。通过 Xorbits Inference,可以轻松地一键部署你自己的模型或内置的前沿开源模型
汀丶人工智能
2024/08/17
4.9K0
Xinference实战指南:全面解析LLM大模型部署流程,携手Dify打造高效AI应用实践案例,加速AI项目落地进程
推荐阅读
LLM资料大全:文本多模态大模型、垂直领域微调模型、STF数据集、训练微调部署框架、提示词工程等
3K0
使用LLaMA-Factory对LLM大模型进行微调!训练专属于你的模型!
1.7K2
92秒 < 75秒?E-EVAL揭露一众大模型不会做小学题目!
3070
奥林匹克竞赛里选最聪明的AI:Claude-3.5-Sonnet vs. GPT-4o?
3730
LLM 大模型学习必知必会系列(五):数据预处理(Tokenizer分词器)、模板(Template)设计以及LLM技术选型
4.3K0
阿里Qwen2正式开源,性能全方位包围Llama-3
4730
NL2SQL基础系列(2):主流大模型与微调方法精选集,Text2SQL经典算法技术回顾七年发展脉络梳理
1.3K0
LLM 大模型学习必知必会系列(一):大模型基础知识篇
3.2K0
直追GPT-4!李开复Yi-34B新成绩公布:94.08%的胜率超越LLaMA2等主流大模型
2620
性能与效率比拼:开源大语言模型竞逐 | 开源专题 No.76
2480
【2024年必备免费人工智能(AI)API大全】全方位解锁高效开发神器
9880
弱智吧:大模型变聪明,有我一份贡献
2990
赶超Gemini Pro,提升推理、OCR能力的LLaVA-1.6太强了
7510
《书生·浦语大模型实战营》第5课 学习笔记:LMDeploy 量化部署 LLM 实践
5310
世界顶尖多模态大模型开源!又是零一万物,又是李开复
1K0
数据驱动与 LLM 微调: 打造 E2E 任务型对话 Agent
9671
ChatGLM推出第三代基座大模型在论文阅读、文档摘要和财报分析等方面提升超过50%推理成本降低一半
2640
零一万物 Yi 大模型最新评测,英语能力仅次于 GPT-4
6920
AI大模型应用开发实战(02)-国内外LLM的多模型,强应用
2360
Xinference实战指南:全面解析LLM大模型部署流程,携手Dify打造高效AI应用实践案例,加速AI项目落地进程
4.9K0
相关推荐
LLM资料大全:文本多模态大模型、垂直领域微调模型、STF数据集、训练微调部署框架、提示词工程等
更多 >
目录
  • 背景
  • 霍尔特-温特斯模型理论
    • 简单指数平滑回顾
    • 霍尔特的线性趋势方法回顾
    • 霍尔特-温特斯
  • Python示例
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档