所谓时间序列,就是将预测对象按照时间的顺序排列起来,构成一个所谓的时间序列,从所构成的这一组时间序列过去的变化规律,推断出今后的变化的可能的趋势,变化规律,就是时间序列预测法。
确定性时间序列分析方法
一个时间序列往往是一下几种的变化形式的叠加或者耦合
(1)长期趋势变动。它是指时间序列朝着一定的方向持续上升或者下降,或者停留在一水平的倾向,反映了客观事物的主要变化趋势。Tt
(2)季节变动。St
(3)循环变动。周期为1年以上,非季节因素引起的涨落起伏波形相似的波动。Ct
(4)不规则变动。通常分为随机变动和突然变动。Rt
常用的确定时间序列模型的方法
(1)加法模型:
yt = Tt + St + Ct + Rt
(2)乘法模型:
yt = Tt · St · Ct · Rt
(3)混合模型:
就是以上两种的模型的混合组合。
yt为观测目标的观测记录。E(Rt) = 0, Var(Rt) 较小。
移动平均法
例题
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)
n = [4 5]
for i = 1 : length(n)
for j = 1 : m - n(i) + 1
yhat{i}(j) = sum(y(j : j + n(i) - 1 ))/n(i) % 由于取得n的值不同,所以用到了细胞数组。
end
y(12) = yhat{i}(end)
s(i) = sqrt(mean((y(n(i) + 1 : end) - yhat{i}(1 : end - 1)) .^ 2))
end
指数平滑法
一次移动平均实际上认为最近N期数据对未来的值的影响相同加权都是1/N,但是N期之前的数据对当前数据的预测起不到任何的作用,即加权为0。但是二次及更高次的平均权数不是1/N,而且次数越高,权数的结构越复杂。指数平滑法很有作用。
一次指数平滑法
模型
加权系数的选择
若α = 0, 则 yt+1hat = ythat, 就是下期的预测值等于本期的预测值。
那么对于α的选择尤为重要
(1)如果时间序列波动变化不大,比较平稳,那么阿尔法取小点0.1-0.5之间,以减少修正的幅度。
(2)若具有迅速明显的变动倾向,阿尔法取大些,0.6-0.8,使得灵敏度高些,以便于跟得上速度的变化。
现实中可以选择多个数据进行比较。
初始值的确定
一般情况下,可以去前10%的数据的均值开确定初始值。
例题
clc
clear
yt = load('doanqi.txt')
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 ))
二次指数平滑法
一次指数平滑法,虽然克服了移动平均法的缺点,但是当时间序列的变动出现直线趋势时,用一次指数平滑法就会存在明显的滞后偏差,因此也必须要加以修正再做二次指数平滑,利用滞后偏差的规律建立直线趋势模型,就是所谓的二次指数平滑法。
例题
clc
clear
yt = load('fadian.txt')
n = length(yt); alpja = 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
at = 2*st1 - st2
bt = alpha/(1 - alpha)*(st1 - st2)
yhat = at + bt
str = ['C', int2str(n+2)];