logo

时间序列平滑及预测

王哲峰 / 2022-11-19


目录

时间序列平滑简介

数据平滑通常是为了消除一些极端值或测试误差. 即使有些极端值本身是真实的, 但是并没有反映出潜在的数据模式, 仍需处理

移动平均

移动平均模型是最简单的时间序列建模方法, 即: 下一个值是所有一个时间窗口中值的平均值。 时间窗口越长, 预测值的趋势就越平滑

简单移动平均

$$m_{t} = \frac{1}{k}\sum_{i=1}^{k}y_{t-i}$$

加权移动平均

$$m_{t} = \sum_{i=1}^{k}\omega_{i}y_{t-i}$$

指数平滑

指数平滑(Exponential Smoothing, ES) 也叫做指数加权移动平均(Exponential Weighted Moving Average, EWMA), 由布朗提出、他认为时间序列的态势具有稳定性或规则性, 所以时间序列可被合理地顺势推延; 他认为最近的过去态势, 在某种程度上会持续的未来, 所以将较大的权数放在最近的资料

指数平滑是在 20 世纪 50 年代后期提出的, 并激发了一些十分成功的预测方法. 使用指数平滑方法生成的预测是过去观测值的加权平均值, 并且随着过去观测值离预测值的距离的增大, 权重呈指数型衰减. 换句话说, 观测值越近, 相应的权重越高. 该框架能够快速生成可靠的预测结果, 并且适用于广泛的时间序列, 这是一个巨大的优势并且对于工业应用来说非常重要

指数平滑使用了与移动平均相似的逻辑, 但是, 指数平滑对每个观测值分配了不同的递减权重, 即: 离现在的时间距离越远, 时间序列观测值的重要性就越低。 所有的指数平滑法都要更新上一时间步长的计算结果, 并使用当前时间步长的数据中包含的新信息. 通过"混合"新信息和旧信息来实现, 而相关的新旧信息的权重由一个可调整的参数来控制

一次指数平滑

当时间序列数据没有明显的变化趋势, 就可以使用一次指数平滑. 实际就是对历史数据的加权平均, 它可以用于任何一种没有明显函数规律但确实存在某种前后关联的时间序列的短期预测. 但是一次指数平滑也具有一定的局限性:

  1. 预测值不能反映趋势变动、季节波动等有规律的变动
  2. 这种方法多适用于短期预测, 而不适合作中长期的预测
  3. 由于预测值是历史数据的均值, 因此与实际序列的变化相比有滞后现象

一次指数平滑的预测公式/递推公式如下:

$$S_{i} = \alpha x_{i} + (1 - \alpha) S_{i-1}$$

其中:

递推公式展开可以得到以下形式:

$$\begin{aligned} S_{i} &= \alpha x_{i}+(1-\alpha) S_{i-1} \\ &= \alpha x_{i}+(1-\alpha)\left[\alpha x_{i-1}+(1-\alpha) S_{i-2}\right] \\ &= \alpha x_{i}+(1-\alpha)\left[\alpha x_{i-1}+(1-\alpha)\left[\alpha x_{i-2}+(1-\alpha) S_{i-3}\right]\right] \\ &= \alpha\left[x_{i}+(1-\alpha) x_{i-1}+(1-\alpha)^{2} x_{i-2}+(1-\alpha)^{3} S_{i-3}\right] \\ &= \ldots \\ &= \alpha \sum_{j=0}^{i}(1-\alpha)^{j} x_{i-j} \end{aligned}$$

从上式即可看出指数平滑考虑所有历史观测值对当前值的影响, 但影响程度随时间增长而减小, 对应的时间序列预测公式:

$$\hat{x}_{i+h} = S_{i}$$

其中:

二次指数平滑

二次指数平滑是对一次指数平滑的再平滑. 它适用于具线性趋势的时间数列. 虽然一次指数平均在产生新的数列的时候考虑了所有的历史数据, 但是仅仅考虑其静态值, 即没有考虑时间序列当前的变化趋势. 所以二次指数平滑一方面考虑了所有的历史数据, 另一方面也兼顾了时间序列的变化趋势.

