一文速学-时间序列分析算法之指数平滑法详解+Python代码实现

简介: 一文速学-时间序列分析算法之指数平滑法详解+Python代码实现

前言


前两篇文章已经将时间序列分析算法的移动平均法系列讲的很详细清晰了:


一文速学-时间序列分析算法之加权移动平均法详解+Python代码实现


一文速学-时间序列分析算法之一次移动平均法和二次移动平均法详解+实例代码


相信大家看完都有一定的计算基础以及理解时序预测算法要做的事情,计算原理无非就是根据时间滑窗来预测计算出下一个时间段数据,就是采取的运算策略和运用场景不同,需要选择相应的算法去支撑。指数平滑法总共有三种形式:

089dde9da9734fd4bbcfb75eccf68bf1.png

指数平滑法实际上是一种特殊的加权移动平均法,之前我们在code加权移动平均法就发现仅凭自己设定权重是一件比较不可靠的事,如果遇到变化并不平缓明显的数据时并不能很好的计算出结果。倘若权重能够根据实际情况自我训练调整,那么加权移动平均法就更加有作用。下面就我们来了解指数平滑法是如何做到权重变化的吧。


一、指数平滑法


1.简介


指数平滑法是生产预测中常用的一种方法。也用于中短期经济发展趋势预测,所有预测方法中,指数平滑是用得最多的一种。简单的全期平均法是对时间数列的过去数据一个不漏地全部加以同等利用;移动平均法则不考虑较远期的数据,并在加权移动平均法中给予近期资料更大的权重;而指数平滑法则兼容了全期平均和移动平均所长,不舍弃过去的数据,但是仅给予逐渐减弱的影响程度,即随着数据的远离,赋予逐渐收敛为零的权数。


0b28eaf883af4ad1a0eb6fa051d0b624.png


那么我们以一种通俗易懂的方式来说明:假如我们现在在驾校练车,第一秒的速度为5km/h,第二秒的速度为8km/h,第三秒的速度为10km/h,那么随着时间推进,对于下一个秒数来说,肯定上一秒的数据影响力更大一些。那么我们再来看看接下来的时间段内,数十秒之后,倘若上一时刻的速度的权重为0.9,那么下一时刻经过完了,该权重则需要进行下调。假设随着时间变化权重以指数的方式下降,最近为0.9,那么下一个预测时间段就为,下下一个预测时间段为,以此类推...。将权重按照指数级进行衰减,这就是指数平滑法的基本思想。


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


2.特点


第一,指数平滑法进一步加强了观察期近期观察值对预测值的作用,对不同时间的观察值所赋予的权数不等,从而加大了近期观察值的权数,使预测值能够迅速反映实际的变化。


第二,指数平滑法对于观察值所赋予的权数有伸缩性,可以取不同的权值以改变权数的变化速率。如权值取小值,则权数变化较迅速,观察值的新近变化趋势较能迅速反映于指数移动平均值中。因此,运用指数平滑法,可以选择不同的权值来调节时间序列观察值的均匀程度(即趋势变化的平稳程度)。


3.基本原理


也就是说指数平滑法是在移动平均法基础上发展起来的一种时间序列分析预测法,它是通过计算指数平滑值,配合一定的时间序列预测模型对现象的未来进行预测。其原理是任一期的指数平滑值都是本期实际观察值与前一期指数平滑值的加权平均 。根据平滑次数不同,指数平滑法分为一次指数平滑法、二次指数平滑法和三次指数平滑法等。但它们的基本思想都是:预测值是以前观测值的加权和,且对不同的数据给予不同的权数,新数据给予较大的权数,旧数据给予较小的权数。


4.优缺点


优点


指数平滑法数据需求量小,只需要少数数据即可对未来需求进行预测,对数据存储的需求也非常小,易于进行系统化和自动化。

而且计算也相对比较简单,进行预测建模操作也简单,容易理解且运行成本低。

自适应指数平滑法克服了平滑系数值的选择问题,具有自适应性,预测模型能够自动识别数据变化而加以调整。

Holt双参数指数平滑法和Holt-Winters三参数指数平滑法使用多个平滑系数,能有效的预测和把握时间序列未来的趋势和季节性,从而有效的应对时间序列的变化。


缺点


指数平滑法预测一句来源于历史数据,无法识别诸如价格,广告实时变化波动等因果因素带来的需求变化,不能利用解析性变量进行需求塑造。

