时间序列

时间序列

Assumption:

  1. 预测所依据的数据具有不规则性
  2. 不考虑事物发展之间的因果关系

变化形式:

  • 长期趋势:主要变化趋势
  • 季节变动:在每期内重复出现的周期性变动(周期一般为12月)
  • 循环变动:以期数为周期而重复出现的周期性变动
  • 不规则变动:偶然变动

方法

image-20230126203921531

指数平滑法

一次指数平滑法

设时间序列为y1,y2,...,yty_{1},y_{2},...,y_{t},一次指数平滑法公式为:

St(1)=αyt+(1α)St1(1)=St1(1)+α(ytSt1(1))\begin{array}{l} \mathrm{S}_{t}^{(1)}=\alpha y_{t}+(1-\alpha) \mathrm{S}_{t-1}^{(1)}=\mathrm{S}_{t-1}^{(1)}+\alpha\left(y_{t}-\mathrm{S}_{t-1}^{(1)}\right) \end{array}

预测模型(指数平滑值)为:

y^t+1=St(1)\hat{y}_{t+1}=S_{t}^{(1)}

即:

y^t+1=αyt+(1α)y^t\hat{y}_{t+1}=\alpha y_{t}+(1-\alpha) \hat{y}_{t}

α\alpha选择

新数据所占比重与α\alpha成正比

  • 时间序列波动较大

α\alpha选取0.6-0.8,增强预测模型的灵敏度,跟上数据变化

  • 时间序列波动较小

α\alpha选取0.1-0.5,以减小修正幅度,预测模型可以包含较长的信息

初始值选择

数据在20个以上选取第一个值

