Predição de ações na bolsa de valores com Python e Facebook Prophet

Lucas Diogo
Neogrid
Published in
7 min readMar 10, 2022

Usando Machine Learning para projetar valores futuros.

(Crédito: B3/Divulgação)

Em meio a pandemia da COVID 19 e a crise econômica muitas pessoas (inclusive eu) começaram a despertar o interesse por investir em renda variável na bolsa de valores, quantidade de pessoas essa que cresceu exponencialmente nos últimos 3 anos, e hoje em 2022 a B₃(BM&FBOVESPA) contabiliza a marca de 5 milhões de contas físicas cadastradas.

Evolução de quantidade de pessoas físicas cadastradas na B3. Fonte: B3

O que é bolsa de valores?

A bolsa de valores é um ambiente de negociação onde investidores podem negociar seus títulos emitidos por empresas, sejam elas com capitais públicos, mistos ou privados. Esse processo é intermediado com auxílio de correspondentes de negociações através de corretoras.

Operar nesse mercado sem conhecimento prévio pode ser bastante complexo, principalmente porque no papel de acionista é extremamente importante realizar o acompanhamento, fazer análises fundamentalistas sobre a empresa e o momento, para somente após isso decidir aonde colocará o seu suado dinheiro.

Cenário

Atualmente machine learning (e até mesmo redes neurais) tem entrado nos “trend topics” de investimento, pois investidores buscam automatizar não todo, mas parte do processo, pois é uma área que estuda a capacidade de aprendizado de um computador sobre conjuntos de dados e vem sendo muito utilizado para construção de robôs operacionais na área de investimentos.

Em minhas recentes pesquisas sobre o assunto encontrei alguns modelos de implementação utilizando a SciKit Learn (biblioteca para aprendizado de máquina em python) com métodos de regressão que buscam predizer valores de ações na bolsa.

O problema de todas as implementações e o maior erro em minha opinião é que, na verdade, não estão predizendo nada, deixe me explicar.

A maior parte dos exemplos faz a divisão dos dados de uma ação em treinamento e teste limitando a um simples aprendizado para “predições” de dados históricos. E quando falamos em predição de valores na bolsa, também temos em mente a projeção para datas futuras, pois queremos saber qual o valor que terá uma determinada ação em um determinado dia, o que não é abordado.

Em busca de uma solução para o problema encontrei o Prophet, uma biblioteca criada pelo Facebook com implementações em R e Python para fornecer previsões automatizadas, e é com ela que trabalharemos.

Pré processamento

Como requisito, precisaremos das bibliotecas listadas abaixo, as instruções de instalação das mesmas podem ser encontradas nos links.

  • Pandas: Manipulação de dataframes.
  • Pandas T.A: Biblioteca Pandas para análise técnica.
  • Yahoo Query: Busca de dados do mercado financeiro.
  • Plotly: Visualização de gráficos.
  • Prophet: Automação preditiva.

No primeiro passo, realizaremos a importação das bibliotecas necessárias.

Bibliotecas a serem importadas

Após então, utilizaremos o yahooquery que é uma biblioteca excelente para realizar extrações de dados do mercado financeiro do site Yahoo Finance e nos devolve informações extremamente úteis com rapidez e facilidade. Realizaremos uma busca dos dados de pregão de uma determinada ação na bolsa de valores e após isso o devido pré processamento.

Pré processamento dos dados

Linha 1: A informação que está sendo atribuída a variável symbol é a identificação do ativo. Você irá achar esse código acessando o Yahoo Finance.

Yahoo Finance: https://finance.yahoo.com/

Linha 8. Realização da busca referente ao ativo em um período determinado, no caso escolhido foi 48 meses.

Dados de histórico de valores da ação.

Linha 10. Esse dataframe possui dois índices, o primeiro é o código do ativo e o segundo a data do pregão, removeremos o primeiro.

Linha 14. Aqui copiamos o índex de data para uma coluna no nosso dataframe e por fim reindexamos novamente.

Linha 20. Cópia das features de interesse para um novo dataframe.

Linha 23. Existem diversas análises técnicas que podemos fazer para acompanhar o valor de uma ação, no nosso caso optaremos pela Exponential Move Avarage (EMA) utilizando 21 dias como amostra.

Exponential Move Avarage ou também conhecido por média móvel, é semelhante à média móvel simples (SMA), que mede a direção da tendência ao longo de um período. No entanto, enquanto a SMA simplesmente calcula uma média dos dados de preços, a EMA aplica mais peso aos dados mais atuais. Devido ao seu cálculo exclusivo, a EMA seguirá os preços mais de perto do que uma SMA.

