Séries temporais com Machine Learning — Parte 4

Uma breve comparação entre a abordagem usando a estatística clássica e o uso dos modelos de Machine Learning em quatro artigos

Carlos Eduardo Souza
Data Hackers
6 min readFeb 16, 2020

--

Photo by Jens Kreuter on Unsplash

No primeiro artigo fizemos uma breve introdução do que é uma série temporal, citamos os modelos da estatística clássica (ARMA, ARIMA, SARIMA, VARIMA, etc.) e propusemos o uso de modelos de Machine Learning para esse tipo de aplicação.

Escolhemos um tema a partir de dados de uma competição do Kaggle e estabelecemos um baseline com o Facebook Prophet.

No segundo artigo exploramos a suavização exponencial da nossa série, utilizamos o modelo de Holt Winters, passamos pelo calvário da estacionariedade e fizemos a predição com uso do modelo ARIMA. Em ambos os casos superamos nosso baseline.

No terceiro artigo revisitamos o Facebook Prophet e explorando mais alguns parâmetros conseguimos melhorar a predição inicial, porém ficamos abaixo do Holt Winters e ARIMA.

Apresentamos os parâmetros do Prophet e discutimos que técnicas de busca otimizada de parâmetros podem trazer resultados melhores.

Agora vamos aplicar outros modelos de Machine Learning.

A combinação entre a quantidade de dados gerados, a pressão por rapidez e redução de custos torna importante, senão, imperativo que o desenvolvimento de modelos que sejam, bons, rápidos e baratos.

Alguns modelos podem nunca ser considerados “prontos para produção”, pois demandam muito tempo para a preparação de dados (como no SARIMA) ou exigem treinamento frequente sobre novos dados (novamente, SARIMA) ou são difíceis de ajustar (bom exemplo — SARIMA). Portanto, muitas vezes é muito mais fácil selecionar alguns recursos das séries temporais existentes e criar um modelo de regressão linear simples ou, digamos, uma random forest.

Essa abordagem não é apoiada pela teoria e quebra várias suposições (por exemplo, o teorema de Gauss-Markov, especialmente para erros não correlacionados), mas é muito útil na prática e é frequentemente usada em competições de Machine Learning.

Criando features

A criação de features é uma prática importante para aumentar a dimensionalidade dos nossos datasets, fornecendo informações importantes para o desempenho do modelo.

Em um problema de séries temporais, além da variável de interesse temos apenas a informação do tempo, isso não nos impede de criar features importantes para o resultado final da predição.

Usando as informações sobre o tempo podemos utilizar as mesmas features passadas para o Prophet:

  • Feriados nacionais americanos.
  • Temporada regular.
  • Playoff.
  • Superbowl.
  • Dia da semana.
  • Final de semana.
  • Final de semana com jogo.
  • Final de semana do draft.

Além das features à partir dos dados temporais, é possível criar novas features sobre a variável de interesse:

  • Lags da série temporal.
  • Valor máximo / min de série em uma janela.
  • Valor médio / mediano em uma janela.
  • Frequência de eventos em uma janela.
  • Variação da janela.
  • Previsões de outros modelos.

LAGs nas Time Series

Mudando a série 𝑛 para trás ou para frente, obtemos uma coluna de recurso em que o valor atual da série temporal está alinhado com seu valor no tempo 𝑡−𝑛 / 𝑡+n. Se fizermos uma mudança de 1 lag e treinarmos um modelo nesse recurso, o modelo poderá prever um passo à frente de observar o estado atual da série. Aumentar o atraso, digamos, até 6, permitirá que o modelo faça previsões 6 passos à frente; no entanto, usará os dados observados 6 etapas para trás. Se algo mudar fundamentalmente a série durante esse período não observado, o modelo não capturará essas alterações e retornará previsões com um grande erro. Portanto, durante a seleção do atraso inicial, é preciso encontrar um equilíbrio entre a qualidade ideal da previsão e a duração do horizonte de previsão.

Essa técnica é particularmente útil, pois transforma um problema de série temporais em um problema de Machine Learning supervisionado, consequentemente permitindo o uso de uma gama maior de modelos.

Isso traz todos os benefícios e dificuldades de um problema supervisionado. Por um lado, podemos usar modelos lineares, árvores de decisão, modelos de boosting, por outro lado, alguns problemas de séries temporais possuem poucos pontos e a construção de features pode nos levar a "maldição da dimensionalidade", quando o número de features torna o nosso dataset esparso, prejudicando o desempenho do modelo. Isso pode ser resolvido com o uso de técnicas de regularização, com toda a atenção requerida.

Testando o pipeline de modelos de ML

Criando janelas de 7 dias para a quantidade de visualizações, juntamente com as features sobre os eventos da temporada da NFL, transformamos o problema de predição de séries temporais em um problema supervisionado.

Com isso podemos criar um pipeline com vários modelos. Para esse teste selecionei os seguintes modelos Logistic Regression, Ridge Regression, Support Vector Regression, Decision Tree Regressor, KNN Regressor, Random Forest Regressor, Light GBM e XGBoost. Cada caso está associado a documentação correspondente, então vamos passar aos resultados:

MAPE 38.71%
MAPE 19.99%
MAPE 16.17%
MAPE 22.32%
MAPE 16.32%
MAPE 16.09%
MAPE 22.39%
MAPE 18.85%

Temos um vencedor

Nós temos um vencedor! Random Forest Regressor com um MAPE de 16.09%, este é o menor erro no conjunto de testes entre todos os modelos que tentamos até agora.

Essa vitória é potencialmente perigosa, pois pode não ser a melhor ideia ajustar uma Random Forest assim que obtemos os dados de séries temporais. Geralmente, os modelos baseados em árvore lidam mal com as tendências dos dados quando comparados aos modelos lineares.

O processo que percorremos para deixar a série estacionária e criar features pode ser necessário para ajustar o modelo. Outra opção é prever as tendências separadamente com um modelo linear e combinar com as previsões da Radom Forest para obter o resultado final.

Conclusão

Discutimos diferentes métodos de análise e previsão de séries temporais. Não há uma maneira de resolver esse tipo de problema.

Os métodos desenvolvidos na década de 1960 (e alguns até no início do século XXI) ainda são populares, juntamente com LSTMs e RNNs (não abordados neste artigo).

Isso está parcialmente relacionado ao fato de que a tarefa de previsão, como qualquer outra tarefa relacionada a dados, requer criatividade em muitos aspectos e definitivamente requer pesquisa. Apesar do grande número de métricas formais de qualidade e abordagens para estimativa de parâmetros, muitas vezes é necessário tentar algo diferente para cada série temporal. Por último, mas não menos importante, o equilíbrio entre qualidade e custo é importante. Como um bom exemplo, o modelo SARIMA pode produzir resultados espetaculares após o ajuste, mas pode exigir muitas horas de manipulação de séries temporais de dança de pandeiro, enquanto um modelo de regressão linear simples pode ser construído em 10 minutos e pode obter resultados mais ou menos comparáveis.

Acesse o projeto completo no Github:

https://github.com/SouzaCadu/Time-Series

Referências

https://medium.com/open-machine-learning-course/open-machine-learning-course-topic-9-time-series-analysis-in-python-a270cb05e0b3

https://towardsdatascience.com/implementing-facebook-prophet-efficiently-c241305405a3

--

--