- 这篇文章主要讨论以下两个问题:
- 时间序列与回归的区别与联系
- 确定性时间序列的模型
1.时间序列与回归的区别与联系
1.1 联系
- 都是通过学习过去的数据,预测未来数据,如房价预测。且同样都只能用于短期预测。
- 都考虑到数据的随机性和噪声的影响
如线性回归模型
时间序列模型 (待补充)
1.2 区别
- 最直观的一点,在回归中 是由X预测的,通常有一个;
而在时间序列中 是由、等,即过去的值预测的,通常是一个递推式 - 独立性:(待补充)
2.确定性时间序列模型
2.1移动平均法(SMA,Simple Moving Average)
- 适用条件:预测对象的基本趋势是在某一水平上下波动
1 | 2 | 3 | 4 | 5 | 6 |
51.3 | 60.5 | 52.6 | 56.2 | 54.2 | 56.0 |
7 | 8 | 9 | 10 | 11 | 12 |
51.0 | 59.2 | 54.9 | 52.2 | 60.3 | 57.6 |
2.1.1一次移动平均
递推式:
这很直观,时刻的由之前
的N个数据决定,且每个数据的权重都是,即取算术平均值
代码:
%matlab
y=[51.3,60.5,52.6,56.2,54.2,56.0,51.0,59.2,54.9,52.2,60.3,57.6];
N=4;m=size(y,2);S=0;
S=sum(y(1:N));
y_predict=zeros(1,m);
error=0;
for i=N+1:m
y_predict(i)=S/N;
error=error+(y_predict(i)-y(i))^2;
S=S+y(i)-y(i-N);
end
MSE=(error/(m-N))^0.5;
MSE=3.2520
可视化
2.1.2二次移动平均
(待补充)
2.2 指数平均(EMA,Exponational Moving Average)
2.2.1一次指数平均(对于SMA权值的改进)
适用条件:仍是预测对象的基本趋势是在某一水平上下波动,但是注意一次移动平均法历史数据的权值都是1/N,而一次指数平滑是年份越近的权值越大,这很符合我们直觉上的理解,即越近的年份影响越大
递推式:
原理:首先定义一次指数平均为则递推可得
再令
则
“指数平均”由式(5)得名
注意一下两点:
- 历史的数据权重越近的越大,根据式(5),即要预测t+1年,则t年的权值为,t-1年为……,t-j年为,权值递减且易证和为1
- alpha 的选择:
- 当数据比较平稳时,取小一点。因为t-j年为,小的能让比较早的数据依然有较大的比重。
- 当数据波动比较大时,近期的数据比较重要,所以取大一点,大的能让比较近的数据有较大的比重,远的数据比重很小。
- 也可对多个测试,选择MSE最小的
代码:
y=[51.3,60.5,52.6,56.2,54.2,56.0,51.0,59.2,54.9,52.2,60.3,57.6];
MSE_min=inf; m=size(y,2);
y_predict=zeros(1,m);
y_predict(1)=(y(1)+y(2))/2;% 取初值
for alpha=[0.1,0.3,0.5,0.7]
error=0;
for i=2:m
y_predict(i)=alpha*y(i-1)+(1-alpha)*y_predict(i-1);
error=error+(y_predict(i)-y(i))^2;
end
MSE=(error/(m-N))^0.5;
if MSE<MSE_min
MSE_min=MSE;
alpha_opt=alpha;
end
end
MSE=3.8220
可视化
- 可以看到比滞后了一个时间单位,其实从公式(1)可以就看出与是更相关的,而不是
2.2.2 二次指数平均(对一次指数的改进)
适用条件:目的是修正一次指数的滞后偏差,且适用于线性趋势模型。
递推公式:
原理:在式(2)一次指数平均的基础上,定义二次指数平均
递推得:
的系数如下表
…… | |||
…… | |||
…… | |||
…… | |||
…… |
即
可证权值之和仍然为1
令
其中
(读者可以代入(3)和(9)看下和长什么样😄)
再取m=1,即得到递推式(6)
代码:
y=[51.3,60.5,70.6,86.2,94.2,106.0,111.0,129.2,134.9,144.2,150.3,160.6];
MSE_min=inf; m=size(y,2);
y_predict=zeros(1,m);
S1=zeros(1,m);
S2=zeros(1,m);
S1(1)=(y(1)+y(2))/2;
S2(1)=(y(1)+y(2))/2;
y_predict(1)=(y(1)+y(2))/2;
for alpha=[0.1,0.3,0.5,0.7]
error=0;
for i=2:m
y_predict(i)=(2-alpha)/(1-alpha)*S1(i-1)-(1/(1-alpha))*S2(i-1);
S1(i)=(alpha)*y(i)+(1-alpha)*S1(i-1);
S2(i)=(alpha)*S1(i)+(1-alpha)*S2(i-1);
error=error+(y_predict(i)-y(i))^2;
end
MSE=(error/(m-N))^0.5;
if MSE<MSE_min
MSE_min=MSE;
alpha_opt=alpha;
end
end
MSE=6.8805
可视化
2.2.3 三次指数平均
适用条件:时间序列变化趋势为二次曲线趋势
公式参见司守奎《数学建模算法与应用》