一次移动平均实际上认为最近 N 期数据对未来值影响相同, 都加权1/N ;而 N 期以前的数据对未来值没有影响, 加权为 0。但是,二次及更高次移动平均数的权数却不是1/N,且次数越高,权数的结构越复杂,但永远保持对称的权数,即两端项权数小,中间项权数大, 不符合一般系统的动态性。一般说来历史数据对未来值的影响是随时间 间隔的增长而递减的。所以, 更切合实际的方法应是对各期观测值依时间顺序进行加权 平均作为预测值。指数平滑法可满足这一要求,而且具有简单的递推形式。
指数平滑法根据平滑次数的不同,又分为一次指数平滑法、二次指数平滑法和三 次指数平滑法等,分别介绍如下。
3.1 一次指数平滑法
1 .预测模型
2.加权系数的选择
在进行指数平滑时,加权系数的选择是很重要的。由式(15)可以看出,α 的大小规定了在新预测值中新数据和原预测值所占的比重。α 值越大,新数据所占的比重就愈大,原预测值所占的比重就愈小,反之亦然。若把式(15)改写为:
则从上式可看出,新预测值是根据预测误差对原预测值进行修正而得到的。α 的大小则体现了修正的幅度,α 值愈大,修正幅度愈大;α 值愈小,修正幅度也愈小。
若选取α = 0,则 Y(t+1)=Y(t),即下期预测值就等于本期预测值,在预测过程中不考虑任何新信息;若选取α = 1,则 t t y = y +1 ˆ ,即下期预测值就等于本期观测值,完全不相信过去的信息。这两种极端情况很难做出正确的预测。因此,α 值应根据时间序列的具体性质在0~1 之间选择。具体如何选择一般可遵循下列原则:①如果时间序列波动不大,比较平稳,则α 应取小一点,如(0.1~0.5)。以减少修正幅度,使预测模型能包含较长时间序列的信息;②如果时间序列具有迅速且明显的变动倾向,则α 应取大一点,如(0.6~0.8)。使预测模型灵敏度高一些,以便迅速跟上数据的变化。在实用上,类似移动平均法,多取几个α 值进行试算,看哪个预测误差小,就采
用哪个。
3.初始值的确定
用一次指数平滑法进行预测,除了选择合适的α 外,还要确定初始值 。初始值是由预测者估计或指定的。当时间序列的数据较多,比如在20 个以上时,初始值对以后的预测值影响很少,可选用第一期数据为初始值。如果时间序列的数据较少,在20个以下时,初始值对以后的预测值影响很大,这时,就必须认真研究如何正确确定初始值。一般以最初几期实际值的平均值作为初始值。
例4 某市1976~1987 年某种电器销售额如表4 所示。试预测1988 年该电器销售额。
计算的 MATLAB 程序如下:
clc,clear
load dianqi.txt %原始数据以列向量的方式存放在纯文本文件中
yt=dianqi; 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('dianqi.xls',yhat)
yhat1988=alpha*yt(n)+(1-alpha).*yhat(n,:)
3.2 二次指数平滑法
一次指数平滑法虽然克服了移动平均法的缺点。但当时间序列的变动出现直线趋势时,用一次指数平滑法进行预测,仍存在明显的滞后偏差。因此,也必须加以修正。修正的方法与趋势移动平均法相同,即再作二次指数平滑,利用滞后偏差的规律建立直线趋势模型。这就是二次指数平滑法。其计算公式为:
例5 仍以例3 我国1965~1985 年的发电总量资料为例,试用二次指数平滑法预测1986 年和1987 年的发电总量。
计算的MATLAB 程序如下:
clc,clear
load fadian.txt %原始数据以列向量的方式存放在纯文本文件中
yt=fadian; n=length(yt);
alpha=0.3; st1(1)=yt(1); st2(1)=yt(1);
for i=2:n
st1(i)=alpha*yt(i)+(1-alpha)*st1(i-1);
st2(i)=alpha*st1(i)+(1-alpha)*st2(i-1);
end
xlswrite('fadian.xls',[st1',st2'])
a=2*st1-st2
b=alpha/(1-alpha)*(st1-st2)
yhat=a+b;
xlswrite('fadian.xls',yhat','Sheet1','C2')
str=char(['C',int2str(n+2)]);
xlswrite('fadian.xls',a(n)+2*b(n),'Sheet1',str)
3.3 三次指数平滑法
当时间序列的变动表现为二次曲线趋势时,则需要用三次指数平滑法。三次指数平滑是在二次指数平滑的基础上,再进行一次平滑,其计算公式为:
例6 某省1978~1988 年全民所有制单位固定资产投资总额如表7 所示,试预测1989 年和1990 年固定资产投资总额。
解 从图 2 可以看出,投资总额呈二次曲线上升,可用三次指数平滑法进行预测。
clc,clear
load touzi.txt %原始数据以列向量的方式存放在纯文本文件中
yt=touzi; n=length(yt);
alpha=0.3; st1_0=mean(yt(1:3)); st2_0=st1_0;st3_0=st1_0;
st1(1)=alpha*yt(1)+(1-alpha)*st1_0;
st2(1)=alpha*st1(1)+(1-alpha)*st2_0;
st3(1)=alpha*st2(1)+(1-alpha)*st3_0;
for i=2:n
st1(i)=alpha*yt(i)+(1-alpha)*st1(i-1);
st2(i)=alpha*st1(i)+(1-alpha)*st2(i-1);
st3(i)=alpha*st2(i)+(1-alpha)*st3(i-1);
end
xlswrite('touzi.xls',[st1',st2',st3'])
st1=[st1_0,st1];st2=[st2_0,st2];st3=[st3_0,st3];
a=3*st1-3*st2+st3;
b=0.5*alpha/(1-alpha)^2*((6-5*alpha)*st1-2*(5-4*alpha)*st2+(4-3*alpha)*st3);
c=0.5*alpha^2/(1-alpha)^2*(st1-2*st2+st3);
yhat=a+b+c;
xlswrite('touzi.xls',yhat','Sheet1','D1')
plot(1:n,yt,'*',1:n,yhat(1:n),'O')
legend('实际值','预测值',2)
xishu=[c(n+1),b(n+1),a(n+1)];
yhat1990=polyval(xishu,2)
关注:建模忠哥。微信公众号获得更多资源
Q:529384519
指数平滑预测模型是以时刻 t 为起点,综合历史序列的信息,对未来进行预测的。选择合适的加权系数α 是提高预测精度的关键环节。根据实践经验,α 的取值范围一般以0.1~0.3 为宜。α 值愈大,加权系数序列衰减速度愈快,所以实际上α 取值大小起着控制参加平均的历史数据的个数的作用。α 值愈大意味着采用的数据愈少。因此,可以得到选择α 值的一些基本准则。
(1)如果序列的基本趋势比较稳,预测偏差由随机因素造成,则α 值应取小一些,以减少修正幅度,使预测模型能包含更多历史数据的信息。(2)如果预测目标的基本趋势已发生系统地变化,则α 值应取得大一些。这样,可以偏重新数据的信息对原模型进行大幅度修正,以使预测模型适应预测目标的新变化。 另外,由于指数平滑公式是递推计算公式,所以必须确定初始值
可以取前3~5 个数据的算术平均值作为初始值。