Time Series 简明教程

Time Series - Exponential Smoothing

在本章中,我们将讨论时间序列指数平滑涉及的技术。

Simple Exponential Smoothing

指数平滑是一种通过在一段时间内对数据分配指数递减的权重来平滑单变量时间序列的技术。

在数学上,给定时间 t 时的值 y_(t+1|t) 时,时间“t+1”时的变量值定义为 −

y_{t+1|t}\:=\:\alpha y_{t}\:+\:\alpha\lgroup1 -\alpha\rgroup y_{t-1}\:+\alpha\lgroup1-\alpha\rgroup^{2}\:y_{t-2}\:+\:…​+y_{1}

其中,0≤α≤1 是平滑参数,并且

$y_{1},…​.,y_{t}$ 是网络流量在时间点 1、2、3、… 、t 的前值。

这是建模没有明显趋势或季节性的时间序列的一种简单方法。但指数平滑也可用于具有趋势和季节性的时间序列。

Triple Exponential Smoothing

三重指数平滑 (TES) 或霍尔特冬季方法应用指数平滑三次 - 水平平滑 $l_{t}$、趋势平滑 $b_{t}$ 和季节性平滑 $S_{t}$,其中 $\alpha$, $\beta^{*}$ 和 $\gamma$ 作为平滑参数,“m”为季节性频率,即一年中的季节数。

根据季节性分量的性质,TES 有两种类别−

  1. Holt-Winter’s Additive Method − 当季节性本质上是加性的。

  2. Holt-Winter’s Multiplicative Method − 当季节性本质上是乘性的。

对于非季节性时间序列,我们只有趋势平滑和水平平滑,这称为霍尔特线性趋势法。

让我们尝试对我们的数据应用三重指数平滑。

输入[316]:

from statsmodels.tsa.holtwinters import ExponentialSmoothing

model = ExponentialSmoothing(train.values, trend= )
model_fit = model.fit()

输入[322]:

predictions_ = model_fit.predict(len(test))

输入[325]:

plt.plot(test.values)
plt.plot(predictions_[1:1871])

输出[325]:

[<matplotlib.lines.Line2D at 0x1eab00f1cf8>]
code snippet17

在这里,我们用训练集训练了一次模型,然后我们继续做出预测。一种更现实的方法是在一个或多个时间步之后重新训练模型。当我们从训练数据“直到时间‘t’”获得时间“t+1”的预测时,下一次时间“t+2”的预测可以使用训练数据“直到时间‘t+1’”来做出,因为那时将知道时间“t+1”的实际值。这种为一个或多个未来步做出预测然后重新训练模型的方法称为滚动预测或向前验证。