指数平滑法较难找到最优的指数平滑系数,对需求变化的调整存在滞后性,无法一定时间内需求突变进行预测。

指数平滑法能很好的预测未来1-3期的需求,但对于更远时期的预测效果不佳。因此指数平滑法只适合做短期预测。


二、一次指数平滑法


1.预测原理及公式


设时间序列为gif.gif为加权系数,gif.gif一次指数平滑公式为:

99314d574f3245759f0028424f0979dc.png

d6af48825cfb437d974841df90e0670a.png

gif.gif为t+1时刻的预测值,即t时刻的平滑值gif.gif/,gif.gif为t时刻的实际值,gif.gif为t时刻的预测值,即为上一时刻的平滑值gif.gif很明显该公式是由移动平均公式改进而来。

上一章我们知道移动平均数的递推公式为:

5b8275c9df26455ba554c0ae45592a00.png

gif.gif作为gif.gif的最佳估计,则有

392ff852bb244402b4832b7d16a59fd0.png

gif.gifgif.gif代替gif.gif即得

4ccaa3afe14d44a385afaeb0ddf3c197.png

我们可以试着把该公式展开,会发现:


1ce05a0dd06949ed86209ae99936db10.png

表明gif.gif是全部历史数据的加权平均,加权系数分别为gif.gif显然有:b056338198894b6391cf31d9423e9b2a.png


由于加权系数符合指数规律,又具有平滑数据的功能,故称为指数平滑。以这种平滑值进行预测,就是一次指数平滑法。预测模型为:


c69166419e5949f792cf2d25c09f175b.png


即:


8b5d41819c424cc3b89592658819db44.png


也就是以第t时刻指数平滑值作为t+1时刻预测值。


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


2.加权系数的选择

在进行指数平滑时,加权系数的选择是很重要的。gif.gif的大小规定了在新预测值中新数据和原预测值所占的比重。gif.gif值越大,新数据所占的比重就越大,原预测值所占的比重就越小,反之亦然。

99314d574f3245759f0028424f0979dc.png

从上面可以看出,新预测值是根据预测误差对原预测值进行修正而得到的。gif.gif的大小则体现了修正的幅度,gif.gif值越大,修正幅度越大,反之越小。

若选取则gif.gif=0c5d3ca1a76204f93821357da8980a167.png即下期预测值就等于本期预测值,在预测过程中不考虑任何新信息;若选取gif.gif=1,则226a1f1a25f54b7e8b31ae03b8aec2dd.png,即下期预测值就等于本期观测值,完全不相信过去的信息。这两种极端情况很难做出正确的预测。因此,\alpha值应根据时间序列的具体性质在0~1之间选择。具体如何选择一般可遵循下列原则:


如果时间序列波动不大,比较平稳,则应取小一点,如(0.1~0.5)。以减少修正幅度,使预测模型能包含较长时间序列的信息;

如果时间序列具有迅速且明显的变化倾向,则应取大一点,如(0.6~0.8)。使预测模型灵敏度高一些,以便迅速跟上数据的变化。

在实际运用上,类似移动平均法,多几个值进行试算,看哪个预测误差小,就采用哪个。


3.初始值的确定


用一次指数平滑法进行预测,除了选择合适的外,还要确定初始值gif.gif。初始值是由预测值估计或指定的。当时间序列的数据较多,比如20个以上,初始值对以后的预测值影响很少,可选用第一期数据为初始值。如果时间序列的数据较少,在20以下时,初始值对以后的预测值影响很大,这时就必须认真研究如何正确确定初始值。一般以最初几期实际值的平均值作为初始值。


4.实例运用


一次指数平滑法相对很简单,我们仍然以某化学反应里,测得生成物浓度y(%)与时间t(min)的数据为例子:


a8e6884e6de7495286b744fe3f848fb9.png


3a7ef9b8cdf744f6a9550e992a98a2b6.png

我们以t为15的时刻对应的数值来预测第16时刻的值

#输入预测集合y以及时间窗口数n,a为加权系数
def SES(y,n,a):
    y_S=[]
    S_0=0
    for i in range(n):
        S_0=y[i]+S_0
    S_0=S_0/n
    for i in range(0,y.size):
        S_i=a*y[i]+(1-a)*S_0
        y_S.append(S_i)
        S_0=S_i
    return y_S
