指数平滑法(Exponential Smoothing,ES)

2023-11-16

目录

1 指数平滑

2 一次指数平滑预测(又叫简单指数平滑,simple exponential smoothing, SES)

2.1 定义

2.2 例题

3 二次指数平滑法(Holt’s linear trend method)

3.1 定义

3.2 例题

4 三次指数平滑预测(Holt-Winters’ seasonal method)

4.1 定义

4.2 例题

5 加权系数a的选择

6 Holt Winter线性和季节性指数平滑法

6.1 Holt Winter线性指数平滑法

6.2 Holt Winter季节性指数平滑法

7 python实现

7.1 一次指数平滑

7.2 二次指数平滑

7.3 三次指数平滑


1 指数平滑

        在做时序预测时,一个显然的思路是:认为离着预测点越近的点,作用越大。比如我这个月体重100斤,去年某个月120斤,显然对于预测下个月体重而言,这个月的数据影响力更大些。假设随着时间变化权重以指数方式下降——最近为0.8,然后0.8**2,0.8**3…,最终年代久远的数据权重将接近于0。将权重按照指数级进行衰减,这就是指数平滑法的基本思想。

        指数平滑法有几种不同形式:一次指数平滑法针对没有趋势和季节性的序列,二次指数平滑法针对有趋势但没有季节性的序列,三次指数平滑法针对有趋势也有季节性的序列。“Holt-Winters”有时特指三次指数平滑法。

        所有的指数平滑法都要更新上一时间步长的计算结果,并使用当前时间步长的数据中包含的新信息。它们通过”混合“新信息和旧信息来实现,而相关的新旧信息的权重由一个可调整的参数来控制。

        产生背景:指数平滑由布朗提出、他认为时间序列的态势具有稳定性规则性,所以时间序列可被合理地顺势推延;他认为最近的过去态势,在某种程度上会持续的未来,所以将较大的权数放在最近的资料。

        基本原理:指数平滑法移动平均法中的一种,其特点在于给过去的观测值不一样的权重,即较近期观测值的权数比较远期观测值的权数要大。根据平滑次数不同,指数平滑法分为一次指数平滑法、二次指数平滑法和三次指数平滑法等。但它们的基本思想都是:预测值是以前观测值的加权和,且对不同的数据给予不同的权数,新数据给予较大的权数,旧数据给予较小的权数。

       方法应用:指数平滑法是生产预测中常用的一种方法。也用于中短期经济发展趋势预测,所有预测方法中,指数平滑是用得最多的一种。

       指数平滑法的基本公式是: 

       式中,

  • St--时间t的平滑值;
  • yt--时间t的实际值;
  • St − 1--时间t-1的平滑值;
  • a--平滑常数,其取值范围为[0,1];

由该公式可知:

  1. S是 y和 St − 1 的加权算数平均数,随着 a 取值的大小变化,决定 y和 St − 1 对 S的影响程度,当a取1时,St = yt;当a取0时,St = St − 1。
  2. St具有逐期追溯性质,可探源至St − t + 1为止,包括全部数据。其过程中,平滑常数以指数形式递减,故称之为指数平滑法。指数平滑常数取值至关重要。平滑常数决定了平滑水平以及对预测值与实际结果之间差异的响应速度。平滑常数a越接近于1,远期实际值对本期平滑值影响程度的下降越迅速;平滑常数a越接近于 0,远期实际值对本期平滑值影响程度的下降越缓慢。由此,当时间数列相对平稳时,可取较大的a;当时间数列波动较大时,应取较小的a,以不忽略远期实际值的影响。生产预测中,平滑常数的值取决于产品本身和管理者对良好响应率内涵的理解。
  3. 尽管St包含有全期数据的影响,但实际计算时,仅需要两个数值,即 y和 St − 1,再加上一个常数a,这就使指数滑动平均具逐期递推性质,从而给预测带来了极大的方便。
  4. 根据公式S_1=a\cdot y_1+(1-a)S_0,当欲用指数平滑法时才开始收集数据,则不存在y0。无从产生S0,自然无法据指数平滑公式求出S1,指数平滑法定义S1为初始值。初始值的确定也是指数平滑过程的一个重要条件。

  如果能够找到y1以前的历史资料,那么,初始值S1的确定是不成问题的。数据较少时可用全期平均、移动平均法;数据较多时,可用最小二乘法。但不能使用指数平滑法本身确定初始值,因为数据必会枯竭。

  如果仅有从y1开始的数据,那么确定初始值的方法有:

  1)取S1等于y1;

  2)待积累若干数据后,取S1等于前面若干数据的简单算术平均数,如:S1=(y1+ y2+y3)/3等等。

