数据预测算法-指数平滑法-1

在时间序列中,我们需要基于该时间序列当前已有的数据来预测其在之后的走势,三次指数*滑(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]. DataMarket: International Airline Passengers

[3]. Wikipedia: Exponential Smoothing

指数*滑法相比于移动*均法,它是一种特殊的加权*均方法。简单移动*均法用的是算术*均数,*期数据对预测值的影响比远期数据要大一些,而且越*的数据影响越大。指数*滑法正是考虑了这一点,并将其权值按指数递减的规律进行分配,越接*当前的数据,权重越大;反之,远离当前的数据,其权重越小。指数*滑法按照*滑的次数,一般可分为一次指数*滑法、二次指数*滑法和三次指数*滑法等。然而一次指数*滑法适用于无趋势效应、呈*滑趋势的时间序列的预测和分析,二次指数*滑法多适用于呈线性变化的时间序列预测。


以上作为记录使用,转发而来。

posted @ 2018-11-29 14:59  枫子_dan  阅读(8550)  评论(0编辑  收藏  举报