20个以下选取第一二个的平均值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
clear all;
real_sale = [50 52 47 51 49 48 51 40 48 52 51 59];
a = [0.2 0.5 0.8];
y1 = (real_sale(1)+real_sale(2))/2;%初始值
pre = zeros(3,12);
pre(:,1) = y1;
for i = 1:3
for j = 2:12
pre(i,j) = (real_sale(j-1)*a(i)+pre(i,j-1)*(1-a(i)));
end
end
pre;
real_sale = repmat(real_sale,3,1);
err = sqrt(mean((real_sale-pre)'.^2))

%%
err =

4.5029 4.5908 4.8426
故选用0.2
预测1988数值


%%
pre1988 = 0.2*real_sale(i,j)+0.8*pre(1,j)
%

pre1988 =

51.1754

确定时间序列包含成分——>确定时间序列类型——>找出时间序列变化趋势——>确定预测方法——>对预测方法进行评估,确定最佳方案

一次指数平滑法具有滞后性,拓展为二次指数平滑法

二次指数平滑法

计算公式:

St(1)=αyt+(1α)St1(1)St(2)=αSt(1)+(1α)St1(2)\begin{array}{l} \mathrm{S}_{t}^{(1)}=\alpha y_{t}+(1-\alpha) \mathrm{S}_{t-1}^{(1)} \\ \mathrm{S}_{t}^{(2)}=\alpha \mathrm{S}_{t}^{(1)}+(1-\alpha) \mathrm{S}_{t-1}^{(2)} \end{array}

St(1)S_{t}^{(1)} 是第一次指数的平滑值,$ S_{t}^{(2)}$ 为二次指数平滑值。
当时间序列 {yt}\left\{y_{t}\right\} , 从某时刻开始具有直线趋势时, 可 用直线趋势模型:

y^=at+btT, T=1,2,{at=2 St(1)St(2)bt=α1α(St(1)St(2))\begin{array}{l} \hat{y}=a_{t}+b_{t} T \quad, \quad \mathrm{~T}=1,2, \cdots \cdots \\ \left\{\begin{array}{l} a_{t}=2 \mathrm{~S}_{t }^{(1)}-\mathrm{S}_{t}^{(2)} \\ b_{t}=\frac{\alpha}{1-\alpha}\left(\mathrm{S}_{t}^{(1)}-\mathrm{S}_{t}^{(2)}\right) \end{array}\right. \end{array}

例子:

image-20230126213643341

选取α\alpha为0.3,初始值区序列首项S0(1)=S00=y(1)S_{0}^{(1)}=S_{0}^{0}=y(1)

计算一次平滑值和二次平滑值S21(1)=3523.1,S21(2)=3032.6S_{21}^{(1)}=3523.1,S_{21}^{(2)}=3032.6

得到t=21t=21时,a21=4013.7,b21=210.24a_{21}=4013.7,b_{21}=210.24

得到t=21t=21时的直线趋势方程为:

y^21+T=4013.7+210.24T\hat{y}_{21+T}=4013.7+210.24T

预测1986和1987年的总发电量为:

y^1986=y^22=y^21+1=4223.9\hat{y}_{1986}=\hat{y}_{22}=\hat{y}_{21+1}=4223.9

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
clc;
clear all;
yt = [676 825 774 716 940 1159 1384 1524 1668 1688 1958 2031 2234 2566 2820 3006 3093 3277 3514 3770 4107];
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
a21 = 2*st1-st2;
b21 = alpha/(1-alpha)*(st1-st2);
y1986 = a21+b21*1;
y1987 = a21+b21*2;
disp('1986年的预测值为:');
y1986(end)
disp('1987年的预测值为:');
y1987(end)

三次指数平滑法

当时间序列的变动呈现为二次曲线趋势时进行三次指数平滑

St(1)=αyt+(1α)St1(1)St(2)=αSt(1)+(1α)St1(2)St(3)=αSt(2)+(1α)St1(3)\begin{array}{l} \mathrm{S}_{t}^{(1)}=\alpha y_{t}+(1-\alpha) \mathrm{S}_{t-1}^{(1)} \\ \mathrm{S}_{t}^{(2)}=\alpha \mathrm{S}_{t}^{(1)}+(1-\alpha) \mathrm{S}_{t-1}^{(2)}\\ \mathrm{S}_{t}^{(3)}=\alpha \mathrm{S}_{t}^{(2)}+(1-\alpha) \mathrm{S}_{t-1}^{(3)} \end{array}

三次指数平滑法的预测模型为:

y^t+T=at+btT+ctT2,T=1,2,\hat{y}_{t+T}=a_{t}+b_{t} T+c_{t} T^{2}, T=1,2, \ldots

其中

at=3 St(1)3 St(2)+St(3)bt=α2(1α)(65α)St(1)2(54α)St(2)+(43α)St(3)ct=α22(1α)2[ St(1)2 St(2)++St(3)]\begin{array}{c} a_{t}=3 \mathrm{~S}_{t}^{(1)}-3 \mathrm{~S}_{t}^{(2)}+\mathrm{S}_{t}^{(3)} \\ b_{t}=\frac{\alpha}{2(1-\alpha)}(6-5 \alpha) \mathrm{S}_{t}^{(1)}-2(5-4 \alpha) \mathrm{S}_{t}^{(2)}+(4-3 \alpha) \mathrm{S}_{t}^{(3)} \\ \cdot \quad c_{t}=\frac{\alpha^{2}}{2(1-\alpha)^{2}}\left[\mathrm{~S}_{t}^{(1)}-2 \mathrm{~S}_{t}^{(2)}++\mathrm{S}_{t}^{(3)}\right] \end{array}

例子

image-20230126220617335

a=0.3a=0.3 , 初始值$ S_{1}^{(0)}=S_{2}^{(0)}=S_{3}^{(0)}=\frac{y_{1}+y_{2}+y_{3}}{3}=21.94$

计算St(1),St(2),St(3)S_{t}^{(1)}, S_{t}^{(2)}, S_{t}^{(3)}

得到S11(1)=151.77,S11(2)=101.28,S11(3)=68.43得到S_{11}^{(1)}=151.77, S_{11}^{(2)}=101.28, S_{11}^{(3)}=68.43

t=11t=11

a11=219.91,b11=38.38,c11=1.62a_{11}=219.91, b_{11}=38.38, c_{11}=1.62

得到t=11t=11时的预测模型为:

y^11+T=219.91+38.38T+1.62T2\hat{y}_{11+T}=219.91+38.38 T+1.62 T^{2}

预测可得1989年和1990年的固定资产投资总额为:

y^1989=y^12=y^11+1=a11+b11+c11=259.9174y^1990=y^13=y^11+2=a11+2b11+22c11=303.1637\begin{array}{c} \hat{y}_{1989}=\hat{y}_{12}=\hat{y}_{11+1}=a_{11}+b_{11}+c_{11}=259.9174 \\ \hat{y}_{1990}=\hat{y}_{13}=\hat{y}_{11+2}=a_{11}+2 b_{11}+2^{2} c_{11}=303.1637 \end{array}

为了计算出各期的模拟值, 令T=1\mathrm{T}=1, 则得到:

y^t+1=33α+α2(1α)2St(1)3α(1α)2St(2)+1(1α)2St(3)\hat{y}_{t+1}=\frac{3-3 \alpha+\alpha^{2}}{(1-\alpha)^{2}} S_{t}^{(1)}-\frac{3-\alpha}{(1-\alpha)^{2}} S_{t}^{(2)}+\frac{1}{(1-\alpha)^{2}} S_{t}^{(3)}

t=0,1,2,11\mathrm{t}=0,1,2, \ldots 11, 得到各期的模拟值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
clc,clear;
yt = [20.04;20.06;25.72;34.62;51.77;55.92;80.65;131.11;148.58;162.67;232.26];
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];
a11 = 3*st1-3*st2+st3;
b11 = 0.5*alpha/(1-alpha)^2*((6-5*alpha)*st1-2*(5-4*alpha)*st2+(4-3*alpha)*st3);
c11 = 0.5*alpha^2/(1-alpha)^2*(st1-2*st2+st3);
yhat = a11+b11+c11
plot(1:n,yt,'*',1:n,yhat(1:n),'o')
y1989 = a11+b11+c11
y1990 = a11+2*b11+2^2*c11
disp('1989年的预测值为');
y1989(end)
disp('1990年的预测值为');
y1990(end)

得到结果:

1
2
3
4
5
6
7
8
9
10
11
1989年的预测值为

ans =

259.9169

1990年的预测值为

ans =

303.1629
triple
优缺点
  • 短期经济发展趋势

  • 数据量小,对存储需求也小

  • 仅需选择一个模型参数α\alpha

  • 初始值及权数参数选取较为主观,会导致结果不同

  • 对数据转折点的鉴别缺乏,长期预测效果差

ARIMA

模型介绍

平稳性

经由样本时间序列所得到的拟合曲线在未来的一段时间内能顺原有形态延续,要求序列的均值方差不发生明显变化

一般都是都是弱平稳:期望与相关系数不变,未来的t值Xt依赖于过去的信息

由于数据集可能浮动很大,要保证数据具有稳定性,可以使用差分法让均值和方差不发生明显的变化

自回归模型(AR)

定义:描述当前值和历史值的关系(用自身的历史值对自身及逆行预测)

p阶自回归过程定义:

yt=μ+i=1pγiyti+ϵty_{t}=\mu+\sum_{i=1}^{p} \gamma_{i} y_{t-i}+\epsilon_{t}

$ y_{t}$ 是当前值 μ\mu 是常数项 P\mathrm{P} 是阶数 γi\gamma_{i} 是自相关系数 $ \epsilon_{t}$ 是误差

求解可以用最大似然估计、最小二乘法

自回归模型的限制

  • 自回归模型是用自身的数据来进行预测
  • 必须具有平稳性
  • 必须具有自相关性,如果自相关系数小于0.5,则不宜采用
  • 自回归只适用于预测与自身前期相关的现象
移动平均模型(MA)

定义:自回归模型中的误差项累加

p阶自回归过程定义:

yt=μ+ϵt+i=1qθiϵtiy_{t}=\mu+\epsilon_{t}+\sum_{i=1}^{q} \theta_{i} \epsilon_{t-i}

移动平均法能有效地消除预测中的随机波动

自回归移动平均模型(ARMA)

combination

定义:

yt=μ+i=1pγiyti+ϵt+i=1qθiϵtiy_{t}=\mu+\sum_{i=1}^{p} \gamma_{i} y_{t-i}+\epsilon_{t}+\sum_{i=1}^{q} \theta_{i} \epsilon_{t-i}

差分自回归移动平均模型(ARIMA)

用anaconda安装一些库

1
pip install statsmodels

ARIMA(p,d,q) :Autoregressive Integrated Moving Average Model

  1. AR是自回归,p为自回归项,MA为移动平均

    q为移动平均项数,d为时间序列成为平稳时所做的差分次数

  2. 原理:将非平稳时间序列转化为平稳时间序列然后将因变量

    仅对它的滞后值以及随机误差项的现值和滞后值进行回归所建立的模型

自相关函数ACF
包含了其他变量的影响

有序的随机变量序列与其自身相比较,反映了同一序列再不同时序的取值之间的相关性

公式(k为阶数):

ACF(k)=ρk=Cov(yt,ytk)Var(yt)A C F(k)=\rho_{k}=\frac{\operatorname{Cov}\left(y_{t}, y_{t-k}\right)}{\operatorname{Var}\left(y_{t}\right)}

image-20230201155808217

虚线为置信区间(95%)

偏自相关函数(PACF)
只有这两个变量的相关

对于一个平稳ARpAR(p)型、滞后kk自相关系数pkp(k)
实际上得到并不是x(t)x(t)x(tk)x(t-k)间单纯的相关关系

x(t)x(t)同时还会受到中间k1k-1个随机变量x(t1)x(t-1)x(t2)x(t一2)、…x(tk+1)x(t-k+1)的影响
而这k1k-1个随机变量又都和x(tk)x(t-k)具有相关关系
所以自相关系数pkp(k)里实际掺杂了其他变量对x(t)x(t)x(tk)x(t-k)的影响

剔除了中间k-1个随机变量x(t1)x(t-1)x(t2)x(t一2)、…x(tk)x(t-k)x(t)x(t)影响的相关程度。

ACF还包含了其他变量的影响
而偏自相关系数PACF是严格这两个变量才间的相关性

模型建立

① 首先需要对观测值序列进行平稳性检测,如果不平稳,则对其进行差分运算直到差分后的数据平稳;
② 在数据平稳后则对其进行白噪声检验,白噪声是指零均值常方差的随机平稳序列;
③ 如果是平稳非白噪声序列就计算ACF(自相关系数)、PACF(偏自相关系数),进行ARMA等模型识别;
④ 对已识别好的模型,确定模型参数,最后应用预测并进行误差分析。

7f6fdbf94cd3feec9892474d8a57f966.png

参考博客

将序列平稳(差分法确定d)
ARIMA(p,d,q)阶数的确定

image-20230201161511080

截尾:落在置信区间内(95%的的点都符合规则)

例如:

下图AR模型第2(pp)阶的时候PACF就落在了置信区间内

image-20230201161608066

下图MA模型第qq阶的ACF落在了执行区间内

image-20230201161748658

调用模型

模型评估

用于选择更简单的模型

AIC:赤池信息准则(Akaike lnformation Criterion,AIC)

AIC=2k2ln(L)AIC=2k一2ln(L)

BIC:贝叶斯信息准则(Bayesian lnformation Criterion,BIC)

BIC=kln(n)2ln(L)BIC=kln(n)一2ln(L)

k为模型参数个数,n为样本数量,L为似然函数

p,qp,q越大,参数越多,kk越大,要使得AIC和BIC越小越好

模型残差检验

ARIMA模型的残差最好是均值为0且方差为常数的正态分布,绘制QQ图

代码可参考

课程链接


时间序列
http://gigiboo.github.io/2023/02/14/“时间序列”/
作者
Gigiboo
发布于
2023年2月14日
许可协议