2 一次指数平滑预测(又叫简单指数平滑,simple exponential smoothing, SES)

2.1 定义

       当时间数列无明显的趋势变化,可用一次指数平滑预测。其预测公式为:

       

        式中, y_{t+1}^\prime 为 t + 1 期的预测值,即本期(期)的平滑值St; yt为 期的实际值; y_{t}^\prime 为 期的预测值,即上期的平滑值St − 1 。

       该公式又可以写作: y_{t+1}^\prime = y_{t} + a (y^{t}-y_{t}^\prime)。可见,下期预测值又是本期预测值与以a为折扣的本期实际值与预测值误差之和。

        初始值y1和y2一般设为y1。   或者y1定为前三个数的平均值。

        可以看出,在指数平滑法中,所有先前的观测值都对当前的平滑值产生了影响,但它们所起的作用随着参数 的幂的增大而逐渐减小。那些相对较早的观测值所起的作用相对较小。同时,称 α 为记忆衰减因子可能更合适——因为 α 的值越大,模型对历史数据“遗忘”的就越快。从某种程度来说,指数平滑法就像是拥有无限记忆(平滑窗口足够大)且权值呈指数级递减的移动平均法。

α的选择:

        一次指数平滑所得的计算结果可以在数据集及范围之外进行扩展,因此也就可以用来进行预测。预测方式为:

        

         是最后一个已经算出来的值。h等于1代表预测的下一个值。即一次指数平滑预测的未来多个值都是相等的。

2.2 例题

       已知某种产品最近15个月的销售量如下表所示:     

        用一次指数平滑值预测下个月的销售量y16。

        为了分析加权系数a的不同取值的特点,分别取a=0.1,a=0.3,a=0.5 计算一次指数平滑值,并设初始值为最早的三个数据的平均值,以= 0.5的一次指数平滑值计算为例,有

        

        计算得到下表:

        

        按上表可得时间15月对应的19.9  26.2  28.1可以分别根据预测公式来预测第16个月的销售量。

        以= 0.5为例:

                

        由上述例题可得结论:

  1. 指数平滑法对实际序列具有平滑作用权系数(平滑系数) 越小,平滑作用越强,但对实际数据的变动反应较迟缓。
  2. 在实际序列的线性变动部分,指数平滑值序列出现一定的滞后偏差的程度随着权系数(平滑系数) 的增大而减少,但当时间序列的变动出现直线趋势时,用一次指数平滑法来进行预测仍将存在着明显的滞后偏差。因此,也需要进行修正。修正的方法也是在一次指数平滑的基础上再进行二次指数平滑,利用滞后偏差的规律找出曲线的发展方向和发展趋势,然后建立直线趋势预测模型,故称为二次指数平滑法。

3 二次指数平滑法(Holt’s linear trend method)

3.1 定义

1)  a为加权系数;

2)  指数平滑法对实际序列具有平滑作用,权系数(平滑系数)越小,平滑作用越强,但是对实际数据的变动反映较迟缓;

3)  在实际序列的线性变动部分,指数平滑值序列出现一定的滞后偏差的程度随着权系数(平滑系数)的增大而减少;但当时间序列的变动出现直线趋势时,用一次指数平滑法来进行预测仍将存在着明显的滞后偏差。因此,也需要进行修正。

