平滑是用得最多的一种。简单的全期平均法是对时间数列的过去数据一个不漏地全部加以同等利用;移动平均法则不考虑较远期的数据,并在加权移动平均法中给予近期资料更大的权重;而指数平滑法则兼容了全期平均和移动平均所长,不舍弃过去的数据,但是仅给予逐渐减弱的影响程度,即随着数据的远离,赋予逐渐收敛为零的权数。 也就是说指数平滑法是在移动平均法基础上发展起来的一种时间序列分析预测法,它是通过计算指数平滑值,配合一定的时间序列预测模型对现象的未来进行预测。其原理是任一期的指数平滑值都是本期实际观察值与前一期指数平滑值的加权平均。
编辑本段基本公式
指数平滑法的基本公式是:St=ayt+(1-a)St-1 式中, St--时间t的平滑值; yt--时间t的实际值; St-1--时间t-1的平滑值; a--平滑常数,其取值范围为[0,1]; 由该公式可知: 1.St是yt和 St-1的加权算数平均数,随着a取值的大小变化,决定yt和 St-1对St的影响程度,当a取1时,St= yt;当a取0时,St= St-1。 2.St具有逐期追溯性质,可探源至St-t+1为止,包括全部数据。其过程中,平滑常数以指数形式递减,故称之为指数平滑法。指数平滑常数取值至关重要。平滑常数决定了平滑水平以及对预测值与实际结果之间差异的响应速度。平滑常数a越接近于1,远期实际值对本期平滑值的下降越迅速;平滑常数a越接近于 0,远期实际值对本期平滑值影响程度的下降越缓慢。由此,当时间数列相对平稳时,可取较大的a;当时间数列波动较大时,应取较小的a,以不忽略远期实际值的影响。生产预测中,平滑常数的值取决于产品本身和管理者对良好响应率内涵的理解。 3.尽管St包含有全期数据的影响,但实际计算时,仅需要两个数值,即yt和 St-1,再加上一个常数a,这就使指数滑动平均具逐期递推性质,从而给预测带来了极大的方便。 4.根据公式S1=ay1+(1-a)S0,当欲用指数平滑法时才开始收集数据,则不存在y0。无从产生S0,自然无法据指数平滑公式求出S1,指数平滑法定义S1为初始值。初始值的确定也是指数平滑过程的一个重要条件。 如果能够找到y1以前的历史资料,那么,初始值S1的确定是不成问题的。数据较少时可用全期平均、移动平均法;数据较多时,可用最小二乘法。但不能使用指数平滑法本身确定初始值,因为数据必会枯竭。 如果仅有从y1开始的数据,那么确定初始值的方法有: 1)取S1等于y1; 2)待积累若干数据后,取S1等于前面若干数据的简单算术平均数,如:S1=(y1+ y2+y3)/3等等。
编辑本段预测公式
据平滑次数不同,指数平滑法分为:一次指数平滑法、二次指数平滑法和三次指数平滑法等。
一次指数平滑预测
当时间数列无明显的趋势变化,可用一次指数平滑预测。 其预测公式为:yt+1'=ayt+(1-a)yt' 式中,yt+1'--t+1期的预测值,即本期(t期)的平滑值St ; yt--t期的实际值; yt'--t期的预测值,即上期的平滑值St-1 。 该公式又可以写作:yt+1'=yt'+a(yt- yt')。可见,下期预测值又是本期预测值与以a为折扣的本期实际值与预测值误差之和。
二次指数平滑预测
二次指数平滑是对一次指数平滑的再平滑。它适用于具线性趋势的时间数列。 指数平滑法预测
其预测公式为: yt+m=(2+am/(1-a))yt'-(1+am/(1-a))yt=(2yt'-yt)+m(yt'-yt) a/(1-a)式中,yt= ayt-1'+(1-a)yt-1 显然,二次指数平滑是一直线方程,其截距为:(2yt'-yt),斜率为:(yt'-yt) a/(1-a),自变量为预测天数。 二次指数平滑基本公式 St=αSt+(1-α)St-1 Yt+T=at+btT at=2St-St bt=(α/1-α)(St-St) 式中
St--第t期的一次指数平滑值 St--第t期的二次指数平滑值 α--平滑系数 Yt+T--第t+T期预测值 T--由t期向后推移期数
三次指数平滑预测
三次指数平滑预测是二次平滑基础上的再平滑。 其预测公式是:yt+m=(3yt'-3yt+yt)+[(6-5a)yt'-(10-8a)yt+(4-3a)yt]*am/2(1-a)2+ (yt'-2yt+yt')*a2m2/2(1-a)2 式中,yt=ayt-1+(1-a)yt-1 它们的基本思想都是:预测值是以前观测值的加权和,且对不同的数据给予不同的权,新数据给较大的权,旧数据给较小的权。
编辑本段趋势调整
一段时间内收集到的数据所呈现的上升或下降趋势将导致指数预测滞后于实际需求。通过趋势调整,添加趋势修正值,可以在一定程度上改进指数平滑预测结果。调整后的指数平滑法的公式为: 包含趋势预测(YITt)=新预测(Yt)+趋势校正(Tt) 进行趋势调整的指数平滑预测有三个步骤: 1、 利用前面介绍的方法计算第t期的简单指数平滑预测(Yt); 2、 计算趋势。其公式为: Tt=(1-b)Tt-1+b(Yt-Yt-1)其中, Tt=第t期经过平滑的趋势; Tt-1=第t期上期经过平滑的趋势; b=选择的趋势平滑系数; Yt=对第t期简单指数平滑预测; Yt-1=对第t期上期简单指数平滑预测。 3、计算趋势调整后的指数平滑预测值(YITt).计算公式为:YITt=Yt+Tt。
编辑本段具体应用
指数平滑模型的建立
指数平滑法一般有一次指数平滑法、二次指数平滑法和三次指数平滑法。指数平滑法的预测模型为 指数平滑法在小浪底大坝变形
: 初始值的确定,即第一期的预测值。一般原数列的项数较多时(大于15项),可以选用第一期的观察值或选用比第一期前一期的观察值作为初始值。如果原数列的项数较少时(小于15项),可以选取最初几期(一般为前三期)的平均数作为初始值。指数平滑方法的选用,一般可根据原数列散点图呈现的趋势来确定。如呈现直线趋势,选用二次指数平滑法;如呈现抛物线趋势,选用三次指数平滑法。或者,当时间序列的数据经二次指数平滑处理后,仍有曲率时,应用三次指数平滑法。
指数平滑系数α的确定
指数平滑法的计算中,关键是α的取值大小,但α的取值又容易受主观影响,因此合理确定α的取值方法十分重要,一般来说,如果数据波动较大,α值应取大一些,可以增加近期数据对预测结果的影响。如果数据波动平稳,α值应取小一些。理论界一般认为有以下方法可供选择: 经验判断法。这种方法主要依赖于时间序列的发展趋势和预测者的经验做出判断。 1、当时间序列呈现较稳定的水平趋势时,应选较小的α值,一般可在0.05~0.20之间取值; 2、当时间序列有波动,但长期趋势变化不大时,可选稍大的α值,常在0.1~0.4之间取值; 3、当时间序列波动很大,长期趋势变化幅度较大,呈现明显且迅速的上升或下降趋势时,宜选择较大的α值,如可在0.6~0.8间选值,以使预测模型灵敏度高些,能迅速跟上数据的变化; 4、当时间序列数据是上升(或下降)的发展趋势类型,α应取较大的值,在0.6~1之间。 试算法。根据具体时间序列情况,参照经验判断法,来大致确定额定的取值范围,然后取几个α值进行试算,比较不同α值下的预测标准误差,选取预测标准误差最小的α。 在实际应用中预测者应结合对预测对象的变化规律做出定性判断且计算预测误差,并要考虑到预测灵敏度和预测精度是相互矛盾的,必须给予二者一定的考虑,采用折中的α值。
销售预算中的具体应用
以某软件公司A为例,给出2000-2005年的历史销售资料,将数据代入指数平滑模型,预测2006年的销售额,作为销售预算编制的基础。 根据经验判断法,A公司2000-2005年销售额时间序列波动很大,长期趋势变化幅度较大,呈现明显且迅速的上升趋势,宜选择较大的α值,可在0.5~0.8间选值,以使预测模型灵敏度高些,结合试算法取0.5,0.6,0.8分别测试。经过第一次指数平滑后,数列散点图呈现直线趋势,故选用二次指数平滑法即可。 根据偏差平方的均值(MSE)最小,即各期实际值与预测值差的平方和除以总期数,以最小值来确定α的取值的标准,经测算当α=0.6时,MSE1=1445.4;当α=0.8时,MSE2=10783.7;当α=0.5时,MSE3=1906.1。因此选择α=0.6来预测2006年4个季度的销售额。
close allclear,clc
% 统计数据 实际值
arr = [143 152 161 139 137 174 142 141 162 180 164 171 206 193 207 218 229 225 204 227 223 242 239 266]'
[m,nn]=size(arr)
alpha = 0.15 % 平滑常数的范围为[0,1]
% 1次指数平滑
s1 = zeros(m,1)
s1(1,1) = arr(1,1)
for i=2:m
s1(i) = alpha*arr(i,1)+(1-alpha)*s1(i-1)
end
sx1 = s1
% 2次指数平滑
s2 = zeros(m,1)
s2(1,1) = arr(1,1)
for i=2:m
s2(i) = alpha*s1(i,1)+(1-alpha)*s2(i-1)
end
sx2 = s2
% 3次指数平滑
s3 = zeros(m,1)
s3(1,1) = arr(1,1)
for i=2:m
s3(i) = alpha*s2(i,1)+(1-alpha)*s3(i-1)
end
sx3 = s3
% 计算二次曲线中的参数
a = zeros(m,1)
b = zeros(m,1)
c = zeros(m,1)
beta=alpha/(2*(1-alpha)*(1-alpha))
a = 3*sx1-3*sx2+sx3
b = beta*((6-5*alpha)*sx1-2*(5-4*alpha)*sx2+(4-3*alpha)*sx3)
c = beta*alpha*(sx1-2*sx2+sx3)
% 二次曲线模型 a+b*t+c*t*t
t = 1 %
sf = zeros(m,1)
% sf(1,1) = arr(1,1)
sf = a+b*t+c*t*t % 预测
y=0.03 0.14 0.01 0.20 0.09 0.12 0.11 0.20 0.23 0.20 0.14 0.12 0.17 0.13 0.07 0.10就是上面代码的yt,你可以这么写:
clc,clear
y=[0.03 0.14 0.01 0.20 0.09 0.12 0.11 0.20 0.23 0.20 0.14 0.12 0.17 0.13 0.07 0.10]
yt=y'n=length(yt)
alpha=[0.2 0.5 0.8]m=length(alpha)
yhat(1,1:m)=(yt(1)+yt(2))/2
for i=2:n
yhat(i,:)=alpha*yt(i-1)+(1-alpha).*yhat(i-1,:)
end
yhat
err=sqrt(mean((repmat(yt,1,m)-yhat).^2))
xlswrite('lilv.xls',yhat)
yhat2014=alpha*yt(n)+(1-alpha).*yhat(n,:)
x是时间,在这里没什么用
最后运行结果是:
yhat =
0.08500.08500.0850
0.07400.05750.0410
0.08720.09880.1202
0.07180.05440.0320
0.09740.12720.1664
0.09590.10860.1053
0.10070.11430.1171
0.10260.11210.1114
0.12210.15610.1823
0.14370.19300.2205
0.15490.19650.2041
0.15190.16830.1528
0.14560.14410.1266
0.15040.15710.1613
0.14640.14350.1363
0.13110.10680.0833
err =
0.06320.06430.0718
yhat2014 =
0.12490.10340.0967
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)