wormhole data

Análise Preditiva para séries temporais utilizando o R.

Imagine poder prever o que irá acontecer? Tentador não? O ser humano faz isso sempre, imaginamos cenários dos impactos diretos e indiretos de nossas decisões. Agora, imagine a capacidade de prever o resultados de estratégias de venda, marketing para uma empresa. Isso pode ser muito interessante!

Através da matemática e estatística foram criadas fórmulas e algoritmos, que em conjunto com a tecnologia, permitiram nossa mente preditiva, antecipar o que irá acontecer. Hoje vou mostrar algumas técnicas de análise preditiva, para séries temporais, usando o R e o algoritmo ARIMA.

banner livro web analytics

Aviso importante.

Com esse artigo não tenho a intenção de escrever algo definitivo sobre a previsão de séries temporais ou análise de dados. Muito menos definir as técnicas utilizadas como as únicas, pois, existem várias maneiras de realizar previsões.

Não estou considerando aqui: algumas das técnicas de tratamento e treinamento, que podem ser executadas para melhorar o modelo; o volume de tempo ideal; normalização; entre outros passos que podem ser necessários, dependendo do contexto e do conjunto de dados.

A ideia é apresentar uma introdução ao tema para que o leitor, em conjunto dos seus estudos, possa aprimorar seu conhecimento.

Por que comecei a me interessar por previsões?

Trabalhando com SEO (ainda atuo nessa área) os clientes sempre me perguntavam sobre quando estariam na primeira página do Google. No ano de 2010, eu tinha um cliente que insistia muito, mas muito mesmo nessa pergunta! Na época, eu sempre enviava um relatório mensal com os dados de busca orgânica, incluindo indicadores de visitas, posicionamento por palavras-chave, dentre outros números e medidas que considerava necessário para a boa tomada de decisões. Contudo, ele não ficava satisfeito com isso, meu cliente queria saber do futuro! Foi aí que comecei a procurar na estatística algumas ferramentas que me ajudassem a prever os resultados daquelas ações de SEO, acima de tudo, sem me basear em achismos, mas nos números (análise preditiva é isso!).

Comecei a trabalhar com as regressões mais simples, tentando prever posicionamento por palavras-chave e números. Na época eu não utilizava nenhuma linguagem ou ferramenta sofisticada, somente algumas fórmulas no Excel. Muitas delas pesquisadas em sites e blogs de estatística.

Os modelos preditivos que eu utilizava na época me forneciam algum embasamento para o trabalho, porém, com o passar do tempo senti a necessidade de me atualizar e comecei a procurar métodos que pudessem melhorar as minhas previsões.

Foi aí que conheci algoritmos mais sofisticados, dentre eles, os modelos ARIMA.

O que é o ARIMA.

O objeto principal desse ensaio, o algoritmo ARIMA (Autoregressive Integrated Moving Average) é muito utilizado, principalmente, em séries temporais. Trata-se de um modelo auto-regressivo, que captura as estruturas temporais do conjunto de dados, visando prever resultados futuros.

Existem outros modelos para previsão, como o holt-winters e outros algoritmos de regressão linear, contudo, o ARIMA é um dos mais utilizados, talvez pela qualidade dos modelos gerados.

Não vou abordar o cálculo manual e sua fórmula, pois não é o objetivo aqui, uma vez que, será executado através do R, contudo, existem boas referências que podem ajudar a entender melhor como funciona a parte matemática dele.

A vantagem de realizar toda a operação no R, é que ele agiliza e automatiza as suas previsões. Também é possível utilizar um recurso muito bom que é o Auto ARIMA. Ele ajuda a definir os parâmetros “P” (ordem, número de defasagens), “D” (o grau de diferenciação) e “Q” (a ordem da média móvel do modelo) da série, importantes para a precisão do modelo.

Biblioteca e conjunto de dados.

Em primeiro lugar, vamos chamar a biblioteca forecast. Trata-se de um pacote necessário para a utilização de modelos e ferramentas para a previsão de séries temporais. Ela permite a automação de funções importantes para a execução das previsões.

Nesse estudo vamos usar o conjunto de dados “visitas”. Você vai perceber que a maioria dos exemplos encontrados, são de datasets (Iris, AirPassagens, Cars, etc) e bancos de dados públicos. Nesse ensaio procurei trazer algo diferente. Uma série temporal de três anos, de usuários que visitaram o site de uma loja de instrumentos musicais.

library(forecast)
visitas <- read.csv("visitas.csv", sep = ",")
visitas
Conjunto de dados puro
É possível perceber que se trata de um conjunto de dados com 36 linhas e três colunas.

Transformando em time-series.