4)  修正的方法也是在一次指数平滑的基础上再进行二次指数平滑,利用滞后偏差的规律找出曲线的发展方向和发展趋势,然后建立直线趋势预测模型,故称为二次指数平滑法。

在一次指数平滑的基础上得二次指数平滑 的计算公式为:         

        

式中:

  • ——第t周期的二次指数平滑值;
  • ——第t周期的一次指数平滑值;
  • ——第t-1周期的二次指数平滑值;
  • ——加权系数(也称为平滑系数)。

        二次指数平滑法是对一次指数平滑值作再一次指数平滑的方法。它不能单独地进行预测,必须与一次指数平滑法配合,建立预测的数学模型,然后运用数学模型确定预测值。

        二次指数平滑数学模型:

       

3.2 例题

(1)某地1983年至1993年财政入的资料如下,试用指数平滑法求解趋势直线方程并预测1996年的财政收入

        

                

(2)已知某厂1978~1998年的钢产量如下表所示,试预测1999年、2000年该厂的钢产量。(用excel如何实现平滑指数)

        

        根据二次平滑指数数学模型进行计算a、b值。

        得到趋势线预测模型:y=3994.9+141.2T,从而可以计算出:

        y1999=3994.9+141.2*1=4136.14

        y2000=3994.9+141.2*2= 4277.34

三次指数平滑预测(Holt-Winters’ seasonal method)

4.1 定义

        若时间序列的变动呈现出二次曲线趋势,则需要采用三次指数平滑法进行预测。三次指数平滑是在二次指数平滑的基础上再进行一次平滑,其计算公式为:

        

        三次指数平滑法的预测模型为:

       

4.2 例题

        我国某种耐用消费品1996年至2006年的销售量如表所示,试预测2007、2008年的销售量。

        三次指数平滑的计算表:   

         

        解:通过实际数据序列呈非线性递增趋势,采用三次指数平滑预测方法。解题步骤如下。确定指数平滑的初始值权系数(平滑系数)a设一次、二次指数平滑的初始值为最早三个数据的平均值,即

        

        

        实际数据序列的倾向性变动较明显,权系数(平滑系数)a 不宜取太小,故取a= 0.3。 

        根据指数平滑值计算公式依次计算一次、二次、三次指数平滑值:

                

     计算非线性预测模型的系数at,bt,ct。目前周期数t = 11,将表中的有关数据代入式后分别得

        

        建立非线性预测模型。将各系数代入式(1-18)得    

        

        预测2007年和2008年的产品销售量。2007年,其预测超前周期为T = 1;2008年,其预测超前周期为T = 2。代入模型,得

        

     于是得到2007年的产品销售量的预测值为809万台,2008年的产品销售量的预测值为920万台。预测人员可以根据市场需求因素的变动情况,对上述预测结果进行评价和修正。

5 加权系数a的选择

        在指数平滑法中,预测成功的关键是 的选择的大小规定了在新预测值中新数据和原预测值所占的比例。值愈大,新数据所占的比重就愈大,原预测值所占比重就愈小,反之亦然。

        理论界一般认为有以下方法可供选择:

        经验判断法。这种方法主要依赖于时间序列的发展趋势和预测者的经验做出判断。

1、当时间序列呈现较稳定的水平趋势时,应选较小的α值,一般可在0.05~0.20之间取值;

2、当时间序列有波动,但长期趋势变化不大时,可选稍大的α值,常在0.1~0.4之间取值;

3、当时间序列波动很大,长期趋势变化幅度较大,呈现明显且迅速的上升或下降趋势时,宜选择较大的α值,如可在0.6~0.8间选值,以使预测模型灵敏度高些,能迅速跟上数据的变化;

4、当时间序列数据是上升(或下降)的发展趋势类型,α应取较大的值,在0.6~1之间。

        试算法。根据具体时间序列情况,参照经验判断法,来大致确定额定的取值范围,然后取几个α值进行试算,比较不同α值下的预测标准误差,选取预测标准误差最小的α。

        在实际应用中预测者应结合对预测对象的变化规律做出定性判断且计算预测误差,并要考虑到预测灵敏度和预测精度是相互矛盾的,必须给予二者一定的考虑,采用折中的α值。