当时间序列中存在趋势时, 使用二次指数平滑, 它只是指数平滑的两次递归使用

二次指数平滑的数学表示:

$$y=\alpha x_{t} + (1 - \alpha)(y_{t-1} + b_{t-1})$$ $$b_{t}=\beta (y_{t} - y_{t-1}) + (1 - \beta)b_{t-1}$$

其中:

$$\left \{ \begin{array}{lcl} S^{(1)}_{t} = \alpha x_{t-1} + (1 - \alpha) S^{(1)}_{t-1} \\ S^{(2)}_{t} = \alpha S^{(1)}_{t} + (1 - \alpha)S^{(2)}_{t-1} \\ \end{array} \right.$$

$$\left \{ \begin{array}{lcl} a_{t} = 2S^{(1)}_{t} - S^{(2)}_{t} \\ b_{t} = \frac{\alpha}{1 - \alpha}(S^{(1)}_{t} - S^{(2)}_{t}) \\ \end{array} \right.$$

$$x^{*}_{t+T} = a_{t} + b_{t} T$$

其中:

三次指数平滑

若时间序列的变动呈现出二次曲线趋势, 则需要采用三次指数平滑法进行预测. 实际上是在二次指数平滑的基础上再进行一次指数平滑. 它与二次指数平滑的区别 就是三次平滑还考虑到了季节性效应

三次指数平滑通过添加季节平滑因子扩展二次指数平滑

三次指数平滑的数学表示:

$$y=\alpha \frac{x_{t}}{c_{t-L}} + (1 - \alpha)(y_{t-1} + b_{t-1})$$ $$b_{t}=\beta (y_{t} - y_{t-1}) + (1 - \beta)b_{t-1}$$ $$c_{t}=\gamma \frac{x_{t}}{y_{t}} + (1-\gamma)c_{t-L}$$

其中:

$$\left \{ \begin{array}{lcl} S^{(1)}_{t} = \alpha x_{t-1} + (1 - \alpha) S^{(1)}_{t-1} \\ S^{(2)}_{t} = \alpha S^{(1)}_{t} + (1 - \alpha)S^{(2)}_{t-1} \\ S^{(3)}_{t} = \alpha S^{(2)}_{t} + (1 - \alpha)S^{(3)}_{t-1} \\ \end{array} \right.$$

$$\left \{ \begin{array}{lcl} a_{t} = 3S^{(1)}_{t} - 3S^{(2)}_{t} + S^{(3)}_{t} \\ b_{t} = \frac{\alpha}{2(1 - \alpha)^{2}}[(6 - 5 \alpha)S^{(1)}_{t} - 2(5 - 4\alpha)S^{(2)}_{t} + (4 - 3\alpha)S^{(3)}_{t}] \\ c_{t} = \frac{\alpha^{2}}{2(1 - \alpha)^{2}}(S^{(1)}_{t} - 2S^{(2)}_{t} + S^{(3)}_{t}) \\ \end{array} \right.$$

$$x^{*}_{t+T} = a_{t} + b_{t} T + c_{t} T^{2}$$

其中:

平滑系数 $\alpha$ 的取值

  1. 当时间序列呈现较稳定的水平趋势时, 应选较小的 $\alpha$, 一般可在 0.05~0.20 之间取值
  2. 当时间序列有波动, 但长期趋势变化不大时, 可选稍大的 $\alpha$ 值, 常在 0.1~0.4 之间取值
  3. 当时间序列波动很大, 长期趋势变化幅度较大, 呈现明显且迅速的上升或下降趋势时, 宜选择较大的 $\alpha$ 值, 如可在 0.6~0.8 间选值. 以使预测模型灵敏度高些, 能迅速跟上数据的变化.
  4. 当时间序列数据是上升(或下降)的发展趋势类型, $\alpha$ 应取较大的值, 在 0.6~1 之间

平滑初值 $S^{(1)}_{1}$ 的取值

不管什么指数平滑都会有个初值, 平滑初值 $S^{(1)}_{1}$ 的取值遵循如下规则即可:

$$S^{(1)}_{1} = S^{(2)}_{1} = S^{(3)}_{1} = \frac{1}{n}(x_{1} + x_{2} + x_{3})$$