Serie temporal: suavizado exponencial

En este capítulo, hablaremos sobre las técnicas involucradas en el suavizado exponencial de series de tiempo.

Suavizado exponencial simple

El suavizado exponencial es una técnica para suavizar series de tiempo univariadas asignando pesos decrecientes exponencialmente a los datos durante un período de tiempo.

Matemáticamente, el valor de la variable en el momento 't + 1' dado el valor en el momento t, y_ (t + 1 | t) se define como -

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

donde, $ 0 \ leq \ alpha \ leq1 $ es el parámetro de suavizado, y

$ y_ {1}, ...., y_ {t} $ son valores previos del tráfico de red en los momentos 1, 2, 3,…, t.

Este es un método simple para modelar una serie de tiempo sin una tendencia clara o estacionalidad. Pero el suavizado exponencial también se puede utilizar para series de tiempo con tendencia y estacionalidad.

Suavizado exponencial triple

Suavizado exponencial triple (TES) o el método de invierno de Holt, aplica el suavizado exponencial tres veces: suavizado de nivel $ l_ {t} $, suavizado de tendencias $ b_ {t} $ y suavizado estacional $ S_ {t} $, con $ \ alpha $ , $ \ beta ^ {*} $ y $ \ gamma $ como parámetros de suavizado con 'm' como la frecuencia de la estacionalidad, es decir, el número de estaciones en un año.

Según la naturaleza del componente estacional, TES tiene dos categorías:

  • Holt-Winter's Additive Method - Cuando la estacionalidad sea de carácter aditivo.

  • Holt-Winter’s Multiplicative Method - Cuando la estacionalidad sea de naturaleza multiplicativa.

Para las series de tiempo no estacionales, solo tenemos suavizado de tendencias y suavizado de niveles, que se denomina Método de tendencia lineal de Holt.

Intentemos aplicar un suavizado exponencial triple en nuestros datos.

En [316]:

from statsmodels.tsa.holtwinters import ExponentialSmoothing

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

En [322]:

predictions_ = model_fit.predict(len(test))

En [325]:

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

Fuera [325]:

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

Aquí, hemos entrenado el modelo una vez con el conjunto de entrenamiento y luego seguimos haciendo predicciones. Un enfoque más realista es volver a entrenar el modelo después de uno o más pasos de tiempo. A medida que obtenemos la predicción para el tiempo 't + 1' a partir de los datos de entrenamiento 'hasta el tiempo' t ', la próxima predicción para el tiempo' t + 2 'se puede hacer utilizando los datos de entrenamiento' hasta el tiempo 't + 1' como el valor real entonces se conocerá el valor en 't + 1'. Esta metodología de hacer predicciones para uno o más pasos futuros y luego volver a entrenar el modelo se llama pronóstico continuo o validación de avance.