Séries Temporais - Suavização Exponencial

Neste capítulo, falaremos sobre as técnicas envolvidas na suavização exponencial de séries temporais.

Suavização Exponencial Simples

Suavização exponencial é uma técnica para suavizar séries temporais univariadas atribuindo pesos decrescentes exponencialmente aos dados ao longo de um período de tempo.

Matematicamente, o valor da variável no tempo 't + 1' dado valor no tempo t, y_ (t + 1 | t) é definido 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} $$

onde $ 0 \ leq \ alpha \ leq1 $ é o parâmetro de suavização, e

$ y_ {1}, ...., y_ {t} $ são os valores anteriores do tráfego de rede nos tempos 1, 2, 3,…, t.

Este é um método simples para modelar uma série temporal sem tendência ou sazonalidade clara. Mas a suavização exponencial também pode ser usada para séries temporais com tendência e sazonalidade.

Suavização Exponencial Tripla

Suavização Exponencial Tripla (TES) ou método Holt's Winter, aplica a suavização exponencial três vezes - suavização de nível $ l_ {t} $, suavização de tendência $ b_ {t} $ e suavização sazonal $ S_ {t} $, com $ \ alpha $ , $ \ beta ^ {*} $ e $ \ gamma $ como parâmetros de suavização com 'm' como a frequência da sazonalidade, ou seja, o número de estações em um ano.

De acordo com a natureza do componente sazonal, o TES tem duas categorias -

  • Holt-Winter's Additive Method - Quando a sazonalidade é aditiva por natureza.

  • Holt-Winter’s Multiplicative Method - Quando a sazonalidade é de natureza multiplicativa.

Para séries temporais não sazonais, temos apenas suavização de tendência e suavização de nível, que é chamada de Método de tendência linear de Holt.

Vamos tentar aplicar a suavização exponencial tripla em nossos dados.

Em [316]:

from statsmodels.tsa.holtwinters import ExponentialSmoothing

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

Em [322]:

predictions_ = model_fit.predict(len(test))

Em [325]:

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

Fora [325]:

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

Aqui, treinamos o modelo uma vez com o conjunto de treinamento e, em seguida, continuamos fazendo previsões. Uma abordagem mais realista é treinar novamente o modelo após uma ou mais etapas de tempo. Como obtemos a previsão para o tempo 't + 1' dos dados de treinamento 'até o tempo' t ', a próxima previsão para o tempo' t + 2 'pode ser feita usando os dados de treinamento' até o tempo 't + 1' como o real valor em 't + 1' será conhecido então. Esta metodologia de fazer previsões para uma ou mais etapas futuras e depois treinar novamente o modelo é chamada de previsão contínua ou validação de avanço.