【多图】时间序列 预测算法-三次指数平滑法(Holt-Winters)

在时间序列中,我们需要基于该时间序列当前已有的数据来预测其在之后的走势,三次指数平滑(Triple/Three Order Exponential Smoothing,Holt-Winters)算法可以很好的进行时间序列的预测。

时间序列数据一般有以下几种特点:1.趋势(Trend) 2. 季节性(Seasonality)。

趋势描述的是时间序列的整体走势,比如总体上升或者总体下降。下图所示的时间序列是总体上升的:

 

季节性描述的是数据的周期性波动,比如以年或者周为周期,如下图:

 

三次指数平滑算法可以对同时含有趋势和季节性的时间序列进行预测,该算法是基于一次指数平滑和二次指数平滑算法的。

一次指数平滑算法基于以下的递推关系:

si=αxi+(1-α)si-1

其中α是平滑参数,si是之前i个数据的平滑值,取值为[0,1],α越接近1,平滑后的值越接近当前时间的数据值,数据越不平滑,α越接近0,平滑后的值越接近前i个数据的平滑值,数据越平滑,α的值通常可以多尝试几次以达到最佳效果。

一次指数平滑算法进行预测的公式为:xi+h=si,其中i为当前最后的一个数据记录的坐标,亦即预测的时间序列为一条直线,不能反映时间序列的趋势和季节性。

二次指数平滑保留了趋势的信息,使得预测的时间序列可以包含之前数据的趋势。二次指数平滑通过添加一个新的变量t来表示平滑后的趋势:

si=αxi+(1-α)(si-1+ti-1)

ti=ß(si-si-1)+(1-ß)ti-1

二次指数平滑的预测公式为 xi+h=si+hti 二次指数平滑的预测结果是一条斜的直线。

三次指数平滑在二次指数平滑的基础上保留了季节性的信息,使得其可以预测带有季节性的时间序列。三次指数平滑添加了一个新的参数p来表示平滑后的趋势。

三次指数平滑有累加和累乘两种方法,下面是累加的三次指数平滑

si=α(xi-pi-k)+(1-α)(si-1+ti-1)

ti=ß(si-si-1)+(1-ß)ti-1

pi=γ(xi-si)+(1-γ)pi-k 其中k为周期

累加三次指数平滑的预测公式为: xi+h=si+hti+pi-k+(h mod k) 注意:数据之魅P88此处有错误,根据Wikipedia修正。

下式为累乘的三次指数平滑:

si=αxi/pi-k+(1-α)(si-1+ti-1)

ti=ß(si-si-1)+(1-ß)ti-1

pi=γxi/si+(1-γ)pi-k 其中k为周期

累乘三次指数平滑的预测公式为: xi+h=(si+hti)pi-k+(h mod k) 注意:数据之魅P88此处有错误,根据Wikipedia修正。

α,ß,γ的值都位于[0,1]之间,可以多试验几次以达到最佳效果。

s,t,p初始值的选取对于算法整体的影响不是特别大,通常的取值为s0=x0,t0=x1-x0,累加时p=0,累乘时p=1.

我们使用DataMarket的International Airline Passengers数据来测试累加和累乘三次指数平滑算法的性能,该数据记录的是每月的国际航线乘客数:

下图为使用累加三次指数平滑进行预测的效果:其中红色为源时间序列,蓝色为预测的时间序列,α,ß,γ的取值为0.45,0.2,0.95:

 

下图为累乘三次指数平滑进行预测的效果,α,ß,γ的取值为0.4,0.05,0.9:

 

可以看到三次指数平滑算法可以很好的保存时间序列数据的趋势和季节性信息,在International Airline Passengers数据集上累乘平滑指数算法的效果更好。

时间: 2024-09-20 19:37:59

【多图】时间序列 预测算法-三次指数平滑法(Holt-Winters)的相关文章

时间序列预测教程:如何利用 Python 预测波士顿每月持械抢劫案数量?

Jason Brownlee:时间序列预测法是一个过程,而获得良好预测结果的唯一途径是实践这个过程. 在本教程中,您将了解如何利用Python语言来预测波士顿每月持械抢劫案发生的数量. 本教程所述为您提供了一套处理时间序列预测问题的框架,包括方法步骤和工具,通过实践,可以用它来解决自己遇到的相关问题. 本教程结束之后,您将了解: 如何核查Python环境并准确地定义一个时间序列预测问题. 如何构建一套测试工具链,用于评估模型,开发预测原型.以及如何通过时间序列分析工具更好地理解你的问题. 如何开

手把手教你用 Python 实现针对时间序列预测的特征选择

要将机器学习算法应用于时间序列数据,需要特征工程的帮助. 例如,单变量的时间序列数据集由一系列观察结果组成,它们必须被转换成输入和输出特征,才能用于监督性学习算法. 但这里有一个问题:针对每个时间序列问题,你可以处理的特征类型和数量,却并没有明确的限制.当然,古典的时间序列分析工具(如相关图correlogram)可以帮助评估滞后变量(lag variables),但并不能直接帮助开发者对其他类型的特征进行选择,例如从时间戳(年.月.日)和移动统计信息(如移动平均线moving average)

