龙空技术网

时间序列预测技术之从平均法到指数平滑法的推进

林梦龙的供应链物流 245

前言:

眼前大家对“平滑计算”大体比较珍视,看官们都想要学习一些“平滑计算”的相关知识。那么小编在网摘上汇集了一些对于“平滑计算””的相关资讯,希望你们能喜欢,咱们快快来学习一下吧!

不点 林梦龙的供应链物流 关注我,我哪来码这么多字?[耶]

笔者在上一篇《为什么要清洗数据》提到了在很多利用时间序列分析技术进行未来预测时,都基本上会接触到四个重要的因素,分别是水平,趋势,季节性和噪声。而时间序列的预测技术,大部分都是对应这些因素来实施的。

平均法

平均法是最基本的一种预测方法。就是把过去的各期数据采取平均计算的方法,得到的平均值作为下一期的预测值。如下图,平均值4939就是作为下一期,即2020年1月的预测值。

平均法最大的优势就是通过平均的方式,消除了起伏的波动,当中包含难以剔除出来的噪声,当然如果没有进行事前的数据清晰,这个平均过程,同样也会把季节性因素,趋势因素等带来的波动起伏,一并进行削弱。这样的好处和不利处各有,有些偶发性的因素不会在未来重新反映,这样平均而减少波动影响,自然对预测带来好处,另一方面,有些因素是规律性的,会在未来不断重复反映,而时间序列技术,就是把过去规律重新应用在未来上,把这种因素带来的波动抹去,那么某种意义上就让预测变得失去规律。

一般来说,平均法就是累积过去的数据,这样随着数据量的累积,平均值会变得不贴近实际,甚至可以形容为迟钝,从而变得不太可靠。

当查看一下过去36个月的数据时,采用全部数据计算的平均值和仅仅只采用过去12个月的平均值来作为预测值,可以看出,当计算全部数据时,预测值显得和最近的实际值不太贴合。

采用全部数据进行预测的时候,时间历经越久的数据往往对现状就越不敏感,这种数据会让预测值滞后于实际状况。而且,预测的一个重要观点就是越近的数据越能反映现状。为此,有些时候采用平均法,就会舍弃相当一部分的“陈旧”数据,截取最近的数据来进行预测,从而避免受到旧有信息的影响。

这种做法固然能够克服“陈旧”数据的影响,不过截取哪一段时间的数据作为计算依据,是一个不容易的抉择。

还有一个值得注意的问题是,如果数据具备趋势和季节性因素,平均法并非一个较好的选择,因为它会抹去这些可以应用到未来的波动因素。

移动平均法

移动平均法可以说是对平均法打了一个补丁。平均法在采用较多数据的时候,“陈旧”数据带来的影响会容易使得预测值变得不对现状敏感,但是舍弃”陈旧“数据而只选取最新数据,固然可取,不过有时陈旧数据依然存在其应用价值,完全弃去又不全合适。那么平均移动就是对于这点进行改进。

它并不会对所有数据一次性进行平均,而是选取一定的期数来进行移动的平均。当然这个期数越大,那么其值就会越接近平均法的计算结果,期数和平均法的所有数据完全相同时,实际上就是平均法了。移动平均法选择期数越短,预测对水平的反应就越强。

以下是选取3期和6期数据进行移动平均的比较。

以折线图形式表示

通过比较看出,三个月的移动平均比较能反映起伏,而6个月的移动平均,由于期数更多,消除了更多的起伏因素,从而显得变化更加平稳。

和平均法一样,当数据含有季节性因素,趋势时,移动平均还是有点缺陷,还是会消除这些可能会在未来反映的因素,不过期数越短,消除得越少,还是多少能应用在未来预测上。如果数据只有水平和噪声因素的话,它可以需要少量的数据并且能够把最新数据的敏感性反映出来。

不过移动平均面临的问题是,应该选择多少期数据作为计算依据。同时,移动平均法对于每期数据的权重都是一样的。

指数平滑法

指数平滑法本质上可以说是移动平均法,只不过它赋予每期的权重并非都是一样的,而是对于近期的数据赋予更多的权重,而对于较远的“陈旧‘数据则赋予较少的权重。这么一来,就让预测值可以拥有更多对于近期变化的敏感性。

指数平滑可以根据使用指数的多少分为一指数平滑,双指数平滑,三指数平滑。注意,这里双指数平滑是使用了两个指数进行平滑,而有些书籍,文章说的是一指数平滑之后,再继续平滑多一次(多称为二次指数平滑,就是一个指数平滑了两次)。因此注意区分,不要混肴。指数使用α,β,γ来作为指数符号。

一指数平滑,就是通过选取指数α,并通过其大小来赋予不同的权重。α值为最近一次实际需求所占的比例,而1-α是之前的预测值所占的比例。

公式是

