文章目录
统计学 时间序列预测
时间序列:按时间顺序记录的一组数据,这里用 t = 1 , 2 , ⋯ , n t=1,2,\cdots,n t=1,2,⋯,n 表示所观察的时间, Y t Y_t Yt 表示再时间 t t t 上的观察值
时间序列的成分与预测方法
时间序列的成分
一个时间序列通常由四种要素组成:趋势、季节变动、循环波动和不规则波动
趋势 trend:时间序列在一段较长时期内呈现出来的持续向上或者持续向下的变动。趋势在一定观察期内可能是线性变化,但随着时间的推移也可能呈现出非线性变化。
季节变动 seasonal fluctuation:时间序列呈现出的以年为周期长度的固定变动模式,这种模式年复一年地出现。
循环波动 cyclic fluctuation:时间序列呈现出的非固定长度的周期性波动。循环波动的周期可能会持续一段时间,并且是涨落相间的交替波动。
不规则波动 irregular variations:时间序列中除去趋势、季节变动和循环波动之后的随机波动。
时间序列的四个组成部分可以用乘法模型或加法模型表示,乘法模型更为常见:
Y
t
=
T
t
×
S
t
×
C
t
×
I
t
Y_t=T_t\times S_t\times C_t\times I_t
Yt=Tt×St×Ct×It
预测方法的选择与评估
预测方法的选择需要考虑以下因素:
- 历史数据的变化模式,即时间序列所包含的成分
- 能获得的历史数据的多少
- 所要求的预测期的长短
预测方法 | 适合的数据模式 | 对数据的要求 | 预测期 |
---|---|---|---|
移动平均 | 平稳序列 | 数据个数与移动平均的步长相等 | 非常短 |
简单指数平滑 | 平稳序列 | 5个以上 | 短期 |
Holt 指数平滑 | 线性趋势 | 5个以上 | 短期至中期 |
一元线性回归 | 线性趋势 | 10个以上 | 短期至中期 |
指数模型 | 非线性趋势 | 10个以上 | 短期至中期 |
多项式函数 | 非线性趋势 | 10个以上 | 短期至中期 |
Winter 指数平滑 | 趋势和季节成分 | 至少有4个周期的季度或月份数据 | 短期至中期 |
含季节哑变量的多元回归 | 趋势和季节成分 | 至少有4个周期的季度或月份数据 | 短期、中期、长期 |
分解预测 | 趋势、季节和循环成分 | 至少有4个周期的季度或月份数据 | 短期、中期、长期 |
预测方法的评估:预测方法的好坏取决于预测误差的大小,即预测值与实际值的差距。常用的度量方法有:平均误差、平均绝对误差、均方误差、平均百分比误差、平均绝对百分比误差,较为常用的是均方误差:
M
S
E
=
∑
(
Y
i
−
F
i
)
2
n
MSE=\frac{\sum(Y_i-F_i)^2}{n}
MSE=n∑(Yi−Fi)2
Y
i
Y_i
Yi 是第
i
i
i 期的实际值,
F
i
F_i
Fi 是第
i
i
i 期的预测值,
n
n
n 为预测误差的个数。
平稳序列的预测
平稳序列:不含趋势、季节变动和循环波动的序列,波动主要是随即成分所致,序列的平均值不随时间的推移而变化。常用预测方法有:简单平均、移动平均、简单指数平滑等。
移动平均预测
移动平均预测:选择固定长度的移动间隔,对时间序列逐期移动求得平均数作为下一期的预测值。设移动间隔长度为
k
k
k (
1
<
k
<
t
1\lt k \lt t
1<k<t),则
t
+
1
t+1
t+1 期的移动平均预测值为:
F
t
+
1
=
Y
ˉ
t
=
Y
t
−
k
+
1
+
Y
t
−
k
+
2
+
⋯
+
Y
t
−
1
+
Y
t
k
F_{t+1}=\bar Y_t=\frac{Y_{t-k+1}+Y_{t-k+2}+\cdots+Y_{t-1}+Y_t}{k}
Ft+1=Yˉt=kYt−k+1+Yt−k+2+⋯+Yt−1+Yt
预测时可采用不同的移动步长进行预测,然后选择一个使均方误差达到最小的移动步长。
简单指数平滑预测
简单指数平滑预测:加权平均,把
t
t
t 期的实际值
Y
t
Y_t
Yt 和
t
t
t 期的平滑值
S
t
S_t
St 加权平均作为
t
+
1
t+1
t+1 期的预测值。观测的时间离现时期越远,其权数呈现指数下降,因而称为指数平滑:
F
t
+
1
=
α
Y
t
+
(
1
−
α
)
S
t
F_{t+1}=\alpha Y_t+(1-\alpha)S_{t}
Ft+1=αYt+(1−α)St
- 简单指数平滑预测中, S t = F t S_t=F_t St=Ft ;初始时,可选择 S 1 = Y 1 S_1=Y_1 S1=Y1 或者 S 1 = ( Y 1 + Y 2 + Y 3 ) / 3 S_1=(Y_1+Y_2+Y_3)/3 S1=(Y1+Y2+Y3)/3
- 平滑系数: α \alpha α 的取值为 [ 0 , 1 ] [0,\,1] [0,1] 。 α = 0 \alpha=0 α=0 ,仅仅重复上一次的预测结果; α = 1 \alpha=1 α=1 ,预测值就是上一期的实际观察值; α \alpha α 越接近 1 1 1 ,则模型对时间序列变化的反应就越及时,因此时间序列有较大的随机波动时,应选择较大的平滑系数。
- 可以多比较几个 α \alpha α ,选择预测误差最小的那个。若 α \alpha α 大于 0.5 才能比较接近实际值,通常说明序列有某种趋势或波动过大,一般不适合用简单的指数平滑法进行预测。
- 优点是只需要少数几个观测值就能进行预测,方法相对简单;缺点是预测值往往滞后于实际值,而且无法考虑趋势和季节成份。
趋势预测
线性趋势预测
线性趋势:时间序列按照一个固定的常数(固定斜率)增长或下降。
一元回归预测:使用最小二乘法得到回归系数:
Y
^
t
=
b
0
+
b
1
t
\hat Y_t=b_0+b_1t
Y^t=b0+b1t
预测趋势的误差可用线性回归中的估计标准误差来衡量。
Holt 指数平滑预测:改进了简单指数平滑预测,将趋势考虑进来,改善了指数平滑滞后的问题:
平滑值:
S
t
=
α
Y
t
+
(
1
−
α
)
(
S
t
−
1
+
T
t
−
1
)
趋势更新:
T
t
=
γ
(
S
t
−
S
t
−
1
)
+
(
1
−
γ
)
T
t
−
1
预测:
F
t
+
k
=
S
t
+
k
T
t
\begin{array}{l} 平滑值:S_t=\alpha Y_t+(1-\alpha)(S_{t-1}+T_{t-1}) \\ 趋势更新:T_t=\gamma(S_t-S_{t-1})+(1-\gamma)T_{t-1} \\ 预测:F_{t+k}=S_t+kT_{t} \end{array}
平滑值:St=αYt+(1−α)(St−1+Tt−1)趋势更新:Tt=γ(St−St−1)+(1−γ)Tt−1预测:Ft+k=St+kTt
- 初始时,可设 S t − 1 = Y 1 S_{t-1}=Y_1 St−1=Y1 , T t − 1 = Y 2 − Y 1 T_{t-1}=Y_2-Y_1 Tt−1=Y2−Y1 或 T t − 1 = ( Y 2 − Y 1 ) + ( Y 4 − Y 3 ) 2 T_{t-1}=\frac{(Y_2-Y_1)+(Y_4-Y_3)}{2} Tt−1=2(Y2−Y1)+(Y4−Y3)
- 新增的平滑系数 γ \gamma γ 取值也在 [ 0 , 1 ] [0,\,1] [0,1]
非线性趋势预测
指数曲线:用于描述以几何级数递增或递减的现象:
Y
^
t
=
b
0
e
b
1
t
\hat Y_t=b_0e^{b_1t}
Y^t=b0eb1t
其中
b
0
b_0
b0 和
b
1
b_1
b1 可以通过将原数据取自然对数(线性化)后使用最小二乘法求解
多阶曲线:当现象变化形态较为复杂时,可以拟合多项式函数。当有
k
−
1
k-1
k−1 个拐点时,需要拟合
k
k
k 阶曲线:
Y
^
t
=
b
0
+
b
1
t
+
b
2
t
2
+
⋯
+
b
k
t
k
\hat Y_t=b_0+b_1t+b_2t^2+\cdots+b_kt^k
Y^t=b0+b1t+b2t2+⋯+bktk
将数据的幂次作为特征/变量加入模型(线性化)后可以通过最小二乘法求解
多成分序列的预测
当时间序列同时包含趋势、季节变动和随机波动等多种成分时,可以使用 Winter 指数平滑预测、引入季节哑变量的多元回归预测、分解预测等方法进行预测。
Winter 指数平滑预测
Winter 模型:Holt 指数平滑模型只能判断趋势,不能判断季节成分;winter 模型再引入了一个平滑系数
δ
\delta
δ 来预测季节成分:
平滑值:
S
t
=
α
Y
t
I
t
−
L
+
(
1
−
α
)
(
S
t
−
1
+
T
t
−
1
)
趋势更新:
T
t
=
γ
(
S
t
−
S
t
−
1
)
+
(
1
−
γ
)
T
t
−
1
季节项更新:
I
t
=
δ
Y
t
S
t
+
(
1
−
δ
)
I
t
−
L
未来第
k
期的预测值:
F
t
+
k
=
(
S
t
+
k
T
t
)
I
t
−
L
+
k
\begin{array}{l} 平滑值:S_t=\alpha\frac{Y_t}{I_{t-L}}+(1-\alpha)(S_{t-1}+T_{t-1}) \\ 趋势更新:T_t=\gamma(S_t-S_{t-1})+(1-\gamma)T_{t-1} \\ 季节项更新:I_{t}=\delta\frac{Y_t}{S_t}+(1-\delta)I_{t-L} \\ 未来第k期的预测值:F_{t+k}=(S_t+kT_t)I_{t-L+k} \end{array}
平滑值:St=αIt−LYt+(1−α)(St−1+Tt−1)趋势更新:Tt=γ(St−St−1)+(1−γ)Tt−1季节项更新:It=δStYt+(1−δ)It−L未来第k期的预测值:Ft+k=(St+kTt)It−L+k
- 计算平滑值时, Y t I t − L \frac{Y_t}{I_{t-L}} It−LYt 是用季节调节因子来消除季节变动;
- L L L 是季节周期的长度,例如对于月份数据, L = 12 L=12 L=12 ;
- 使用 Winter 模型进行预测,要求数据至少是按季度或者月份来收集的,并且要有 4 年以上的数据
引入季节哑变量的多元回归预测
如果序列含有趋势和季节等多种成分,可以将季节变量作为哑变量加入回归模型,这样都可以归为趋势,例如季度数据可以引入:
Q
2
=
{
1
第
2
季度
0
其他季度
Q
3
{
1
第
3
季度
0
其他季度
Q
4
=
{
1
第
4
季度
0
其他季度
Q_2=\left\{ \begin{array}{ll} 1 & 第 2 季度 \\ 0 & 其他季度 \end{array} \right. \quad Q_3\left\{ \begin{array}{ll} 1 & 第 3 季度 \\ 0 & 其他季度 \end{array} \right. \quad Q_4=\left\{ \begin{array}{ll} 1 & 第 4 季度 \\ 0 & 其他季度 \end{array} \right. \quad
Q2={10第2季度其他季度Q3{10第3季度其他季度Q4={10第4季度其他季度
以第1季度为参照季度,即基础水平;最后得到含有季节哑变量的多元回归方程为:
Y
^
=
b
0
+
b
1
t
+
b
2
Q
2
+
b
3
Q
3
+
b
4
Q
4
\hat Y=b_0+b_1t+b_2Q_2+b_3Q_3+b_4Q_4
Y^=b0+b1t+b2Q2+b3Q3+b4Q4
其中
b
1
b_1
b1 是趋势成分的系数,
b
2
−
4
b_{2-4}
b2−4 表示每一个季度与参照的第一季度的平均差值
分解预测
分解预测:先将时间序列的各个成分依次分解出来,然后再进行预测。该方法适合于含有趋势、季节、循环等多种成分序列预测的一种古典方法。该方法容易理解、可解释性强,并且预测效果较好,一直得到广泛运用。步骤为:
① 确定并分离季节成分。季节成分一般用季节指数来表示,然后用序列的每一个观察值除以相应的季节指数,以消除季节成分
② 建立预测模型并进行预测。对消除季节成分后的序列建立各种预测模型,根据这一模型进行预测
③ 将预测值乘以相应的季节指数,得到最终的预测值
季节成分分离比较复杂,写代码的话可以考虑直接调包或者用数据分析软件;常用方法有经验模态分解(EMD)、小波变化和傅里叶变化。其中傅里叶变换和小波变换适用于平稳季节性成分分离,而 EMD 适用于非平稳季节性成分分离。