博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
时间序列挖掘-预测算法-三次指数平滑法(Holt-Winters)
阅读量:4921 次
发布时间:2019-06-11

本文共 1595 字,大约阅读时间需要 5 分钟。

  在时间序列中,我们需要基于该时间序列当前已有的数据来预测其在之后的走势,三次指数平滑(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数据集上累乘平滑指数算法的效果更好。

参考文献:

  [1]. 数据之魅:基于开源工具的数据分析

  [2].

  [3].

转载于:https://www.cnblogs.com/kemaswill/archive/2013/04/01/2993583.html

你可能感兴趣的文章
实践实践(dom)jQuery属性操作
查看>>
C#再识委托
查看>>
【NIO】Java NIO之缓冲
查看>>
共享经济
查看>>
用ildasm/ilasm修改IL代码
查看>>
deepin 15.3 安装数据库MariaDB10.0
查看>>
怎么解决svn清理失败且路径显示乱码问题
查看>>
python学习 第一天 python基础
查看>>
(转)eclipse下配置tomcat7的几个重要问题,值得一看
查看>>
浅谈对存储过程的理解:什么是存储过程,及它的优点等!
查看>>
Java生鲜电商平台-购物车模块的设计与架构
查看>>
HTML5 隐藏地址栏 兼容IOS 与安卓
查看>>
【ElementUI】日期选择器时间选择范围限制
查看>>
JNI和NDK
查看>>
java并发 —— Lock
查看>>
Docker中配置MySQL并实现远程访问
查看>>
C# 反射创建对象,包括创建引用外部程序集类的实例
查看>>
WPF Demo3
查看>>
ubuntu 16.04 sudo nopasswd
查看>>
php xmlreader simplexml等读取xml
查看>>