指数平滑法的缺点:

  1. 对数据的转折点缺乏鉴别能力,但这一点可通过调查预测法或专家预测法加以弥补。
  2. 长期预测的效果较差,故多用于短期预测。

 指数平滑法的优点:

  1. 对不同时间的数据的非等权处理较符合实际情况。
  2. 实用中仅需选择一个模型参数a 即可进行预测,简便易行。
  3. 具有适应性,也就是说预测模型能自动识别数据模式的变化而加以调整。

6 Holt Winter线性和季节性指数平滑法

6.1 Holt Winter线性指数平滑法

        Holt Winter线性指数平滑法本质上就是二次指数平滑法,可以预测具有趋势的时间序列。

        霍尔特扩展简单指数平滑方法,允许有趋势的数据预测。它只适用于两个等级(多个序列的平均值)和趋势的指数平滑方法。用数学符号表示,现在需要三个等式:一个用于等级,一个用于趋势,一个结合等级与得到预测值Ŷ的趋势:

         

        我们在上述算法中预测的值称为等级。在上面的三个等式中,可以注意到我们增加了等级趋势来生成预测等式。

        作为简单指数平滑法,这里的等级等式表明它是一个观察数的加权平均值和样本内前步预测。趋势等式表明,这是一个基于ℓ(t)−ℓ(t−1)和和b(t−1)的时间t的预测趋势的加权平均值。

        我们将添加这些等式来生成预测等式。也可以通过乘以趋势和等级而不是增加,来生成乘法预测等式。当趋势呈线性上升或下降时,则采用加法等式,而当趋势呈指数下降时,则采用乘法等式。实践表明乘法是一种更稳定的预测,但加性方法更容易理解。

6.2 Holt Winter季节性指数平滑法

        Holt Winter季节性指数平滑本质上就是三次指数平滑法,添加了一个新的参数p来表示平滑后的趋势。

        当一个序列在每个固定的时间间隔中都出现某种重复的模式,就称之具有季节性特征,而这样的一个时间间隔称为一个季节(理解:比如说在一个周内,销量呈现出重复的模式)。

        一个季节的长度k为它所包含的序列点个数。 

        二次指数平滑考虑了序列的baseline和趋势,三次就是在此基础上增加了一个季节分量。类似于趋势分量,对季节分量也要做指数平滑。比如预测下一个季节第3个点的季节分量时,需要指数平滑地考虑当前季节第3个点的季节分量、上个季节第3个点的季节分量...等等。详细的有下述公式(累加法):

                

     其中,  是指“周期性”部分。    

     预测公式如下:

                   

        是这个周期的长度。 

7 python实现

7.1 一次指数平滑

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.holtwinters import SimpleExpSmoothing

