目录
前言
1、确定性时间序列分析方法概述
2、移动平均法
2.1 简单移动平均法
2.1.1 简单移动平均法代码实现:
2.2 加权移动平均法
2.2.1 简单移动平均法代码实现:
2.3.1 趋势移动平均法
2.3.1 简单移动平均法代码实现:
3、指数平滑法
3.1 一次指数平滑法
3.1.1 一次指数平滑法代码实现
3.2 二次指数平滑法
3.2.1 二次指数平滑法代码实现
3.3 三次指数平滑法
3.3.1 三次指数平滑法代码实现
4、差分指数平滑法
4.1 一阶差分指数平滑法
4.2 二阶差分指数平滑模型
5、自适应滤波法
5.1 自适应滤波的基本过程
5.1.1 自适应滤波代码实现
5.2 N,k值和初始权数的确定
时间序列是按时间顺序排列的、随时间变化且相互关联的数据序列。分析时间序列的方法构成数据分析的一个重要领域,即时间序列分析。
时间序列根据所研究的依据不同,可有不同的分类。
1.按所研究的对象的多少分,有一元时间序列和多元时间序列。
2.按时间的连续性可将时间序列分为离散时间序列和连续时间序列两种。
3.按序列的统计特性分,有平稳时间序列和非平稳时间序列。如果一个时间序列的概率分布与时间t 无关,则称该序列为严格的(狭义的)平稳时间序列。如果序列的一、二阶矩存在,而且对任意时刻t 满足:
( 1)均值为常数
( 2)协方差为时间间隔τ 的函数。
则称该序列为宽平稳时间序列,也叫广义平稳时间序列。我们以后所研究的时间序列主要是宽平稳时间序列。
4.按时间序列的分布规律来分,有高斯型时间序列和非高斯型时间序列。
时间序列预测技术就是通过对预测目标自身时间序列的处理,来研究其变化趋势的。一个时间序列往往是以下几类变化形式的叠加或耦合。
( 1)长期趋势变动。它是指时间序列朝着一定的方向持续上升或下降,或停留在某一水平上的倾向,它反映了客观事物的主要变化趋势。
( 2)季节变动。
( 3)循环变动。通常是指周期为一年以上,由非季节因素引起的涨落起伏波形相似的波动。
( 4)不规则变动。通常它分为突然变动和随机变动。
通常用 表示长期趋势项, 表示季节变动趋势项, 表示循环变动趋势项,
表示随机干扰项。常见的确定性时间序列模型有以下几种类型:
① 加法模型:
② 乘法模型:
③ 混合模型:
其中 是观测目标的观测记录,
如果在预测时间范围以内,无突然变动且随机变动的方差 较小,并且有理由认为过去和现在的演变趋势将继续发展到未来时,可用一些经验方法进行预测。
移动平均法是根据时间序列资料逐渐推移,依次计算包含一定项数的时序平均数,以反映长期趋势的方法。当时间序列的数值由于受周期变动和不规则变动的影响,起伏较大,不易显示出发展趋势时,可用移动平均法,消除这些因素的影响,分析、预测序列的长期趋势。
移动平均法有简单移动平均法、加权移动平均法、趋势移动平均法等。
设观测序列为 ,取移动平均的项数 。一次简单平均值计算公式为:
当观测目标的基本趋势是在某一水平上下波动时,可用一次简单移动平均方法建立预测模型:
其标准误差为:
最近 期序列的平均值作为未来各期的预测结果。一般 取值范围: 。当历史序列的基本趋势变化不大且序列中随机变动成分较多时,N的取值应较大些。否则N的值应小一些。在有确定的季节变动周期的资料中,移动平均的项数应取周期长度。选择最佳 值的一个有效方法是,比较若干模型的预测误差。预测标准误差最小者为好。
%y为已知数据,长度为11,功能为预测第十二个数据
clc,clear
y=[533.8 574.6 606.9 649.8 705.1 772.0 816.4 892.7 963.9 1015.1 1102.7];
m=length(y);%T
n=[4,5]; %n 为移动平均的项数
for i=1:length(n)
%由于 n 的取值不同, yhat 的长度不一致,下面使用了细胞数组
for j=1:m-n(i)+1%1到T-N+1
yhat{i}(j)=sum(y(j:j+n(i)-1))/n(i);
end
y12(i)=yhat{i}(end);
s(i)=sqrt(mean((y(n(i)+1:m)-yhat{i}(1:end-1)).^2));
end
%预测数据和方差
y12,s
简单移动平均法只适合做近期预测,而且是预测目标的发展趋势变化不大的情况。如果目标的发展趋势存在其它的变化, 采用简单移动平均法就会产生较大的预测偏差和滞后。
在简单移动平均公式中,每期数据在求平均时的作用是等同的。但是,每期数据所包含的信息量不一样,近期数据包含着更多关于未来情况的信心。因此,把各期数据等同看待是不尽合理的,应考虑各期数据的重要性,对近期数据给予较大的权重,这就是加权移动平均法的基本思想。
设时间序列为 ;加权移动平均公式为:
式中 为 期加权移动平均数; 为 的权数,她体现了相应的 在加权平均数中的重要性。
利用加权移动平均数来做预测,其预测公式为:
即以第 期加权移动平均数作为第 期的预测值
%y为已知的数据,功能为对后一个数据进行预测
clc
clear
y=[6.35 6.20 6.22 6.66 7.15 7.89 8.72 8.94 9.28 9.8];
w=[1/6;2/6;3/6];
m=length(y);n=3;
for i=1:m-n+1
yhat(i)=y(i:i+n-1)*w;
end
err=abs(y(n+1:m)-yhat(1:end-1))./y(n+1:m)
T_err=1-sum(yhat(1:end-1))/sum(y(n+1:m))
y11=yhat(end)/(1-T_err)
在加权移动平均法中, 的选择,同样具有一定的经验性。一般的原则是:近期数据的权数大,远期数据的权数小。至于大到什么程度和小到什么程度,则需要按照预测者对序列的了解和分析来确定。
简单移动平均法和加权移动平均法,在时间序列没有明显的趋势变动时,能够准确反映实际情况。但当时间序列出现直线增加或减少的变动趋势时,用简单移动平均法和加权移动平均法来预测就会出现滞后偏差。因此,需要进行修正,修正的方法是作二次移动平均,利用移动平均滞后偏差的规律来建立直线趋势的预测模型。这就是趋势移动平均法。
一次移动的平均数为
在一次移动平均的基础上再进行一次移动平均就是二次移动平均,其计算公式为
那么如何利用移动平均的滞后偏差建立直线趋势模型呢?
可设时间序列 从某时期开始具有直线趋势,且认为未来时期也按此直线趋势变化,则可设此直线趋势预测模型为
其中 为当前时期数; 为由 至预测期的时期数; 为截距; 为斜率。两者又称为平滑系数。
现在,我们可根据下面的方程来确定平滑系数。
所以
因此有
类比上面的式子,可得
所以
进一步可类比推导出
于是,可得到平滑系数的计算公式
clc,clear
y = [98705;100072;101654;103008;104357;105851;107507;109300;111026;112704;114333;115823;117171;118517;119850;121121;122389;123626;124761;125786;126743;127627;128453;129227;129988;130756;131448;132129;132802;133450;134091;134916;135922;136726;137646;138326;139232;140011;140541;141008;141212];
m1=length(y);
n=6; %n 为移动平均的项数
for i=1:m1-n+1
yhat1(i)=sum(y(i:i+n-1))/n;
end
m2=length(yhat1);
for i=1:m2-n+1
yhat2(i)=sum(yhat1(i:i+n-1))/n;
end
plot(1:41,y,'*')
a21=2*yhat1(end)-yhat2(end)
b21=2*(yhat1(end)-yhat2(end))/(n-1)
y_next=a21+b21
y_next_next=a21+2*b21
趋势移动平均法对于同时存在直线趋势与周期波动的序列, 是一种既能反映趋势变化,又可以有效地分离出来周期变动的方法。
一次移动平均实际上认为最近 期数据对未来值的影响相同,都加权 ;而 期以前的数据对未来值都没有影响,加权为0。但是,二次以及更高次移动平均的权数缺不是 ,而且次数越高,权数结构越复杂,但永远保持对称的权数,即两端项权数小,中间项权数大,不符合一般系统的动态性。一般说来历史数据对未来值的影响是随时间间隔的增长而递减的。所以,更切合实际的方法应是对各期观测值依时间顺序进行加权平均作为预测值。指数平滑法可满足这一要求,而且具有简单的递推形式。
指数平滑法根据平滑次数的不同,又分为一次指数平滑法、二次指数平滑法、三次指数平滑法等。
① 预测模型
根据时间序列为 为加权系数,,一次指数平滑公式为:
因为
以 作为 的最佳估计,则有
进一步展开可得
可见 是全部历史数据的加权平均,加权系数分别为
显然有
由于加权系数符合指数规律,又具有平滑数据的功能,故称为指数平滑。
以这种平滑值进行预测,就是一次指数平滑法。预测模型为
也就是以第 期指数平滑作为 期预测值
② 加权系数的选择
即 的选择。一般情况下,如果时间序列波动不大,比较平稳,则 应取小一点,如 。以减小修正幅度,是预测模型能包含较大的时间序列的信息;如果时间序列具有迅速且明显的变动倾向,则 应取大一点,如 。使预测模型灵敏度高一些,以便迅速跟上数据的变化。
③ 初始值的确定
用一次指数平滑法进行预测,除了选择合适的 之外,还要确定初始值 。初始值是由预测者估计或指定的。当时间序列的数据较多,比如在 20 个以上时,初始值对以后的预测值影响很少,可选用第一期数据为初始值。如果时间序列的数据较少,在 20个以下时,初始值对以后的预测值影响很大,这时,就必须认真研究如何正确确定初始值。一般以最初几期实际值的平均值作为初始值。
clc
clear
yt = [98705;100072;101654;103008;104357;105851;107507;109300;111026;112704;114333;115823;117171;118517;119850;121121;122389;123626;124761;125786;126743;127627;128453;129227;129988;130756;131448;132129;132802;133450;134091;134916;135922;136726;137646;138326;139232;140011;140541;141008;141212];
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
err=sqrt(mean((repmat(yt,1,m)-yhat).^2))
yhat_next=alpha*yt(n)+(1-alpha).*yhat(n,:)
一次指数平滑法虽然克服了移动平均法的缺点。但当时间序列的变动出现直线趋势时,用一次指数平滑法进行预测,仍存在明显的滞后偏差。因此,也必须加以修正。修正的方法与趋势移动平均法相同,即再作二次指数平滑,利用滞后偏差的规律建立直线趋势模型。这就是二次指数平滑法。其计算公式为
其中 为一次指数的平滑值; 为二次指数的平滑值。当时间序列 ,从某时期开始具有直线趋势时,类似趋势移动平均法,可用直线趋势模型进行预测
yt = [98705;100072;101654;103008;104357;105851;107507;109300;111026;112704;114333;115823;117171;118517;119850;121121;122389;123626;124761;125786;126743;127627;128453;129227;129988;130756;131448;132129;132802;133450;134091;134916;135922;136726;137646;138326;139232;140011;140541;141008;141212];
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
a=2*st1-st2;
b=alpha/(1-alpha)*(st1-st2);
yhat=a+b;
str=char(['C',int2str(n+2)]);
当时间序列的变动表现为二次曲线趋势时,则需要用三次指数平滑法。三次指数平滑是在二次指数平滑的基础上,再进行一次平滑,其计算公式为
其中 为三次指数平滑值
三次指数平滑法的预测模型为
其中
clc
clear
yt = [98705;100072;101654;103008;104357;105851;107507;109300;111026;112704;114333;115823;117171;118517;119850;121121;122389;123626;124761;125786;126743;127627;128453;129227;129988;130756;131448;132129;132802;133450;134091;134916;135922;136726;137646;138326;139232;140011;140541;141008;141212];
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
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;
plot(1:n,yt,'*',1:n,yhat(1:n),'O')
legend('实际值','预测值')
xishu=[c(n+1),b(n+1),a(n+1)];
yhat_next=polyval(xishu,2)
指数平滑预测模型是以时刻 为起点,综合历史序列的信息,对未来进行预测的。选择合适的加权系数 是提高预测精度的关键环节。根据实践经验, 的取值范围一般取 0.1到 0.3 之间。
当时间序列的变动具有直线趋势时,用一次指数平滑法会出现滞后偏差,其原因在于数据不满足模型要求。因此,我们也可以从数据变换的角度来考虑改进措施,即在运用指数平滑法以前先对数据作一些技术上的处理,使之能适合于一次指数平滑模型, 以后再对输出结果作技术上的返回处理, 使之恢复为原变量的形态。差分方法是改变数据变动趋势的简易方法。 下面我们讨论如何用差分方法来改进指数平滑法。
当时间序列呈直线增加时,可运用一阶差分指数平滑模型来预测。其公式为:
用上述公式可对呈直线增加的序列做一阶差分,构成一个平稳的新序列,可解释为:
在前面我们已分析过,指数平滑值实际上是一种加权平均数。因此把序列中逐期增量的加权平均数(指数平滑值)加上当前值的实际数进行预测,比一次指数平滑法只用变量以往取值的加权平均数作为下一期的预测更合理。 从而使预测值始终围绕实际值上下波动,从根本上解决了在有直线增长趋势的情况下,用一次指数平滑法所得出的结果始终落后于实际值的问题。
当时间序列呈现二次曲线增长时,可用二阶差分指数平滑模型来预测,计算公式如下:
差分方法和指数平滑法的联合运用,除了能克服一次指数平滑法的滞后偏差之外,对初始值的问题也有显著的改进。因为数据经过差分处理后,所产生的新序列基本上是平稳的。这时,初始值取新序列的第一期数据对于未来预测值不会有多大影响。其次,它拓展了指数平滑法的适用范围, 使一些原来需要运用配合直线趋势模型处理的情况可用这种组合模型来取代。但是,对于指数平滑法存在的加权系数α 的选择问题,以及只能逐期预测问题,差分指数平滑模型也没有改进。
自适应滤波法与移动平均法、指数平滑法一样,也是以时间序列的历史观测值进行某种加权平均来预测的,它要寻找一组“最佳”的权数,其办法是先用一组给定的权数来计算一个预测值,然后计算预测误差,再根据预测误差调整权数以减少误差。这样反复进行,直至找出一组“最佳”权数,使误差减少到最低限度。由于这种调整权数的过程与通讯工程中的传输噪声过滤过程极为接近,故称为自适应滤波法。
自适应滤波的基本模型为:
其中, 是第 期的预测值, 是第 期的观测值权数, 为第 期的观测值, 为权数的个数。期调整权数的公式为:
式中,,, 为序列个数, 为调整前的第 个权数, 为调整后的第 个权数, 为学习常数, 为第 期的误差。
clc,clear
yt=0.1:0.1:1;
m=length(yt); k=0.9;
N=2; Terr=10000;
w=ones(1,N)/N;
while abs(Terr)>0.00001
Terr=[];
for j=N+1:m-1
yhat(j)=w*yt(j-1:-1:j-N)';
err=yt(j)-yhat(j);
Terr=[Terr,abs(err)];
w=w+2*k*err*yt(j-1:-1:j-N);
end
Terr=max(Terr);
end
w, yhat
在开始调整权数时,首先要确定权数个数 N 和学习常数 k 。一般说来,当时间序列的观测值呈季节变动时, N 应取季节性长度值。如序列以一年为周期进行季节变动时,若数据是月度的,则取 N = 12 ,若季节是季度的,则取 N = 4 。如果时间序列无明显的周期变动,则可用自相关系数法来确定,即取 N 为最高自相关系数的滞后时期。
k 的取值一般可定为1/ N , 也可以用不同的 k 值来进行计算, 以确定一个能使 S 最小的 k 值。
初始权数的确定也很重要,如无其它依据,也可用1/ N 作为初始权系数用,即
自适应滤波法有两个明显的优点:一是技术比较简单,可根据预测意图来选择权数的个数和学习常数,以控制预测。也可以由计算机自动选定。二是它使用了全部历史数据来寻求最佳权系数,并随数据轨迹的变化而不断更新权数,从而不断改进预测。
由于自适应滤波法的预测模型简单,又可以在计算机上对数据进行处理,所以这种预测方法应用较为广泛。