Para poder trabalhar com esse conjunto de dados, vou transformar a coluna usuários em uma time-series (ts), para que o R possa entendê-la como uma série temporal. Depois disso, uso um plot(), para visualizar a série.

ts_visitas <- ts(data = visitas$Usuários, start = c(2019), frequency = 12)
ts_visitas
plot(ts_visitas)
plot do conjunto de dados transformado em série temporal
Plot do conjunto de dados transformado em série temporal.

Saída do conjunto de dados, transformado em time-series:

     Jan  Feb  Mar  Apr  May  Jun  Jul  Aug  Sep  Oct  Nov  Dec
2019  121  332  340  260 1671 1483 1125 2437 2128 3101 2725 4282
2020  231  433  461  393 1874 1583 2325 3337 3328 4005 3935 5191
2021 4443 4543 4785 4225 3656 4177 4415 5331 5128 5605 6835 7191

Analisando os dados é possível perceber algumas características e tendências. Trata-se de uma série temporal de três anos, com uma tendência de crescimento. Você pode fazer outras análises prévias, aprendidas no artigo sobre análise exploratória.

Iniciando o ARIMA

Antes, vamos rodar a função auto.arima(), pois ela vai possibilitar a definição de parâmetros “P”, “D” e “Q”, e fornecer o melhor ajuste da série.

auto.arima(ts_visitas)

Observe a saída a seguir:

Series: ts_visitas 
ARIMA(0,1,0)(0,1,0)[12] 

sigma^2 = 895167:  log likelihood = -190.24
AIC=382.48   AICc=382.67   BIC=383.62

A melhor combinação apontada foi “0,1,0” para order e a mesma sequência para sazonal. Agora basta montar o modelo, com a função Arima() e depois a previsão com o forecast().

Perceba que, a nota do AIC ficou em 382, o que é ótimo, quanto menor essa nota melhor. O AIC é o Critério de Informação de Akaike, ele mede a distância entre os modelos, verificando a quantidade de informação perdida. Podemos considerar que se trata de uma métrica de qualidade para o modelo. É um bom indicador para realizar comparativos entre os modelos criados.

Iniciando o Forecast.

Finalmente chegou a hora de realizar a previsão, com os parâmetros selecionados no auto.arima() e visualizar graficamente os possíveis cenários.

Aqui serão usadas duas funções importantes: a primeira delas é o próprio Arima(), onde vamos determinar: o conjunto de dados utilizado; os parâmetros para order e seasonal (lembre-se de usar os que foram selecionados anteriormente); e o forecast(), que irá prever a quantidade de meses que forem determinados.

prev <- Arima(ts_visitas, order = c(0,1,0), seasonal = c(0,1,0))
previsao <- forecast(prev, h=12)
previsao
plot(previsao)

Na tabela a seguir, é exibida a previsão com os intervalos de confiança de 80% e 95%.

Tabela com a análise preditiva feita no R
Tabela com a previsão feita com o forecast() no R.

Perceba, na imagem a seguir, que a previsão segue a tendência sazonal dos últimos anos, bem como o comportamento de aumento e queda de visitas.

gráfico com a análise preditiva de visitas
Previsão exibida através de um gráfico, com os intervalos de confiança.

Conclusões.

O grande desafio é a criação de um modelo que atenda o que você precisa.

Creio que o ARIMA é um dos algoritmos que mais ajudam a se aproximar de um ajuste adequado. Como comentei no início, não há somente uma forma de fazer previsões de séries temporais, inclusive, recomendo que o leitor faça uma pesquisa de variações desse processo, algoritmos de treinamento, entre outras técnicas, que poderão melhorar ainda mais o seu modelo.

Para um conjunto de dados, faça cada ensaio em um arquivo diferente, depois promova um comparativo entre eles, através do AIC, pois assim, será possível determinar qual deles vai atender melhor as suas necessidades.

2 thoughts on “Análise Preditiva para séries temporais utilizando o R.

  1. Silvestre

    Olá, saudações! Desejo saber como podemos fazer em um mesmo gráfico os dados previstos pelo algoritmo da série temporal versus os dados efetivamente realizados/ocorridos de fato para fins de comparação visual.

    Responder
    1. Erick Autor do artigo

      Oi Silvestre, O que você quer fazer é um comparativo correto? Eu geralmente faço isso usando o ggplot. Eu separo os dados de previsão em uma variável, os dados realizados em outra e faço um gráfico usando o ggplot, com duas linhas. Uso muito para ir mostrando aos clientes a evolução perante o que foi previsto. Vou planejar escrever um artigo sobre isso, pois é um tema interessante. Obrigado pela visita! Abs!

      Responder

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *