时间序列 - 指数平滑
在本章中,我们将讨论时间序列的指数平滑所涉及的技术。
简单指数平滑
指数平滑是一种通过在一段时间内为数据分配指数递减权重来平滑单变量时间序列的技术。
在数学上,变量在时间 t+1 的值给定时间 t 的值,y_(t+1|t) 定义为 −
$$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\leq\alpha \leq1$ 是平滑参数,并且
$y_{1},....,y_{t}$ 是网络流量在时间 1, 2, 3, ... ,t 的先前值。
这是对没有明确趋势或季节性的时间序列进行建模的简单方法。 但指数平滑也可用于具有趋势和季节性的时间序列。
三重指数平滑
三重指数平滑 (TES) 或 Holt 的 Winter 方法,应用指数平滑三次 - 水平平滑 $l_{t}$、趋势平滑 $b_{t}$ 和季节性平滑 $S_{t}$,使用 $\alpha$ , $\beta^{*}$ 和 $\gamma$ 作为平滑参数,'m' 作为季节性的频率,即一年中的季节数。
根据季节成分的性质,TES有两类 −
Holt-Winter 的加法 − 当季节性本质上是累加时。
Holt-Winter 的乘法 − 当季节性本质上是乘法时。
对于非季节性时间序列,我们只有趋势平滑和水平平滑,称为霍尔特线性趋势法。
让我们尝试对我们的数据应用三次指数平滑。
In [316]:
from statsmodels.tsa.holtwinters import ExponentialSmoothing model = ExponentialSmoothing(train.values, trend= ) model_fit = model.fit()
In [322]:
predictions_ = model_fit.predict(len(test))
In [325]:
plt.plot(test.values) plt.plot(predictions_[1:1871])
Out[325]:
[<matplotlib.lines.Line2D at 0x1eab00f1cf8>]
![Code Snippet 17](/time_series/images/code_snippet17.jpg)
在这里,我们用训练集对模型进行了一次训练,然后继续进行预测。一种更现实的方法是在一个或多个时间步之后重新训练模型。当我们从训练数据'直到时间 't' 得到时间 't+1' 的预测时, 可以使用训练数据直到时间 't+1' 对时间 't+2' 进行下一个预测,因为届时将知道 't+1' 处的实际值。这种对一个或多个未来步骤进行预测然后重新训练模型的方法称为滚动预测或向前验证。