时间序列预测教程;OpenAI 谈对抗样本:自然语言处理入门 | AI 开发者日报

Jason Brownlee 的时间序列预测教程 这是澳大利亚机器学习专家 Jason Brownlee 撰写的教程,提供了一套用 Python 语言处理时间序列预测问题的模板.该教程一步步向读者展示了应该用什么工具.如何操作,以及为什么这样操作.它使用了波士顿持械抢劫案数量作为案例,旨在解决的问题是对波士顿未来每月抢劫案的数量做合理预测. 全文包含代码长达两万字,是迄今为止最权威.最详细的时间序列预测入门教程之一.具有相当学习价值. 译文地址:http://www.leiphone.com/n

【彩票】彩票预测算法(一):离散型马尔可夫链模型C#实现

前言:彩票是一个坑,千万不要往里面跳.任何预测彩票的方法都不可能100%,都只能说比你盲目去买要多那么一些机会而已. 已经3个月没写博客了,因为业余时间一直在研究彩票,发现还是有很多乐趣,偶尔买买,娱乐一下.本文的目的是向大家分享一个经典的数学预测算法的思路以及代码.对于这个马尔可夫链模型,我本人以前也只是听说过,研究不深,如有错误,还请赐教,互相学习. 1.马尔可夫链预测模型介绍 马尔可夫链是一个能够用数学方法就能解释自然变化的一般规律模型,它是由著名的俄国数学家马尔科夫在1910年左右提出的

基于图的机器算法 (二)

基于图的机器算法 (二) 编者按:基于图的机器算法学习是一个强大的工具.结合运用模块特性,能够在集合检测中发挥更大作用.本文是基于图的机器算法系列文的第二篇(前情回顾:基于图的机器算法 (一)). 在上一篇文章中,我们进行了使用模块化优化方式来进行集合检测的探索.然而它有个不足,你的图需要适应内存.当你的节点数超过数十亿,边数将变成万亿,这很快就会出现问题. 幸运的是,我们可以利用分布式计算系统来解除这个限制.为此,我们首先需要定义节点的状态,使其包含计算期间所需的所有信息;这将构成在分布式集群

ARIMA模型实例讲解:时间序列预测需要多少历史数据?

时间序列预测,究竟需要多少历史数据? 显然,这个问题并没有一个固定的答案,而是会根据特定的问题而改变. 在本教程中,我们将基于 Python 语言,对模型输入大小不同的历史数据,对时间序列预测问题展开讨论,探究历史数据对 ARIMA 预测模型的性能影响.(雷锋网(公众号:雷锋网)注:ARIMA 全程是 Autoregressive Integrated Moving Average Model,即自回归积分滑动平均模型) 具体来说,在本教程中,我们将: ● 加载标准数据集并输入 ARIMA 模型

【年终分享】彩票数据预测算法(一):离散型马尔可夫链模型实现【附C#代码】

原文:[年终分享]彩票数据预测算法(一):离散型马尔可夫链模型实现[附C#代码] 前言:彩票是一个坑,千万不要往里面跳.任何预测彩票的方法都不可能100%,都只能说比你盲目去买要多那么一些机会而已. 已经3个月没写博客了,因为业余时间一直在研究彩票,发现还是有很多乐趣,偶尔买买,娱乐一下.本文的目的是向大家分享一个经典的数学预测算法的思路以及代码.对于这个马尔可夫链模型,我本人以前也只是听说过,研究不深,如有错误,还请赐教,互相学习. 1.马尔可夫链预测模型介绍[1] 马尔可夫链是一个能够用数学

JavaScript中数据结构与算法(三):链表

  这篇文章主要介绍了JavaScript中数据结构与算法(三):链表,本文分别讲解了单链表与双链表以及增加节和删除节的代码实例,需要的朋友可以参考下 我们可以看到在javascript概念中的队列与栈都是一种特殊的线性表的结构,也是一种比较简单的基于数组的顺序存储结构.由于javascript的解释器针对数组都做了直接的优化,不会存在在很多编程语言中数组固定长度的问题(当数组填满后再添加就比较困难了,包括添加删除,都是需要把数组中所有的元素全部都变换位置的,javascript的的数组确实直接

Win7系统桌面图标变小的三种设置方法

  Win7系统桌面图标变小的三种设置方法           具体设置方法如下: 第一种方法: 最简单的方法,您可以直接在桌面空白位置上单击右鼠标右键,然后从快捷菜单中选择"查看",然后从下级菜单中选择"小图标"即可,如下图所示: 第二种方法: 点击一下桌面,按住ctrl键,然后滚动滑鼠中键,通过放大或者缩小桌面来实现变小Win7桌面图标. 第三种方法:将电脑桌面分辨率调高 通常电脑分辨率越大,桌面就越细腻,图标也就越小,大家可以试试,具体步骤如下: 1.在Win