时间序列挖掘-三次指数平滑法(Holt-Winters)
2018-02-28 18:01
519 查看
一、为何这个方法被称为“指数”平滑法?要找出答案,展开它的递推关系式即可知道:
从这里可以看出,在指数平滑法中,所有先前的观测值都对当前平滑值产生了影响,但它们所起的作用随着参数 的幂的增大而逐渐减小。那些相对较早的观测值所起的作用相对较小,这也就是指数变动形态所表现出来的特性。从某种程度上来说,指数平滑法就像是拥有无限记 忆且权值呈指数级递减的移动平均法。
二、三次指数平滑法 三次指数平滑算法可以对同时含有趋势和季节性的时间序列进行预测,该算法是基于一次指数平滑和二次指数平滑算法的。一次指数平滑算法基于以下的递推关系:
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.四、重要说明 一次指数平滑所得的计算结果可以在数据集范围之外进行扩展,因此也就可以用来进行预测。预测也非常简单:
其中, 是最后一个已经算出来的值。也就是说,一次指数平滑法得出的预测在任何时候都是一条直线。刚刚描述的一次指数平滑法适用于没有总体趋势的时间序列。如果用来处理有总体趋势的序列,平滑值将往往滞后于原始数据,除非 的值接近1,但这样一来就会造成不够平滑。 二次指数平滑法保留了趋势的详细信息,从而改正了这个缺点。换句话说,我们保留并更新两个量的状态:平滑后的信号和平滑后的趋势。它有两个等式和两个拌合参数:
我们先看看第二个等式。这个等式描述了平滑后的趋势。当前趋势的未平滑“值”是当前平滑值和上一个平滑值的差;也就是说,当前趋势告诉我们在上一个 时间步长里平滑信号改变了多少。要想使趋势平滑,我们用一次指数平滑法对趋势进行处理,并使用拌合参数 。为获得平滑信号,我们像上次那样进行一次混合,但要同时考虑到上一个平滑信号及趋势。第一个等式的最后那个项可以对当前平滑信号进行估计——假设在单个 时间步长里我们保持着上一个趋势。 若要利用该计算结果进行预测,我们就取最后那个平滑值,然后每增加一个时间步长,就在该平滑值上增加一次最后那个平滑趋势:
最后,我们给三次指数平滑法添加第三个量,用来描述季节性。我们有必要区分一下累加式和累乘式季节性,累加式对应的等式:
累乘式的等式:
其中,pi 是指“周期性”部分, 是这个周期的长度。前面的等式中也包含预测的等式。
所有的指数平滑方法都是基于递推关系的,这表明我们要先设定初始值才能使用它们。选择什么样的初始值并不特别重要:指数式衰减规律说明所有的指数平滑方法的“记忆”能力都是很短的,只需经过几个时间步长,初始值的影响就会变得微乎其微。一些合理的初始值:
且
对三次指数平滑法而言,我们必须初始化一个完整的“季节”的值,不过我们可以简单地设置为全1(针对累乘式)或全0(针对累加式)。只有当序列的长度较短时,我们才需要慎重考虑初始值的选取。本文主要参考以下网上资源进行整理:http://www.dataguru.cn/article-3235-1.html以上博客原文如下:在时间序列中,我们需要基于该时间序列当前已有的数据来预测其在之后的走势,三次指数平滑(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
从这里可以看出,在指数平滑法中,所有先前的观测值都对当前平滑值产生了影响,但它们所起的作用随着参数 的幂的增大而逐渐减小。那些相对较早的观测值所起的作用相对较小,这也就是指数变动形态所表现出来的特性。从某种程度上来说,指数平滑法就像是拥有无限记 忆且权值呈指数级递减的移动平均法。
二、三次指数平滑法 三次指数平滑算法可以对同时含有趋势和季节性的时间序列进行预测,该算法是基于一次指数平滑和二次指数平滑算法的。一次指数平滑算法基于以下的递推关系:
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.四、重要说明 一次指数平滑所得的计算结果可以在数据集范围之外进行扩展,因此也就可以用来进行预测。预测也非常简单:
其中, 是最后一个已经算出来的值。也就是说,一次指数平滑法得出的预测在任何时候都是一条直线。刚刚描述的一次指数平滑法适用于没有总体趋势的时间序列。如果用来处理有总体趋势的序列,平滑值将往往滞后于原始数据,除非 的值接近1,但这样一来就会造成不够平滑。 二次指数平滑法保留了趋势的详细信息,从而改正了这个缺点。换句话说,我们保留并更新两个量的状态:平滑后的信号和平滑后的趋势。它有两个等式和两个拌合参数:
我们先看看第二个等式。这个等式描述了平滑后的趋势。当前趋势的未平滑“值”是当前平滑值和上一个平滑值的差;也就是说,当前趋势告诉我们在上一个 时间步长里平滑信号改变了多少。要想使趋势平滑,我们用一次指数平滑法对趋势进行处理,并使用拌合参数 。为获得平滑信号,我们像上次那样进行一次混合,但要同时考虑到上一个平滑信号及趋势。第一个等式的最后那个项可以对当前平滑信号进行估计——假设在单个 时间步长里我们保持着上一个趋势。 若要利用该计算结果进行预测,我们就取最后那个平滑值,然后每增加一个时间步长,就在该平滑值上增加一次最后那个平滑趋势:
最后,我们给三次指数平滑法添加第三个量,用来描述季节性。我们有必要区分一下累加式和累乘式季节性,累加式对应的等式:
累乘式的等式:
其中,pi 是指“周期性”部分, 是这个周期的长度。前面的等式中也包含预测的等式。
所有的指数平滑方法都是基于递推关系的,这表明我们要先设定初始值才能使用它们。选择什么样的初始值并不特别重要:指数式衰减规律说明所有的指数平滑方法的“记忆”能力都是很短的,只需经过几个时间步长,初始值的影响就会变得微乎其微。一些合理的初始值:
且
对三次指数平滑法而言,我们必须初始化一个完整的“季节”的值,不过我们可以简单地设置为全1(针对累乘式)或全0(针对累加式)。只有当序列的长度较短时,我们才需要慎重考虑初始值的选取。本文主要参考以下网上资源进行整理:http://www.dataguru.cn/article-3235-1.html以上博客原文如下:在时间序列中,我们需要基于该时间序列当前已有的数据来预测其在之后的走势,三次指数平滑(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
相关文章推荐
- 机器学习 数据挖掘 推荐系统 时间序列挖掘-预测算法-三次指数平滑法(Holt-Winters)
- 时间序列挖掘-预测算法-三次指数平滑法(Holt-Winters)
- 时间序列挖掘-三次指数平滑法(Holt-Winters)
- 时间序列挖掘-预测算法-三次指数平滑法(Holt-Winters)
- 三次指数平滑法-Holt-Winters模型
- 三次指数平滑法(Holt-Winters)
- R语言与数据分析之八:时间序列--霍尔特指数平滑法
- (源码)关于A->B*->D的时间序列频繁模式挖掘的思考 1.26更新
- Python数据挖掘建模 chapter_8 时间序列算法
- 时间序列频繁模式挖掘:A->(EFG)->C 模式的思考
- 时间序列挖掘-动态时间归整原理及实现(Dynamic Time Warping, DTW)
- 时间序列数据挖掘综述
- 时间序列数据挖掘
- 时间序列数据挖掘(英文部分看不懂)
- 时间序列数据挖掘综述
- 小象数据分析和数据挖掘(豆瓣数据案例,时间序列分析和金融数据,金融数据分析案例)
- Python数据挖掘--时间序列
- 时间序列分析--指数平滑法
- 时间序列数据挖掘综述
- R语言与数据分析之八:时间序列--霍尔特指数平滑法