y1=SES(y,3,0.2)
y2=SES(y,3,0.5)
y3=SES(y,3,0.8)

当\alpha为0.2时15时刻为10.02,当为\alpha为0.5时为10.52,当\alpha为0.8时为10.57

那么我们以gif.gif为0.8时为例:

gif.gif

由上述例题可得结论:


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


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

目录
相关文章
|
5天前
|
机器学习/深度学习 存储 算法
近端策略优化(PPO)算法的理论基础与PyTorch代码详解
近端策略优化(PPO)是深度强化学习中高效的策略优化方法,广泛应用于大语言模型的RLHF训练。PPO通过引入策略更新约束机制,平衡了更新幅度,提升了训练稳定性。其核心思想是在优势演员-评论家方法的基础上,采用裁剪和非裁剪项组成的替代目标函数,限制策略比率在[1-ϵ, 1+ϵ]区间内,防止过大的策略更新。本文详细探讨了PPO的基本原理、损失函数设计及PyTorch实现流程,提供了完整的代码示例。
108 10
近端策略优化(PPO)算法的理论基础与PyTorch代码详解
|
2月前
|
机器学习/深度学习 算法
基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真
本项目基于改进遗传优化的BP神经网络进行金融序列预测,使用MATLAB2022A实现。通过对比BP神经网络、遗传优化BP神经网络及改进遗传优化BP神经网络,展示了三者的误差和预测曲线差异。核心程序结合遗传算法(GA)与BP神经网络,利用GA优化BP网络的初始权重和阈值,提高预测精度。GA通过选择、交叉、变异操作迭代优化,防止局部收敛,增强模型对金融市场复杂性和不确定性的适应能力。
208 80
|
2月前
|
机器学习/深度学习 算法
基于遗传优化的双BP神经网络金融序列预测算法matlab仿真
本项目基于遗传优化的双BP神经网络实现金融序列预测,使用MATLAB2022A进行仿真。算法通过两个初始学习率不同的BP神经网络(e1, e2)协同工作,结合遗传算法优化,提高预测精度。实验展示了三个算法的误差对比结果,验证了该方法的有效性。
|
2月前
|
存储 算法 程序员
C 语言递归算法:以简洁代码驾驭复杂逻辑
C语言递归算法简介:通过简洁的代码实现复杂的逻辑处理,递归函数自我调用解决分层问题,高效而优雅。适用于树形结构遍历、数学计算等领域。
|
3月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
99 1
|
3月前
|
存储 缓存 算法
通过优化算法和代码结构来提升易语言程序的执行效率
通过优化算法和代码结构来提升易语言程序的执行效率
|
3月前
|
算法
分享一些提高二叉树遍历算法效率的代码示例
这只是简单的示例代码,实际应用中可能还需要根据具体需求进行更多的优化和处理。你可以根据自己的需求对代码进行修改和扩展。
|
2天前
|
算法 数据安全/隐私保护 计算机视觉
基于FPGA的图像双线性插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
本项目展示了256×256图像通过双线性插值放大至512×512的效果,无水印展示。使用Matlab 2022a和Vivado 2019.2开发,提供完整代码及详细中文注释、操作视频。核心程序实现图像缩放,并在Matlab中验证效果。双线性插值算法通过FPGA高效实现图像缩放,确保质量。
|
1月前
|
算法 数据安全/隐私保护 计算机视觉
基于Retinex算法的图像去雾matlab仿真
本项目展示了基于Retinex算法的图像去雾技术。完整程序运行效果无水印,使用Matlab2022a开发。核心代码包含详细中文注释和操作步骤视频。Retinex理论由Edwin Land提出,旨在分离图像的光照和反射分量,增强图像对比度、颜色和细节,尤其在雾天条件下表现优异,有效解决图像去雾问题。
|
1月前
|
算法 数据可视化 安全
基于DWA优化算法的机器人路径规划matlab仿真
本项目基于DWA优化算法实现机器人路径规划的MATLAB仿真,适用于动态环境下的自主导航。使用MATLAB2022A版本运行,展示路径规划和预测结果。核心代码通过散点图和轨迹图可视化路径点及预测路径。DWA算法通过定义速度空间、采样候选动作并评估其优劣(目标方向性、障碍物距离、速度一致性),实时调整机器人运动参数,确保安全避障并接近目标。
147 68

热门文章

最新文章