时间序列的指数平滑预测法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

3.2 时间序列的指数平滑预测法
指数平滑法(Expinential smoothing method )的思想也是对时间序列进行修匀以消除不规则和随机的扰动。

该方法是建立在如下基础上的加权平均法:即认为时间序列中的近期数据对未来值的影响比早期数据对未来值得影响更大。

于是通过对时间序列的数据进行加权处理,越是近期的数据,其权数越大;反之,权数就越小。

这样就将数据修匀了,并反映出时间序列中对预测时点值的影响程度。

根据修匀的要求,可以有一次、二次甚至三次指数平滑。

3.3.1 一次指数平滑法
1.一次指数平滑法的计算公式及平滑系数a 的讨论
设时间序列为N x x x x ,,,321 ,一次指数平滑数列的递推公式为:
⎪⎩⎪⎨⎧=≤≤<<-+=-,
1,10,)1(110111x S N
t a S a ax S t t t (3-6)
式中,1
t S 表示第t 时点的一次指数平滑值,a 称为平滑系数。

递推公式(3-6)中,初始值1
0S 常用时间序列的首项1x (适用于历史数据个数较多,如50个历史数据及以上),如果历史数据个数较少,如在15或20个数据及以下时,可以选用最初几期历-史数据的平均值作为初始值1
0S ,这些选择都有一定的经验性和主观性。

下面讨论平滑系数a 。

将递推公式(3-6)展开可得:
[]
10
1122112
2112
1111)1()1()1()1()1()1()1()1()1(S a x a a x a a x a a ax S a x a a ax S a ax a ax S a ax S t t t t t t t t t t t t t t -+-++-+-+==-+-+=-+-+=-+=-------- 容易看出,由于10<<a ,i x 的系数i
a a )1(-随着i 的增加而递减。

注意到这些系数之和为1,即:
1)1()
1(1)1(1)1()
1(1
1
=-+----=-+-∑=-t t
t
i t
i a a a a a a a
于是,递推公式(3-6)中的1
t S 就是样本值t x x x ,,,21 的一个加权平均。

当用递推公式(3-6)来进行预测时,我们将用1
t S 作为第1+t 时点的预测值。

从上面的讨论可以看到,离预测时点1+t 最近的时点t 的值t x ,其权为a ,最大,其次为1-t x 的权1,),1(x a a -的权最小。

可见,公式(3-6)是在认为新近数据对未来影响大,远期数据对未来影响小的情况下对原时间序列的加权平均(修匀)。

若平滑系数0=a ,此时有)(110111x S S S t t ====- ,这表明确定)(11
0x S =后,每个
时点的平滑值皆等于1
0S ,此时,每个时点i 的观察值i x 不起任何作用。

若平滑系数1=a ,此时有t t x S =1。

说明平滑后数列1
t S 就是原时间序列,即没有对原
时间序列进行任何处理和修匀。

对于平滑系数a 来说,除了上述两种极端情况外,不可能出现i x 与j x )(j i ≠系数相等的情况。

综上所述,不难看到,10<<a 且比较接近1时,计算得到的一次指数平滑值对原历史数据的修匀程度将较小,平滑后的数列值1
t S 能够比较快地反映出原时间序列的实际变化,因此,对于变化较大或趋势性较强的时间序列适合选择比较靠近1的数据作为平滑系数,比如取90.0,95.0=a 等。

若10<<a 且取值比较靠近0时,计算得到的一次指数平滑值对原历史数据的修匀程度将较大,平滑后的数列对原时间序列的变化反应较迟钝。

因此,对于变化较小的、或接近平稳的时间序列,应选择比较靠近0的平滑系数使得平滑过程中的各数据的权数比较接近。

【例3-7】某电器销售企业1992-2003年某种电器销售额(万元)及其一次指数平滑数列计算列表如表3-2所示。

表3-2 一次指数平滑值计算表 (单位:万元)
年份 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 销售额
50 52 47 51 49 48 51 40 48 51 51 59 .2
0=α
51 50.8 51.04 50.23 50.38 50.10 49.68 49.94 47.95 47.96 48.57 49.06 .5
0=α
51 50.50 51.25 49.13 50.07 49.54 48.77 49.89 44.95 46.48 48.74 49.87 .8
0=α
51
50.20
51.64
47.93
50.39
49.28
48.26
50.45
42.09
46.82
50.16
50.83
本例中选择第一、第二期的历史数据平均值作为一次指数平滑的初始值1
0S 。

从表3-2中可以看到,原时间序列变动较大,稍具周期性。

若想指数平滑后数列敏感地反映出最新的一些观察值的变动,则应取较大的平滑系数a ,如8.0=a 。

若想消除其周期性变动,施加较大程度的修匀,以反映其长期趋势,则可取较小的a ,如2.0=a 。

2.检验及预测
一次指数平滑法适用于对变化比较平稳的时间序列作短期的预测。

第1+t 时点的预测值1+t y 等于按递推公式(3-6)计算的第t 时点的一次指数平滑值1
t S ,即:
1
1t t S y =+ (3-7)
类似于移动平均法,同一个问题随着平滑系数的不同可以有若干个一次指数平滑预测值。

因此,应该在一个合适的评价标准基础上选择一个合理的平滑系数a 。

其方法是:首先计算与在原则上合理的多个平滑系数a 相对应的平滑数列,然后分别计算其均方差MSE (见公式(3-7))或计算其平均绝对误差MAD (见公式(3-8)),以MSE 或MAD 最小者对应的平滑系数及其预测值为最合理的。

∑==
N
t t
e
N
MAD 1
1
,而t t t t t y x S x e -=-=-1
1 (3-8)
公式(3-8)中的t t t t t y x S x e -=-=-11反映了各个时点的平滑值1
1-t S 与实际值t x 之间
的误差。

根据公式(3-2),计算误差数列t e 的自相关系数t r ,若统计量
)1()1(2
12-<⋅-=∑=m r N Q m
t t αχ
则说明误差数列具有随机性,可以认为此时的预测是有效的(可以利用前面的Matlab
程序funcoef.m 判断)。

一次指数平滑法的计算、检验及预测的Matlab 程序如下(文件名funesm1.m )。

【例3-8】某商品2004年各月的销售量t x 如表3-3所示,试预测2005年1月的销售量。

利用funesm1.m 计算的部分结果如下,其他部分数据如表3-3所示。

程序中令423110==x S ,
取10.00=L ,05.01=L ,95.03=L ,7=m ,05.0=α,对应的误差值t e ,也列于表3-3中。

表3-3 历史数据、一次指数平滑值及误差值
月 0 1 2 3 4 5 6 7 8 9 10 11 12 序号t
0 1 2 3 4 5 6 7 8 9 10 11 12 t x
423 358 434 445 527 429 426 502 480 385 427 446 )
1.0(1=αt S
42
3 423 416.5 418.8 420.9 431.5 431.3 430.8 437.9 442.1 436.
4 435.
5 436.5 )
1.0(=αt e
0 -65 17.5 26.7 106.1 -2.5 -5.3 71.2 42.1 -57.1 -9.4 10.5 )
2.0(1=αt S
423 423 410 414.8 420.8 442 439.4 436.7 449.8 455.8 441.6 438.7 420.2 )
2.0(=αt e
0 -65 24 30.2 106.2 -13 -13.4 65.3 30.2 -70.8 -14.6 7.3 )
3.0(1=αt
S
423 423 403.5 412.7 422.4 453.8 446.4 440.3 458.8 465.2 441.1 436.9 439.8 )
3.0(=αt e
-65
30.5
32.3
104.6
-24.8
-20.4
61.7
21.2
-80.2
-14.1
9.1
这就是说,取平滑系数0.10=α是合适的,此时预测值为2005年1月的销售量将是y = 436.4976。

funesm1.m
%一次指数平滑预测,文件名为funesm1.m
%输入时间序列想,平滑系数初值L0,步长L1,终值L2
%输入判断误差是否为随机误差时需要计算的自相关系数个数m ,显著性水平alpha function ESM1=funesm1(x,L0,L1,L2,m,alpha) s=zeros(round((L2-L0)/L1),length(x)); e=zeros(1,length(x));
MAD=zeros(1,round((L2-L0)/L1));
k=0;
for a=L0:L1:L2 k=k+1
s(k,1)=x(1); for i=2:length(x)
s(k,i)=a*x(i)+(1-a)*s(k,i-1); e(i)=x(i)-s(k,i-1); end
s(k,:),e
funcoef(e,m,alpha); MAD(k)=mean(abs(e)); end
disp ('The smallest MAD and the corresponding a and forecast') MAD,[MAD,k]=min(MAD);
a=L0+L1*(k-1),y=s(k,length(x)) end
利用上述程序计算得到的一次指数平滑预测值是在多个平滑系数(可自己确定)中计算、比较得到的。

3.3.2 二次指数平滑法
对于呈现出线性趋势的时间序列,在一次指数平滑数列的基础上用同一个平滑系数a 再进行一次指数平滑,就是二次指数平滑。

构成二次指数平滑数列2
t S 的递推公式如下:
令初始值11
020x S S ==(也可取其他值作为初始值),则有:
⎪⎩⎪⎨⎧-+=-+=--2
1
121
1
1)1()1(t t t t t t S a aS S S a ax S (3-9) 二次指数平滑的目的是对原时间序列进行两次修匀,使得其不规则变动或周期变动尽量
消除掉,让时间序列的长期趋势性更能显示出来。

对于平滑系数,同样有一个合理选区的问题。

其方法与一次指数平滑法一样,先选取原则上较合理的多个a 值分别计算,得到不同的数列1
t S 和2
t S ,再根据均方差MSE 或MAD 最小原则确定较为合理的a 值,并得到相应的二次指数平滑值。

由于二次指数平滑的目的,二次指数平滑法较适用于具有线性趋势的时间序列,线性趋势预测模型为:
T b a y t t T t ⋅+=+(3-10)
上式中,T 表示自T 时点起向前预测的时点数;t a ,t b 满足:
212112)(t t t t t t S S S S S a -=-+=,)(121t t t S S a
a
b --=
(3-11) 预测模型的有效性检验方法与一次指数平滑法一样。

即通过自相关系数或2
χ检验方法进行检验。

利用二次指数平滑法预测具有线性趋势性的时间序列的基本步骤为:
1. 根据历史数据(时间序列)x 按照公式(3-6)计算一次指数平滑值; 2.根据公式(3-9)计算二次指数平滑值;
3. 由公式(3-11)计算t t b a ,,并由(3-10)计算自t 时点起先前T 时期的预测值T t y 。

据此,编写的Matlab 程序如下(文件名funesm2.m )。

其中,程序中的s1,s2分别表示一次、二次指数平滑值,a2,b2表示相对于每个平滑系数的t t b a ,(公式(3-11)),y 表示线性趋势的预测值。

平滑系数从2L (步长1L ),然后,从众多平滑系数计算的结果中挑选最小的MAD 所对应的平滑系数并最后得到预测值,自t 时点起先前的时期数T 由预测值确定并输入。

funesm2.m
%二次指数平滑,线性趋势预测模型
%输入时间序列x ,平滑系数初值L0,步长L1,终值L2
%输入判断误差是否为随机误差时必须计算的自相关系数个数m ,显著性水平alpha function ESM2=funesm2(x,L0,L1,L2,m,alpha) T=input('T=')
s1=zeros(round((L2-L0)/L1),length(x)); s2=zeros(round((L2-L0)/L1),length(x)); a2=zeros(round((L2-L0)/L1),length(x)); b2=zeros(round((L2-L0)/L1),length(x)); y=zeros(round((L2-L0)/L1),length(x)+T); e2=zeros(round((L2-L0)/L1),length(x)); MAD2=zeros(1,round((L2-L0)/L1));k=0; for a=L0:L1:L2 k=k+1;
s1(k,1)=x(1); s2(k,1)=x(1); for i=2:length(x)
s1(k,i)=a*x(i)+(1-a)*s1(k,i-1); s2(k,i)=a*s1(k,i)+(1-a)*s2(k,i-1); a2(k,i)=2*s1(k,i)-s2(k,i);
b2(k,i)=(s1(k,i)-s2(k,i))*(a/(1-a)); y(k,i+T)=a2(k,i)+b2(k,i)*T; if i+T<=length(x)
e2(k,i+T)=x(i+T)-y(k,i+T); end end
's1:',s1(k,:),'s2:',s2(k,:),
'a2:',a2(k,:),'b2:',b2(k,:),'y:',y(k,:),'e2:',e2(k,:), funcoef(e2(k,:),m,alpha); MAD2(k)=mean(abs(e2(k,:))); end
MAD2;[MAD2,k]=min(MAD2);
a=L0+L1*(k-1),y(k,length(x)+T) end
【例3-9】某市1990-1999年工业产值为)12,,2,1( =t x t ,如表(3-4)所示,由于原时间序列大体上呈现增长的趋势,取平滑系数9.0=a 利用二次指数平滑法计算的结果如表(包括t t b a ,值以及误差值t e )3-4所示。

表3-4中的t t b a ,值按公式(3-11)计算。

于是2000年的预测值为:
21.14151.070.13=⨯+=y 。

而2005年的预测值为:76.16651.070.13=⨯+=y
表3-4 历史数据、二次指数平滑值及误差值
年份 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 t
0 1 2 3 4 5 6 7 8 9 10 t x 10.1 10.7 11.2 11.7 12.1 12.3 12.2 12.6 13.2 13.7 1t S 10.1 10.1 10.64 11.14 11.64 12.05 12.28 12.21 12.56 13.14 13.64 2
t S
10.1 10.1 10.59 11.09 11.59
12.0
12.25
12.21
12.53 13.08 13.56
t a 10.69 11.20 11.70 12.10 12.30 12.20 12.60 13.20 13.70 t b 0.49 0.50 0.50 0.42 0.24 -0.040 0.31 0.55 0.51 t y 11.18 11.70 12.20 12.52 12.54 12.17 12.91 13.75 14.21 t e
0.02
-0.002
-0.101
-0.220
-0/343
0.434
0.296
-0.046
按照表3-4中的误差值t e 容易看到,对所有的t r 都有69.08
96
.1=≤k r 。

说明误差数列具有随机性(利用2
χ检验法也一样),预测有效。

利用Matlab 程序funesm2.m 计算结果如下:
>> x=[10.1,10.7,11.2,11.7,12.1,12.3,12.2,12.6,13.2,13.7]; >> funesm2(x,0.90,0.05,0.90,4,0.05)
T=1 ans = s1: ans =
Columns 1 through 7
10.1000 10.6400 11.1440 11.6444 12.0544 12.2754 12.2075 Columns 8 through 10 12.5608 13.1361 13.6436
ans = s2: ans =
Columns 1 through 7
10.1000 10.5860 11.0882 11.5888 12.0079 12.2487 12.2117 Columns 8 through 10 12.5258 13.0751 13.5868 ans = a2: ans =
Columns 1 through 7
0 10.6940 11.1998 11.7000 12.1010 12.3022 12.2034 Columns 8 through 10 12.5957 13.1971 13.7005 ans = b2: ans =
Columns 1 through 7
0 0.4860 0.5022 0.5006 0.4191 0.2408 -0.0370 Columns 8 through 10 0.3142 0.5492 0.5117 ans = y: ans =
Columns 1 through 7
0 0 11.1800 11.7020 12.2006 12.5201 12.5430 Columns 8 through 11
12.1664 12.9099 13.7463 14.2122 ans = e2: ans =
Columns 1 through 7
0 0 0.0200 -0.0020 -0.1006 -0.2201 -0.3430 Columns 8 through 10 0.4336 0.2901 -0.0463 These data are stochastic a = 0.9000 ans = 14.2122
3.3.3 布朗(Brown )非线性指数平滑法
当时间序列呈现非线性趋势时,可以采用布朗(Brown )非线性指数平滑法进行预测。

其基本原理是在一次指数平滑、二次指数平滑数列的基础山,再进行一次指数平滑,即三次指数平滑,然后,以此对非线性模型(这里就是二次曲线模型)的参数进行估计,从而达到对非线性时间序列进行预测的目的。

设时间序列为N x x x ,,,21 ,那么,第t 时点的三次指
数平滑数列),2,1(3
N t S t =按如下递推公式计算:
⎪⎩⎪⎨⎧-+=-+=-+=---2
1232
112111)1()1()1(t t t
t t t t t t S a aS S S a aS S S a ax S (3-12)
一般来说,取初始值13
02010x S S S ===,且取同一个平滑系数a 。

根据选定的较合理
的平滑系数a 值的计算结果21,t t S S 和3
t S ,按下式(3-13)计算系数。

[]
⎪⎪⎪⎩
⎪⎪⎪⎨⎧+--=-+----=+-=)2()1(2)34()810()56()1(2333
212
23212
321t t t t t t t t t t t t S S S a a c S a S a S a a a
b S S S a (3-13) 合理的平滑系数a 选定与前面的方法相同。

即按均方差MSE 或平均绝对误差MAD 最小所对应的平滑系数为原则。

用T 表示自t 时点起向前预测的时点期数,则此时的(布朗)
二次抛物线型预测模型为:
2T c T b a y t t t T t +⋅+=+ (3-14)
预测模型的有效性检验方法同前。

即先计算预测偏差t e 数列及其自相关系数k r ,再按
2χ检验法来检验。

或通过,N r k 96
.1≤是否成立来检验。

编写Matlab 程序funesm3.m
如下:
funesm3.m
%布朗非线性指数平滑
%输入时间序列x ,平滑系数初值L0,步长L1,终值L2
%输入判断误差是否为随机误差时必须计算的自相关系数个数m ,显著性水平alpha function ESM3=funesm3(x,L0,L1,L2,m,alpha) T=input('T=')
s1=zeros(round((L2-L0)/L1),length(x)); s2=zeros(round((L2-L0)/L1),length(x)); s3=zeros(round((L2-L0)/L1),length(x)); a3=zeros(round((L2-L0)/L1),length(x)); b3=zeros(round((L2-L0)/L1),length(x)); c3=zeros(round((L2-L0)/L1),length(x)); y=zeros(round((L2-L0)/L1),length(x)+T); e3=zeros(round((L2-L0)/L1),length(x)); MAD3=zeros(1,round((L2-L0)/L1));k=0; for a=L0:L1:L2 k=k+1;
s1(k,1)=x(1); s2(k,1)=x(1); s3(k,1)=x(1); for i=2:length(x)
s1(k,i)=a*x(i)+(1-a)*s1(k,i-1); s2(k,i)=a*s1(k,i)+(1-a)*s2(k,i-1); s3(k,i)=a*s2(k,i)+(1-a)*s3(k,i-1); a3(k,i)=3*s1(k,i)-3*s2(k,i)+s3(k,i);
b3(k,i)=(a/(2*(1-a)^2))*((6-5*a)*s1(k,i)-(10-8*a)*s2(k,i)+(4-3*a)*s3(k,i)); c3(k,i)=(a^2/(2*(1-a)^2))*(s1(k,i)-2*s2(k,i)+s3(k,i)); y(k,i+T)=a3(k,i)+b3(k,i)*T+c3(k,i)*T^2; e3(k,i+T)=x(i+T)-y(k,i+T); end end
's1:',s1(k,:),'s2:',s2(k,:),'s3:',s3(k,:)
'a3:',a3(k,:),'b3:',b3(k,:),'c3:',c3(k,:),'y:',y(k,:),'e3:',e3(k,:), funcoef(e3(k,:),m,alpha); MAD3(k)=mean(abs(e3(k,:))); end
MAD3;[MAD3,k]=min(MAD3);
a=L0+L1*(k-1),y(k,length(x)+T) end
程序中的s1,s2,s3分别表示一次、二次以及三次指数平滑值,a3,b3,c3表示相对于每个平滑系数的t t t c b a ,,(公式(3-13)),y 表示布朗非线性趋势的预测值。

平滑系数从L0到L2(步长L1),然后,从众多平滑系数计算的结果中挑选最小的MAD 所对应的平滑系数并最后得到预测值,自t 时点起先前的时期数T 由预测者确定并输入。

【例3-10】某国企1988-2000年的利润(万元)历史数据如表3-5所示。

今取平滑系数.50=α并利用三次指数平滑数列,用二次抛物线型预测模型(3-14)预测2001、2002年的利润。

表3-5 历史数据、三次指数平滑值0.50=α
年份
1988 1989 1990 1991 1992 1993 1994 t 0 1 2 3 4 5 6 7 t x
10.6 15.1 17.6 21.6 24.8 19.5 30.4 1t S 10.6 10.6 12.85 15.23 18.42 21.61 25.56 27.89 2t S 10.6 10.6 11.73 13.48 15.95 18.78 22.17 25.07 31
t t t t
31t S
24.99 27.56 31.93 38.98 47.66 57.58
利用手工计算如下。

根据公式(3-13),有(系数的检验略):
64.9058.575.67352.7832000=+⨯-⨯=a
[]77.1358.57)5.14(5.67)410(52.78)5.26(25.025
.02000=-+---⨯=b 2
55.0)58.575.67252.78(25
.025.02000
=+⨯-⨯=c 这样,从2000年起,二次抛物线预测模型为:
2200055.077.1364.90T T y T ⨯+⨯+=+
即2001年塑料产量预测值为(1=T ):89.10455.077.1364.902001=++=y 2002年塑料产量预测值为(2=T ):38.120455.0277.1364.902001=⨯+⨯+=y 实际预测时,应多选择平滑系数,并从中挑选合理的平滑系数对应的预测值。

实际上,,对于这个例题,利用Matlab 程序funesm3.m 计算表明,在预测2001年的利润时,合理的平滑系数6.0=a ,而预测2002年的利润时,合理的平滑系数6.0=a 。

参见计算结果(具体程序结果参见Matlab 程序中运行结果)。

>> x=[10.6,15.1,17.6,21.6,24.8,19.5,30.4,33.0,34.5,52.4,67.9,79.3,89.8]; >> funesm3(x,0.10,0.05,0.90,7,0.05)
T=1 a=0.6000 ans=102.7434
>> funesm3(x,0.10,0.05,0.90,7,0.05) T=2 a=0.3500 ans=120.8212
由计算结果可知,2001年利润的预测值是102.74(万元),而2002年利润预测值是120.82(万元)。

相关文档
最新文档