点击蓝字关注我们
指数平滑法
一次移动平均实际上认为最近N 期数据对未来值影响相同,都加权1/N ;
而N 期以前的数据对未来值没有影响,加权为0。但是,二次及更高次移动平均数的权数却不是 1/N,且次数越高,权数的结构越复杂,但永远保持对称的权数,即两端项权数小,N 中间项权数大,不符合一般系统的动态性。
一般说来历史数据对未来值的影响是随时间间隔的增长而递减的。所以,更切合实际的方法应是对各期观测值依时间顺序进行加权平均作为预测值。指数平滑法可满足这一要求,而且具有简单的递推形式。
指数平滑法根据平滑次数的不同,又分为一次指数平滑法、二次指数平滑法和三次指数平滑法等,分别介绍如下。
01
一次指数平滑法
1.预测模型
设时间序列为y1, y ,L, yt ,L,α 为加权系数,0
式(13)是由移动平均公式改进而来的。由式(1)知,移动平均数的递推公式为
以作为yt-N的最佳估计,则有
由于加权系数符合指数规律,又具有平滑数据的功能,故称为指数平滑。
以这种平滑值进行预测,就是一次指数平滑法。预测模型为
即
也就是以第t 期指数平滑值作为t +1期预测值。
2.加权系数的选择
在进行指数平滑时,加权系数的选择是很重要的。由式(15)可以看出,α 的大小规定了在新预测值中新数据和原预测值所占的比重。α 值越大,新数据所占的比重就愈大,原预测值所占的比重就愈小,反之亦然。若把式(15)改写为
则从上式可看出,新预测值是根据预测误差对原预测值进行修正而得到的。α 的大小 则体现了修正的幅度,α 值愈大,修正幅度愈大;α 值愈小,修正幅度也愈小。
若选取α = 0 ,则
即下期预测值就等于本期预测值,在预测过程中不考虑任何新信息;若选取α =1,则
即下期预测值就等于本期观测值,完全不相信过去的信息。
这两种极端情况很难做出正确的预测。因此,α 值应根据时间序列 的具体性质在 0~1 之间选择。
具体如何选择一般可遵循下列原则:
①如果时间序列波 动不大,比较平稳,则α 应取小一点,如(0.1~0.5)。以减少修正幅度,使预测模型 能包含较长时间序列的信息;
②如果时间序列具有迅速且明显的变动倾向,则α 应取大一点,如(0.6~0.8)。使预测模型灵敏度高一些,以便迅速跟上数据的变化。 在实用上,类似移动平均法,多取几个α 值进行试算,看哪个预测误差小,就采用哪个。
3.初始值的确定
用一次指数平滑法进行预测,除了选择合适的α 外,还要确定初始值 。初始值是由预测者估计或指定的。当时间序列的数据较多,比如在 20 个以上时,初始值对以 后的预测值影响很少,可选用第一期数据为初始值。
如果时间序列的数据较少,在 20 个以下时,初始值对以后的预测值影响很大,这时,就必须认真研究如何正确确定初始值。一般以最初几期实际值的平均值作为初始值。
例 4
某市 1976~1987 年某种电器销售额如表 4 所示。试预测 1988 年该电器销售额。
解
采用指数平滑法,并分别取α = 0.2, 0.5和0.8进行计算,初始值
计算各期预测值,列于表4 中。
从表 4 可以看出,α = 0.2, 0.5和0.8时,预测值是很不相同的。究竟α 取何值为好, 可通过计算它们的预测标准误差S ,选取使S 较小的那个α 值。预测的标准误差见表5。
计算结果表明:α = 0.2 时,S 较小,故选取α = 0.2 ,预测 1988 年该电器销售额为yˆ1988 = 51.1754。
计算的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,:)
02
二次指数平滑法
一次指数平滑法虽然克服了移动平均法的缺点。但当时间序列的变动出现直线趋时,用一次指数平滑法进行预测,仍存在明显的滞后偏差。因此,也必须加以修正。修正的方法与趋势移动平均法相同,即再作二次指数平滑,利用滞后偏差的规律建立直 线趋势模型。这就是二次指数平滑法。其计算公式为
例 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)
03
三次指数平滑法
当时间序列的变动表现为二次曲线趋势时,则需要用三次指数平滑法。三次指数平滑是在二次指数平滑的基础上,再进行一次平滑,其计算公式为
例6
某省1978~1988 年全民所有制单位固定资产投资总额如表7 所示,试预测 1989 年和1990 年固定资产投资总额。
解
从图2可以看出,投资总额呈二次曲线上升,可用三次指数平滑法进行预测。
计算的MATLAB 程序如下:
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)
指数平滑预测模型是以时刻t 为起点,综合历史序列的信息,对未来进行预测的。 选择合适的加权系数α 是提高预测精度的关键环节。
根据实践经验,α 的取值范围一般以 0.1~0.3 为宜。α 值愈大,加权系数序列衰减速度愈快,所以实际上α 取值大小起着控制参加平均的历史数据的个数的作用。
α 值愈大意味着采用的数据愈少。因此,可以得到选择α 值的一些基本准则。
(1)如果序列的基本趋势比较稳,预测偏差由随机因素造成,则α 值应取小一些, 以减少修正幅度,使预测模型能包含更多历史数据的信息。
(2)如果预测目标的基本趋势已发生系统地变化,则α 值应取得大一些。这样, 可以偏重新数据的信息对原模型进行大幅度修正,以使预测模型适应预测目标的新变化。
另外,由于指数平滑公式是递推计算公式,所以必须确定初始值,可以取前3~5 个数据的算术平均值作为初始值。
• END •
模友们可能已经发现:现在公众号推送文章的顺序,已经不会按时间排列了。这种变化,可能会让各位模友错过我们每天的推送。
所以,如果你还想像往常一样,聚焦数模乐园,就需要将“数模乐园”标为星标公众号,同时在阅读完文章后,别忘了给一个“在看”哦。
星标步骤
(1)点击页面最上方“数模乐园”,进入公众号主页
(2)点击右上角的小点点,在弹出页面点击“设为星标”,就可以啦。
扫码关注我们
2020夏令营QQ交流群
球分享
球点赞
球在看