x1 = np.linspace(0, 1, 100)
y1 = pd.Series(np.multiply(x1, (x1 - 0.5)) + np.random.randn(100))
ets1 = SimpleExpSmoothing(y1)
r1 = ets1.fit()
pred1 = r1.predict(start=len(y1), end=len(y1) + len(y1)//2)

pd.DataFrame({
    'origin': y1,
    'fitted': r1.fittedvalues,
    'pred': pred1
}).plot(legend=True)
plt.show()

7.2 二次指数平滑

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

from statsmodels.tsa.holtwinters import Holt

x2 = np.linspace(0, 99, 100)
y2 = pd.Series(0.1 * x2 + 2 * np.random.randn(100))
ets2 = Holt(y2)
r2 = ets2.fit()
pred2 = r2.predict(start=len(y2), end=len(y2) + len(y2)//2)

pd.DataFrame({
    'origin': y2,
    'fitted': r2.fittedvalues,
    'pred': pred2
}).plot(legend=True)
plt.show()

7.3 三次指数平滑

无趋势:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

from statsmodels.tsa.holtwinters import ExponentialSmoothing

x3 = np.linspace(0, 4 * np.pi, 100)
y3 = pd.Series(20 + 8 * np.cos(2 * x3) + 2 * np.random.randn(100))
ets3 = ExponentialSmoothing(y3, trend=None, seasonal='add', seasonal_periods=25)
r3 = ets3.fit()
pred3 = r3.predict(start=len(y3), end=len(y3) + len(y3)//2)

pd.DataFrame({
    'origin': y3,
    'fitted': r3.fittedvalues,
    'pred': pred3
}).plot(legend=True)
plt.show()

累加:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

from statsmodels.tsa.holtwinters import ExponentialSmoothing

x3 = np.linspace(0, 4 * np.pi, 100)
y3 = pd.Series(20 + 0.1 * np.multiply(x3, x3) + 8 * np.cos(2 * x3) + 2 * np.random.randn(100))
ets3 = ExponentialSmoothing(y3, trend='add', seasonal='add', seasonal_periods=25)
r3 = ets3.fit()
pred3 = r3.predict(start=len(y3), end=len(y3) + len(y3)//2)

pd.DataFrame({
    'origin': y3,
    'fitted': r3.fittedvalues,
    'pred': pred3
}).plot(legend=True)
plt.show()

累乘:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

from statsmodels.tsa.holtwinters import ExponentialSmoothing

x3 = np.linspace(0, 4 * np.pi, 100)
y3 = pd.Series(20 + 0.1 * np.multiply(x3, x3) + 8 * np.cos(2 * x3) + 2 * np.random.randn(100))
ets3 = ExponentialSmoothing(y3, trend="multiplicative", seasonal='add', seasonal_periods=25)
r3 = ets3.fit()
pred3 = r3.predict(start=len(y3), end=len(y3) + len(y3)//2)

pd.DataFrame({
    'origin': y3,
    'fitted': r3.fittedvalues,
    'pred': pred3
}).plot(legend=True)
plt.show()

https://www.jianshu.com/p/2c607fe926f0

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

指数平滑法(Exponential Smoothing,ES) 的相关文章

随机推荐

  • 景联文科技高质量教育GPT题库:引领教育行业的技术革命

    ChatGPT拉开了大语言题库和生成式AI产业蓬勃发展的序幕 全世界教育科技公司扎堆接入GPT 4 涵盖美国 欧洲 日韩 中东和北非地区等 大语言题库在教育领域中势必将获得更加广阔的应用前景和丰富的应用场景 杭州景联文科技是AI基础数据行业
  • ElasticSearch text 和 keyword 类型

    ElasticSearch text 和 keyword 类型 text 会进行分词 先把对象进行分词处理 然后存入到es中 当使用多个单词进行查询的时候 查不到已经分词过的内容 keyword 不会进行分词 不会对es中的对象进行分词处理
  • FreeRTOS任务创建、删除

    目录 一 FreeRTOS任务创建与删除有关函数 1 1 创建 删除任务的API函数 1 1 1 动态创建任务 1 1 2 静态创建任务 1 1 3 删除任务 二 FreeRTOS任务创建与删除 动态方法 2 1 实例 三 FreeRTOS
  • LeetCode 沙漏的最大总和

    以最中间的的那个元素来移动 整个沙漏移动 class Solution public int maxSum int grid int max 0 int sum 0 for int i 1 i lt grid length 1 i for
  • 【华为OD机试】路灯照明问题【2023 B卷

    华为OD机试 真题 点这里 华为OD机试 真题考点分类 点这里 题目描述 在一条笔直的公路上安装了N个路灯 从位置0开始安装 路灯之间间距固定为100米 每个路灯都有自己的照明半径 请计算第一个路灯和最后一个路灯之间 无法照明的区间的长度和
  • 线上git仓库地址更改,本地如何更改?

    1 进入终端查看本地代码关联的git仓库地址 git remote v 2 删除本地关联的git仓库地址 git remote rm origin 3 本地代码关联新的仓库地址 git remote add origin 新地址 4 再次查
  • 获取BDUSS的简单方式

    BDUSS是登录百度 web wap 后的唯一身份凭证 baidu com 受http only保护 拿到BDUSS就等于拿到帐号的控制权 通行贴吧 知道 百科 文库 空间 百度云等百度主要产品 在 贴吧云签系统 中 需要用到BDUSS进行
  • Linux下查看磁盘使用率及文件和文件夹大小

    原文地址 http blog sina com cn s blog 4ab088470106ge0o html 大家在使用linux的过程中 或许遇到过数据无法入库 无法上传数据等等 这就要多长个心眼 去查看一下磁盘使用率和文件大小吧 这时
  • 贪心+二分解决最大值最小、最小值最大问题

    在刷题时 总会遇到求最大值最小 最小值最大问题 也许它会暗喻是这样的一个问题 对于这样的一个问题 你会发现用dp和枚举都会超时超内存 或者说很麻烦 所以这是一个比较简单的解题方式 二分逼近思想 对于难以直接确定解的问题 采取二分枚举 检验的
  • mysql常见六大约束

    DDL语言 常见约束 约束的含义 一种限制 用于限制表中的数据 为了保证表中的数据的准确性和可靠性 分类 六大约束 1 NOT NULL 非空约束 用于保证该字段的值不能为空 比如姓名 学号等 2 DEFAULT 默认约束 用于保证该字段有
  • Pycharm中放大和缩小代码界面

    直接上图流程 打开文件 点击设置 选择 keymap 右侧搜索框输入 increase 搜索出来之后双击 选择 Add Mouse Shortcut 然后在操作框按住 Ctrl 并将鼠标滚轮上滑 完成设置 一直点击OK关闭界面即可 之后按住
  • TortoiseGit如何变动项目Ip地址

    第一步 进到项目所在目录 找到git文件夹里的config文件 第二步 用记事本打开config文件 修改ip地址信息并保存即可
  • Spring的内部bean

    当一个bean仅被用作另一个bean的属性时 才能被声明为一个内部bean 为了定义inner bean 在Spring的基于XML的配置元数据中 可以在
  • 激光炸弹题解

    维生素C吃多了会上火 个人CSDN博文目录 2022蓝桥杯 目录 题目链接 题解 题目链接 题解 1 不同目标可能在同一位置所以 w 2 可能在 5000 5000 所以要算到5001 3 long long 超内存 include
  • EasyPoi实现Excel数据导入

    EasyPoi是一个基于Java的Excel导入导出框架 主要提供了Excel读取 写入等基本功能 并且支持通过注解来定义Excel文件的格式 添加maven依赖
  • 【WinForm】WebView2-个性化浏览器-桌面程序开发详解

    这是一个桌面程序上的浏览器 是用插件WebView2开发的浏览器桌面程序 功能体验堪比Edge浏览器 相比使用Chrome内核插件开发浏览器来说 还是用插件WebView2开发来得简单一些 接下来讲一讲实现过程 开发之前 建议先看看微软的
  • spring boot工程创建(idea无法联网)

    1 进入spring官网Spring Home 2 点击spring boot 3 翻到最下边 点击此处 或者直接进入网址Spring Initializr 4 设定项目基本内容 5 选择对应依赖 6 删除依赖 7 创建项目 8 将项目压缩
  • 自监督学习-MoCo-论文笔记

    论文 Momentum Contrast for Unsupervised Visual Representation Learning CVPR 2020 最佳论文提名 用动量对比学习的方法做无监督的表征学习任务 动量的理解即是指数移动平
  • 初学者写一个程序(一)(PyCharm配置Python解释器)

    5 PyCharm配置Python解释器 1 首先安装 PyCharm 完成之后 打开它会显示如下所示的界面在file中也有settings 点击后一样的操作 图六 在此界面中 可以手动给 PyCharm 设置 Python 解释器 点击图
  • 指数平滑法(Exponential Smoothing,ES)

    目录 1 指数平滑 2 一次指数平滑预测 又叫简单指数平滑 simple exponential smoothing SES 2 1 定义 2 2 例题 3 二次指数平滑法 Holt s linear trend method 3 1 定义