本期预测值= α * 上期实际值 + (1-α)* 上期预测值

对于指数的选择,当时间序列数据呈稳定的水平趋势时,应选较小的α值,一般在0.05-0.2之间;当时间序列数据有波动,但长期趋势变化不大,可选稍大的α值,常在0.1-0.4之间;当时间序列数据波动很大,长期趋势变化幅度较大,是明显且迅速的上升或下降趋势时,宜选择较大的α值,可在0.6-0.8之间,以使模型灵敏度高些,迅速跟上数据的变化;当时间序列数据是上升(或下降)的发展趋势,α应取较大的值,在0.6-1之间。

以下示例,并没有经过验证,因此指数α只是选择0.8作为示例使用,其中2019年1月的预测值是4800,因此用2019年的1月的实际值5000和预测值4800,以及选择平滑指数0.8作计算。

从2019年1月数据开始进行平滑,那么到了2022年预测数据,经历了很多期的数据,历史的权重就变得越小,从2021年数据到2019年的数据的权重,呈现指数级别的衰减,这也是称为指数平滑的缘由。

α指数同时也决定了上期实际值和上期预测值的权重分配,当α值越大,意味着分配给实际值的权重越大,反之,则分配给预测值的权重越大。那么实际值越大权重越大,变得对现实变化越敏感,从而起伏也容易越大,而分配给预测值越大,则让预测变得平稳。通过上图三个月和六个月的平均移动线比较,也可以看出这个特点。

不过,一指数平滑仅仅是对水平的平滑。

那么再加上趋势这个因素,就要使用到双指数平滑(也被称为holt指数平滑)。这个就是在水平的基础上,再加上趋势这个因素进行平滑。

公式是

本期水平部分=α*本期需求实际值 + (1-α)*(上期水平部分+上期趋势部分)(1)

本期趋势部分=β*(本期水平部分-上期水平部分)+(1-β)*上期趋势(2)

下期预测=本期水平部分 + 本期趋势部分(3)

公式分为三部分,就是先计算水平和趋势的估计,然后水平和趋势的相加。

笔者选择0.9和0.1作为α和β值,当然以上参数并没有经过验证,并非最适合的选择,只为演示。其中2019年1月的水平值和趋势分为4800和300,那么通过以上的三个公式,就可以得到其预测值。

其中α值代表水平,β值代表的是趋势,这两个参数选择的值越大,表示越受到最新数据的影响越大,预测模型对此更敏感,反之也就越平稳。可以参看上图的对比,取值0.9的水平,起伏很大,而取值0.1的趋势则平稳。读者不妨自行调整参数,看看变化。

除了,水平,趋势,当然还有一个因素:季节性。这个时候,就要出动三指数平滑了。一指数平滑,指数对应的是水平因素,双指数平滑,对应的水平和趋势,那么三指数自然也是刚刚好,一人分配一个。

三指数平滑法,也被称为holt-winter指数平滑,在双指数平滑的基础上添加了季节性因素。一个平均每个月销售5000单位的某产品,但如果某个月销售出6500单位的数量,它是平均每月水平的1.3倍,这个1.3可以称为季节性系数,表示在该月的销售比起没有季节性影响的情况下高出30%。

三指数平滑的公式是

本期水平部分=α*(本期需求实际值/上期季节性系数) + (1-α)*(上期水平部分+上期趋势部分)(1)

本期趋势部分=β*(本期水平部分-上期水平部分)+(1-β)*上期趋势(2)

本期季节性系数=γ*(本期需求实际值/本期水平部分)+(1-γ)*上期季节性系数 (3)

下期预测=(本期水平部分 + 本期趋势部分*期数)*上期对应季节性系数(4)

在这些公式中,2和3的公式,实际上也和一指数平滑一样,都是对实际值和预测值的权重比例分配。

其中4的公式有点难,所谓上期对应季节性系数,简单地理解,就是利用上一年度的同一时期的季节性系数。

参见以下示例,其中各参数是未经验证,并非最优选择。

对于2019年的季节性系数,最简单的做法就是当月数值除以全年平均值。

当预测2020年的1月数据时,就使用2019年的1月的季节性系数,而预测2020年的3月数据时,就使用2019年的3月季节性系数。如此类推,预测2021年的5月数值时,使用的是2020年的5月的季节性系数。

对应的图例

当然,本文并非全面解释和说明各种预测法的应用,数据存在不合理和篡改情况,同时各参数选择也并非经过验证,因此读者可参考,并可自行计算选择求解。

这里说明的是,时间序列分析技术为了把过去数据的规律应用到未来的预测,并在预测中装入相应的变化因素,才有了从平均法到三指数平滑的层层推进,都是了什么和克服什么问题的。

当然,聪明的读者,可能会留意到笔者并没有在平均法或者移动平均法中写入某种方法,相信读者可以知悉。

标签: #平滑计算