时间序列 - 指数平滑
在本章中,我们将讨论时间序列指数平滑所涉及的技术。
简单指数平滑
指数平滑是一种通过为一段时间内的数据分配指数递减的权重来平滑单变量时间序列的技术。
从数学上讲,给定时间 t 时的值的变量在时间 't+1' 的值 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 的乘法方法- 当季节性本质上是乘法时。
对于非季节时间序列,我们只有趋势平滑和水平平滑,这就是霍尔特线性趋势法。
让我们尝试对数据应用三重指数平滑。
在[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>]
在这里,我们使用训练集对模型进行了一次训练,然后继续进行预测。一种更现实的方法是在一个或多个时间步后重新训练模型。当我们从训练数据“直到时间“t”获得时间“t+1”的预测时,可以使用训练数据“直到时间“t+1”作为实际数据来进行时间“t+2”的下一个预测。然后就知道“t+1”处的值。这种对一个或多个未来步骤进行预测然后重新训练模型的方法称为滚动预测或前向验证。