Utilizando o Facebook Prophet - parte 1
Olá! Nesta primeira parte do artigo quero mostrar a todos como utilizar o Facebook Prophet e, para isso, utilizarei o Google Colaboratory para fazer os códigos.
Para quem não sabe o Facebook Prophet é uma biblioteca de código aberto desenvolvida pelo Facebook, atual Meta, que pode ser utilizada no Python ou R para previsão de séries temporais.
Então, para esse experimento vamos coletar os dados da Bovespa com o Yahoo Query e, em seguida, utilizar o Prophet para criar um modelo de previsão da bolsa de valores.
Observação: Aqui na Prensa não há uma caixa específica para escrevermos códigos em Python, então, para facilitar a compreensão, eu deixei os códigos em Python em negrito.
Introdução
Nesta primeira parte iremos coletar os dados e em seguida transformá-los para ficar em conformidade com o que o Prophet pede.
Vamos começar instalando as bibliotecas Yahoo Query e FbProphet da seguinte forma:
!pip install yahooquery
!pip install fbprophet
Após a instalação, vamos importar as bibliotecas:
fbprophet: Para criarmos o nosso algoritmo de previsão
yahooquery: Para coletarmos os dados das ações
pandas: Para manipularmos dataframes.
Então, vamos utilizar o código a seguir:
from fbprophet import Prophet
from yahooquery import Ticker
import pandas as pd
Vamos coletar os dados da Bovespa com o código BOVA11.SA. Para isso, vamos escrever o código a seguir:
simbolo = "BOVA11.SA"
inicio = "2010-01-01"
fim = "2020-01-01"
ticket = Ticker(simbolo)
data = ticket(start=inicio, end= fim)
Vamos entender o que acabamos de fazer:
Primeira linha: declaramos uma variável do tipo string com o símbolo da empresa que desejamos coletar os dados.
Segunda linha: declaramos uma string com a data de início da coleta dos dados que, neste caso, é 1º de janeiro de 2010.
Terceira linha: declaramos uma string com a data de término da coleta dos dados que, neste caso, é 1º de janeiro de 2020.
Quarta linha: instanciamos a classe Ticker do yahooquery passando como parâmetro o simbolo da ação que desejamos coletar.
Quinta linha: declaramos um variável que irá receber os dados coletados na forma de um dataframe.
Utilizando o comando dataframe.head() serão exibidas as 5 primeiras linhas do dataframe, conforme mostrado na figura a seguir:
Porém, esse dataframe é um dataframe multindex, ou seja, ele possui um índice interno e outro externo. Vamos alterar para conseguirmos manipular esse dataframe mais facilmente. Para isso, vamos utilizar o seguinte código:
dataframe.reset_index(inplace=True)
O resultado deste código pode ser visto na figura a seguir:
Agora, iremos criar um novo dataframe com as datas e com a coluna que desejamos utilizar em nossa previsão, que, nesse caso, é a coluna close:
bova = dataframe[["date","close"]]
Com isso temos um novo dataframe, com apenas duas colunas. Antes de partirmos para a previsão, precisaremos fazer uma última modificação em nosso dataframe, pois o Prophet espera receber um dataframe com duas colunas chamadas ds para a coluna das datas e y para a coluna dos valores a serem previstos. Então, vamos fazer as mudanças:
bova.columns = ["ds","y"]
E, com isso, conseguimos encerrar o nosso pré-processamento dos dados. Na próxima parte, vamos começar a trabalhar com o Prophet.
Profeta Preveja!
Agora que já temos os nossos dados prontos para serem utilizados, vamos começar com a criação do modelo.
Para isso, vamos começar instanciando o Prophet da seguinte forma:
profeta = Prophet()
Com o Prophet devidamente instanciado, vamos fazer o que chamamos de treinar o modelo. Treinar o modelo nada mais é que o ajuste do modelo aos nossos dados e, para isso, utilizaremos o comando .fit(), da seguinte forma:
profeta.fit(bova)
Com isso, nosso modelo está treinado. Vamos construir um dataframe com o Prophet, que contém as datas futuras e nos ajudará a fazer as previsões:
futuro = profeta.make_future_dataframe(periods=30)
Dentro do nosso comando make_future_dataframe(), passamos o parâmetro periods =30, indicando que desejamos prever os próximos 30 dias. Caso quiséssemos prever os próximos 5 anos poderíamos passar como período 5*365.
Porém, ainda não temos nenhuma previsão feita; o que temos é um dataframe com datas, como mostrado na figura a seguir:
Para fazermos nossa previsão podemos fazer:
previsoes = profeta.predict(futuro)
Utilizamos o comando .predict() para fazermos as previsões no dataframe futuro e alocamos o resultado em uma variável chamada de previsões.
Essa variável, previsões, é um dataframe bem grande com várias informações como, por exemplo, limite inferior e superior das previsões, valor das previsões, entre outras informações. Porém, nesse artigo, vamos nos concentrar no gráfico que iremos fazer com o seguinte código:
figura = profeta.plot(previsoes)
figura.show()
O resultado deste código é o gráfico da figura a seguir:
Agora, vamos compreender o que este gráfico significa, ou seja, os elementos do gráfico:
Pontos pretos: Valores reais.
Linha azul contínua: As previsões feitas pelo nosso algoritmo.
Faixa azul clara: Limite inferior e superior das previsões.
Linha azul escura no final do gráfico: Valores futuros dos próximos 30 dias, que o algoritmo previu.
Com esse gráfico conseguimos perceber duas coisas:
O Facebook Prophet, mesmo sem nenhum ajuste, conseguiu se aproximar muito dos valores reais.
O Facebook Prophet é muito simples de ser utilizado, mesmo por quem não possui um conhecimento profundo em séries temporais e programação.
Conclusão
Com isso, chegamos ao final do nosso algoritmo de previsão dos valores da bolsa. Claro, este foi um exemplo de introdução ao Prophet, o que significa que podemos ajustá-lo, tornando, assim, sua previsão melhor.
Obrigado a todos e até a próxima!
Este artigo foi escrito por Thiago Benevides e publicado originalmente em Prensa.li.