Esse cálculo é feito pelo Pandas TA que é a biblioteca escolhida por conter a maioria das análises técnicas implementadas.

Após o pré processamento, este será o nosso dataframe com o qual trabalharemos.

Features de interesse

Para obter uma melhor visualização, realizamos a plotagem da informação dos nossos dados em gráfico.

Plotagem de dados históricos

Aqui podemos observar mais nitidamente o desempenho do valor da ação temporalmente.

Desempenho temporal da ação

Processamento

Nessa segunda etapa prepararemos nosso modelo utilizando técnicas de Machine Learning para predizer os valores de ações com base em uma projeção de x dias.

Processamento do nosso

Linha 2. Seleciona features que vão compor o treinamento do modelo.

Linha 7. Instanciado o Prophet com parâmetro baseado em cálculo diário.

Linha 14. Treinamento no modelo com base no dataframe. Note que estamos usando todos os dados e não particionando-os, pois a ideia é que utilizemos todo como treinamento, e a projeção como teste.

Linha 16. Removemos os finais de semana da nossa projeção, pois não há pregões nesses dias e pode interferir no resultado.

Se acompanharmos no console enquanto o nosso modelo é treinado, podemos visualizar algumas informações úteis como o número de iterações realizadas no aprendizado.

Treinamento visualizado no console.

Linha 20. Criação da projeção para os próximos 30 dias após a última data de pregão do dataset.

Linha 23. Nesse momento, o modelo irá tentar predizer os valores com base no que aprendeu previamente no seu treinamento e irá nos retornar o valor do ativo projetado para o tempo estipulado.

Para entendermos melhor, iremos plotar os resultados em um gráfico.

Após isso conduziremos uma breve análise.

Gráfico da regressão realizada onde os pontos em preto são os dados já observados e a linha azul é a predição.

Se olharmos atentamente ao gráfico veremos que nos próximos 30 dias não possuímos nenhuma comparação de valor atual, mas sim somente a linha de predição e é exatamente aqui que está contido a informação de valores futuros.

Valores projetados

A variável forecast possui os dados da predição, utilizaremos ela para filtrar por registros com a data maiores que a atual a nossa projeção para um dataframe.

Aqui está o resultado:

Valores projetados

Como removemos os finais de semana, sobraram na nossa projeção 20 dias úteis com o respectivo valor de fechamento.

Validação

Para avaliar o desempenho do nosso modelo é preciso elaborar algumas validações e destacar algumas métricas de assertividade.

A validação cruzada é uma técnica usada com frequência no machine learning para avaliar a variabilidade de um conjunto de dados e a confiabilidade dos modelos treinado com esses dados.

O Prophet inclui uma funcionalidade para validação cruzada de séries temporais para medir o erro de previsão usando dados históricos. Isso é feito selecionando pontos de corte no histórico, e para cada um deles ajustando o modelo usando dados somente até aquele ponto de corte. Assim, você pode entender se o modelo é suscetível a variações nos dados.

Executando o código abaixo obteremos o resultado da cross-validation e das métricas de desempenho do modelo.

E esses são os resultados de desempenho do nosso modelo.

Execução da validação cruzada

As métricas geradas podem também ser visualizas em gráfico.

O código completo pode ser encontrado no meu Github:

O valor de mercado de uma ação na bolsa de valores também pode ser afetado por fatores externos ao de uma análise, como uma decisão política ou uma pandemia como foi o ano de 2020.

Da mesma forma, com o avanço constante na área de aprendizado de máquina, estamos munidos de cada vez mais ferramentas e técnicas para automatizar análises que nos ajudem a garantir um bom desempenho como acionistas.

Hora de ficar rico, até a próxima!

Time is money

Referências:

O que é bolsa de valores e como funciona: https://www.btgpactualdigital.com/como-investir/artigos/investimentos/tudo-sobre-bolsa-de-valores

5 milhões de contas de investidores: https://www.b3.com.br/pt_br/noticias/5-milhoes-de-contas-de-investidores.htm

Exponential Moving Average: https://www.fidelity.com/learning-center/trading-investing/technical-analysis/technical-indicator-guide/ema

Cross-validation: evaluating estimator performance: https://scikit-learn.org/stable/modules/cross_validation.html

B3 atinge 5 milhões de contas de investidores em renda variável em janeiro: https://www.b3.com.br/pt_br/noticias/5-milhoes-de-contas-de-investidores.htm

--

--

Lucas Diogo
Neogrid

Developer .NET | Data Science Enthusiast | Writer on Medium in his spare time