数学建模美赛于昨天刚结束,这次比赛和队友之间配合特别默契,虽然不确定他们能不能看到,但是还是想对他们表达一下感谢,大家在一起学习的时候感觉特别好,希望有机会可以继续一起学习呀。
通过这次比赛还了解到了很多的东西,需要填的坑也蛮多,鉴于昨天有点辛苦,故今天想继续填坑之旅,首先要解决的是时间序列这个问题。好了闲话不多说了,下面谈一下我的理解。
时间序列是指将某种现象某一个统计指标在不同时间上的各个数值,按时间的先后顺序排列而成的序列。(这个序列多为离散序列)
构成成分:
内容 | 含义 |
---|---|
趋势T | 通常是长期因素影响的结果,如人口总量的变化,方法的变化等。 |
循环C | 任何时间间隔超过一年的,环绕趋势线的上,下波动,都可归结为时间序列的循环成分。 |
季节S | 许多时间序列往往显示出在一年内有规则的运动,这通常由季节因素引起的,因此成为季节成分。 |
不规则I | 是随机,无法预测的。不规则成分是剩余因素,他说明分离了趋势,循环,季节成分后时间序列的偏差。 |
时间序列的稳定性十分重要,大部分时间序列模型是假设其在稳定的前提下建立的。直观的讲,时间序列随着时间产生特定的行为,有很高的可能性认为他在未来的行为是一样的。
稳定性测试
如果一个时间序列的统计特征如平均数,方差随着时间保持不变,则认为他是稳定的。稳定性的确定标准十分严格,但时间序列随着时间产生恒定的统计特征,根据情况可以假设序列式是稳定的,例如:
- 恒定的平均数
- 恒定的方差
- 不随时间变化的自协方差
了解到这里,我觉得我应该去补概率论的知识了,关于稳定性测试的深入了解,各位可以自行查询,我就不在这里乱理解了。
宽平稳
如果序列的一,二阶矩存在,且对任意时刻t满足:
1)均值为常数
2)协方差为时间间隔$\tau$的函数(定义:$\tau=\pi$)
则称该序列为款平稳时间序列,假设以后研究的时间序列均为宽平稳时间序列。
本人一点浅薄的理解是关于时间序列在预测方面的作用,而常用的三种预测方法为:移动平均法,指数平滑法,下面本文着重介绍移动平均法,指数平滑法。
移动平均法
根据时间序列逐渐退移,依次计算包含一定项数的时序平均数,以反映长期趋势的方法。当时间序列的数值由于受周期变动和不规则变动的影响,起伏较大,不易显示出发展趋势时,可用移动平均法,消除这些因素的影响。
简单平均移动法
设观测序列为$y_1,L,y_t$,取移动平均的项数N<t.一次简单移动平均值计算公式为:
$M_t^{(1)}=\frac{1}{N}(y_t+y_{t-1}+L+y_{t-N+1})$
$=\frac{1}{N}(y_{t-1}+L+y_{t-N})+\frac{1}{N}(y_{t}-y_{t-N})$
$=M_{t-1}^{(1)}+\frac{1}{N}(y_{t}-y_{t-N})$
当预测目标的基本趋势是在某一水平上下波动时,可用一次简单移动平均法建立预测模型:
$\hat{y}_{t+1}=M_t^{(1)}=\frac{1}{N}(y_t+L+y_{t-N+1}),t=N,N+1,L,T$
其预测标准误差为:
$s=\sqrt{\frac{\sum\limits_{t=N+1}^T(\hat{y_t}-y_t)^2}{T-N}}$
最近N期序列值得平均值作为未来各期的预测结果。当历史序列的基本趋势变化不大且序列中随机变动成分较多时,N的取值应大一些,反之取小。在有却确定的季节变动周期的资料中,移动平均的项数应取得项数为周期长度,选择一个最佳N的有效方法是,比较若干模型的预测平均误差,预测标准误差最小值为好。
数据还是以美赛mcm中c题的数据作为本例的数据。以az的天然气能源作为原始数据序列:
首先确定N的最佳值,由于数据量较小,计算几个值:
n=5,s=24487
n=6,s=21181
n=7,s=21920
故选择n=6
下面上matlab代码:
1 | y=[343414.509 347261.3399 369742.9504 389838.7377 402390.1462 342889.3714 342839.3757 369871.869 386769.6754 403262.1076]; |
由上面得到结果后,再改写代码,预测未来十年
y=[343414.509 347261.3399 369742.9504 389838.7377 402390.1462 342889.3714 342839.3757 369871.869 386769.6754 403262.1076];
x=(1:10);%本来想用zeros但是一旦修改就报错,用这种方法就是会有误差,希望大佬指正
n=6; %n为移动平均的项数
c=[y,x];
for j=6:20
c(j)= sum(c(j-n+1:j))/n;
end
简单平均移动法一般用于少量预测,较大量预测容易产生误差,网上有很多预测1期的,这里采用预测10年,有需要预测一期的可以自行查阅相关资料。
二次平均移动法
在一次移动平均的基础上,再进行一次移动平均就是二次移动平均,其计算公式为:
$M_t^{(2)}=\frac{1}{N}(M_t^{(2)}+L+M_{t-N+1}^{(1)})=M_{t-1}^{(2)}+\frac{1}{N}(M_t^{(1)}-M_{t-N}^{(1)})$
下面讨论如何利用移动平均的滞后偏差建立直线趋势预测模型。
设时间序列{Yt}从某时期开始具有直线趋势,且认为未来时期也按此直线趋势变化,则可设此直线趋势预测模型为:
$\hat{y}_{t+m}=a_t+b_tm$
其中t为当期期数,m为由t至预测期的时期数,$a_t为截距,b_t为斜率$,两者又成为平滑系数。
现在根据移动平均值来确定平滑系数,由上式可知:
$a_t=2M_t^{(1)}-M_t^{(2)}$
$b_t=\frac{2}{N-1}(M_t^{(1)}-M_t^{(2)})$
沿用上面的数据,首先还是计算出最合理的N,代码与前面代码类似,二次平均matlab代码如下:
1 | y=[343414.509 347261.3399 369742.9504 389838.7377 402390.1462 342889.3714 342839.3757 369871.869 386769.6754 403262.1076]'; |
- 指数平滑法
一次移动平均实际上认为最近N期数据对未来值影响相同,都加权$\frac{1}{N}$;而N期以前的数据对未来值没有影响,加权为0.但是二次以及更高次移动平均数的权数却不是$\frac{1}{N}$,且次数越高,权数的结构越复杂,但永远保持对称的权数,即两端项权数小,中间项权数大,不符合一般系统的动态性。一般来说历史数据对未来值得影响是随时间间隔的增长而递减的。所以,更切合实际的方法应是对各期观测值依时间顺序进行加权平均作为预测值。指数平滑法可以满足。
一次指数平滑法
1)设时间序列为$y_1,y_2,…y_t,…\alpha为加权系数$,$0<\alpha<1$,一次指数平滑公式为:
$S_t^{(1)}=\alpha y_t+(1-\alpha)S_{t-1}^{(1)}=S_{t-1}^{(1)}+\alpha(y_t-S_{t-1}^{(1)})$
上式由移动平均公式改进而来的。由前面的移动平均数的递推公式为:$M_{t}^{(1)}=M_{t-1}^{(1)}+\frac{y_{t}-y_{t-N}}{N}$,以$M_{t-1}^{(1)}$作为$y_{t-N}$的最佳估计,则有
$M_{t}^{(1)}=M_{t-1}^{(1)}+\frac{y_{t}-M_{t-1}^{(1)}}{N}=\frac{y_{t}}{N}+(1-\frac{1}{N})M_{t-1}^{(1)}$
令$\alpha=\frac{1}{N}$,以$S_t^{(1)}代替M_t^{(1)}$,即得:$S_t^{(1)}=\alpha y_t+(1-\alpha)S_{t-1}^{(1)}$
为了进一步理解指数平滑的实质,把上式一次展开,有
$S_t^{(1)}=\alpha y_t+(1-\alpha)[\alpha y_{t-1}+(1-\alpha)S_{t-2}^{(1)}]=…=a\sum\limits^{\infty}_{j=0}(1-\alpha)^j y_{t-j}$
上式表明$S_t^{(1)}$是全部历史数据的加权平均,加权系数分别为$\alpha,\alpha(1-\alpha),\alpha(1-\alpha)^2,L$,显然有:
$\sum\limits^{\infty}_{j=0}\alpha(1-\alpha)^j=\frac{\alpha}{1-(1-\alpha)}=1$
由于加权系数符合指数规律,又具有平滑数据的功能,故称为指数平滑。以这种平滑值进行预测,就是一次指数平滑法,预测模型为:
$\hat y_{t+1}=S_t 即\hat y_{t+1}=\alpha y_t +(1-\alpha)\hat y_t$也就是以第t期指数平滑值作t+1期预测值。
2)加权系数的选择
在进行指数平滑时,加权系数的选择是很重要的。由上式可以看出,$\alpha$的大小规定了在新预测值中新数据和原预测值所占的比重