Fonte: Unsplash

Prevendo o Ibovespa com Python

Pedro Toshio Baldini
Grupo 32
13 min readJan 28, 2024

--

Modelo de previsão com Prophet para o fechamento do Ibovespa, desenvolvido para a Pós-Tech Data Analytics — FIAP, em Janeiro de 2024.

Importante: Este artigo têm fins exclusivamente educacionais e não se trata de recomendação para investimento de qualquer natureza.

Autores:

O problema: criar um modelo de série temporal para prever diariamente o fechamento do Ibovespa, com acurácia mínima de 70%.

→ O código completo pode ser consultado aqui.

O Ibovespa

O Ibovespa (Índice da Bolsa de Valores de São Paulo), fundado em 1968, reflete o desempenho médio das cotações dos ativos mais negociados e representativos do mercado de ações brasileiro. O indicador é composto por uma carteira teórica periodicamente ajustada pela B3, na tentativa de incorporar os ativos de maior relevância no cenário financeiro do país.

A BOVESPA (Bolsa de Valores de São Paulo) é o principal mercado de negociação de ações de empresas do Brasil, maior bolsa de valores da América Latina e a oitava maior do mundo. Sua sede localiza-se no centro da cidade de São Paulo. Seu principal índice econômico é o Ibovespa. A Bolsa de Valores de São Paulo é uma entidade auto-reguladora que opera sob a supervisão da Comissão de Valores Mobiliários — CVM.

No final de 2023, 87 ações fizeram parte do Ibovespa, sendo que a empresa Vale (VALE3) possuia o peso de 14,16% do índice, seguida da Petrobas (PETR4) com 7,43%, Itaú (ITUB4) com 7,13% e Petrobras (PETR3) com 4,05%.

Ações de maior peso no Ibovespa em 2023. Fonte: os autores.

Análise do período

A história do Ibovespa é pontuada por eventos significativos, como a introdução do Plano Real em 1994 e a adoção do sistema de negociação eletrônica em 1999. Essas transformações ao longo do tempo ressaltam a adaptação contínua do índice frente às mudanças econômicas e tecnológicas.

Estudamos o uso de dados para o treinamento a partir dos anos 2000 no modelo de previsão. O gráfico abaixo mostra tendência de crescimento com baixas relevantes em 2008 e 2020. Além disso, existe sazonalidade anual, com altas no início e quedas ao fim de cada ciclo. Mais para frente, com a decomposição da série temporal, podemos enxergar esses padrões com maior clareza.

Fatos históricos atípicos provocaram mudança significativa no mundo:

  • descoberta do pré-sal entre 2006 e 2007
  • a crise financeira de 2008 nos EUA, iniciada com a quebra do banco Lehman Brothers
  • impeachment da então presidente Dilma Rousseff
  • pandemia do COVID-19, espalhada pelo mundo em 2020
  • guerra entre Ucrânia e Rússia, iniciada em 2022

Ascensão e Declínio da Petrobras

Em 2006, a Petrobras descobre o Pré-sal — uma rica reserva de petróleo e gás natural, mais de 7.000 metros abaixo do nível do mar. Esse fato ranqueou o Brasil entre os maiores produtores de petróleo do mundo.

A produção nacional nesses campos vem batendo sucessivos recordes. O mais recente foi em setembro de 2021, quando a extração nos campos do pré-sal alcançou o volume de 2,85 milhões de barris de óleo equivalente (boe) /dia. A região representa hoje 74,1% do total da produção nacional, segundo a ANP (Agência Nacional do Petróleo, Gás Natural e Biocombustíveis).

Reservatórios de Pré-Sal encontrados pela Petrobras a partir de 2006. Fonte: Câmara dos Deputados

Entre 2014 e 2016, o Brasil passava por um momento de crise política governamental, fator determinante para a confiança nos investimentos, que culminou na retração de 2,5% do Produto Interno Bruto nacional. No período, foram descobertos extensos escândalos de corrupção envolvendo empresas estatais, como a Petrobras — empresa representativa para o Ibovespa, e empreiteiras.

Em março de 2014, iniciou-se uma apuração de um suposto esquema de corrupção na Petrobras envolvendo diretores da estatal, grandes empreiteiras e políticos, denominado de Operação Lava Jato. Os impactos diretos e indiretos da operação tiraram cerca de R$ 142 bilhões na economia brasileira em 2015. (Redalyc)

Esses fatos levaram a economia brasileira a enfrentar forte recessão e também ao impeachment da então presidente Dilma Rousseff. Como em períodos de grande incerteza, a crise trouxe queda ao Ibovespa, fuga de capital estrangeiro e desvalorização do real.

Crises Mundiais

Em 2008, uma Bolha Imobiliária — também chamada Inflação Imobiliária - levou à quebra do banco Lehman Brothers nos EUA. Um efeito dominó subsequente causou a falência de outros bancos e empresas, e a crise se espalhou pelo mundo.

Atos realizados pelo governo americano, como a redução da taxa de juros e a injeção de dinheiro na economia, foram necessários à contingência. A especulação em torno do setor imobiliário supervalorizou os preços e gerou dívidas hipotecárias somadas em US$ 14,3 trilhões em 2011. Estima-se a perda de 8,7 milhões de empregos nos EUA entre 2007 e 2010, além de prejuízo de 2% do PIB mundial da época.

A SELIC, Sistema Especial de Liquidação e de Custódia, é a taxa básica de juros da economia brasileira e principal instrumento de política monetária utilizada para controle inflacionário pelo Banco Central. Em resposta à crise de 2008, a taxa subiu — o que indica alta inflacionária. De modo inverso, a SELIC caiu durante a Pandemia para estimular a economia em recessão.

A pandemia do Covid-19, espalhada globalmente a partir de janeiro de 2020, representou uma das crises mais desafiadoras do século XXI. Em dezembro de 2021, o total acumulado de óbitos chegou a 5,3 milhões de pessoas no mundo e 617 mil no Brasil.

Medidas como o isolamento social tentaram conter a propagação da doença, que desencadeou uma recessão econômica global, com queda do PIB e aumento do desemprego. O Banco Central estimou retração de 4,3% do PIB nacional em 2020. O governo brasileiro implementou programas de auxílio emergencial para a população, o que afetou o déficit fiscal.

Seguindo as tendências dos mercados globais, o Ibovespa registrou quedas significativas. Como era de se esperar, investidores estrangeiros retiraram capital do mercado brasileiro, o que ficou evidenciado no dia 16 de março de 2020 em que o índice recuou 13,92% diante do pânico do mercado em relação à pandemia. A imagem abaixo mostra as quedas provocadas pelo início da pandemia e também da segunda onda de Covid.

Índice Ibovespa de 2020 a 2022. Fonte: Valor Econômico (Globo)

Na sequência, em fevereiro de 2022 se iniciou o conflito entre Rússia e Ucrânia. Além das grandes perdas — 500 mil mortes registradas em 2023 — a guerra provocou o aumento no preço de gás, commodities e fertilizantes agrícolas, uma vez que a Rússia atualmente detém a maior parte da produção mundial de Nitrogênio, Potássio e Fósforo.

Modelo de Previsão com Prophet

Introdução ao Modelo

O Prophet, criado pelo Facebook em 2008 sob autoria dos cientistas de dados Sean J. Taylor e Ben Letham, é uma biblioteca open-source baseada em modelos decomponíveis de séries temporais. A ferramenta lida bem com dados ausentes e outliers, e foi projetada para ser fácil de usar.

O Prophet usa 3 componentes principais para a decomposição: tendência (trend), sazonalidade (seasonality) e feriados (holidays). Assim, pode ser expressado através da equação:

y(t) = g(t) + s(t) + h(t) + e(t)

Em que:

  • Growth g(t): representa a curva de crescimento linear ou logística, para modelar mudanças não periódicas em series temporais. Por padrão, o Prophet usa o modelo de crescimento linear para as previsões.
  • Seasonality s(t): a série de Fourier é usada para modelar efeitos sazonais ou mudanças periódicas (por exemplo: o ciclo semanal, mensal e anual). Para aprender e prever tais efeitos, o Prophet depende da série de Fourier para fornecer um modelo flexível. Os efeitos sazonais são dados pela função:
Série de Fourier para sazonalidade

Em que P é o período regular (semanal — 7 dias, anual — 365,25 dias). Os parâmetros [a1, b1, …, aN, bN] precisam ser estimados de 1 até um número “N”, dado o modelo de sazonalidade.

  • Feriados e eventos h(t): o Prophet considera o efeito de feriados. Por exemplo, permite registrar a Black Friday, que ocorre uma vez ao ano e há uma grande quantidade de compras nesse dia. O Prophet permite adicionar os parâmetrosupper_window e lower_window, que estendem os efeitos dos feriados em torno de suas datas.
  • Termo de erro e(t): o termo de erro leva em conta quaisquer mudanças incomuns não acomodadas pelo modelo.

Coleta e tratamento de dados

Os dados de fechamento do índice Ibovespa foram coletados, a partir dos anos 2000, do portal Yahoo! finance, com a biblioteca yfinance:

Output:

A divisão de dados entre treino e teste deve ser feita com cuidado para séries temporais. Caso a sucessão das datas não seja respeitada, o modelo receberá informações que não deveria sobre o futuro no momento de treinamento. Esse fato é conhecido como data leakage, ou vazamento dos dados. Para o modelo aqui apresentado, segmentamos:

  • trainde 01/01/2003 até 30/04/2020
  • testde 01/05/2023 até 16/01/2024

Decomposição do Ibovespa

Uma série temporal pode ser facilmente decomposta com a função seasonal_decompose, da biblioteca statsmodel. A função abaixo facilita plotar a decomposição:

Output:

na A tendência é crescente, principalmente a partir de 2006, com a descoberta do pré-sal. Existe queda entre 2018 e 2022, com a pandemia do Coronavírus e retomada de crescimento em 2023. A sazonalidade reflete um ciclo anual com 2 picos semestrais de aumento seguido por queda — o segundo semestre apresenta maior variação e amplitude que o primeiro.

Modelo baseline

A seguir, criamos um modelo para fins comparativos, sem ajustar parâmetros, fornecer datas importantes e demais features:

Output:

A métrica MAPE (Mean Absolute Percentage Error, ou Erro Absoluto Percentual Médio) é usada como forma de medir a acuracidade do modelo. O RMSE (Root Mean Squared Error, ou Raiz Do Erro Quadrático Médio) também se faz importante para uma boa avaliação de modelos de regressão, já que reflete a média dos erros na mesma unidade de medida da variável prevista.

Fórmulas para MAPE e RMSE, onde y é o valor real e p é o valor previsto. Fonte: Mario Filho

Para uma melhor análise do modelo, o método de validação cruzada (ou cross validation) permite dividir os dados de treino em K grupos (chamados folds), consecutivos e ordenados. Em seguida, treina o modelo em etapas, a partir de um pequeno conjunto inicial, que se expande com mais dados de treino. Se K é igual a 5, por exemplo, o modelo é treinado 5 vezes, com volume incremental de dados. Após cada treino, o modelo executa previsões, que são avaliadas pela métrica escolhida pelo usuário:

Exemplo de Cross Validation com dados de treino e teste. Fonte: os autores.

O Prophet permite executar cross validation e analisar essas previsões de modo prático, com funções internas:

Output:

Quanto mais distante é a data da previsão, dada pela coluna horizon, maior tende a ser a incerteza do modelo.

Regressores e Feriados

Indicadores econômicos podem ser usados para melhorar a previsão do modelo no Prophet — como regressores. Vamos usar a taxa SELIC, o PIB per capta e o valor do dólar comercial:

A carteira do Ibovespa varia de tempos em tempos e, por isso, recomenda-se usar dados de ações que reflitam o índice em determinado período. Ativos como a Vale, Petrobras, Itaú e a própria B3 fazem parte da composição atual do Ibovespa e podem ajudar a prever o ano de 2024. Também, outras bolsas influentes ao contexto internacional permitem antecipar crises mundiais. Portanto, colhemos informações sobre o fechamento da SP&500 (Nova Iorque) e Nikkei (Japão):

A análise de correlação entre o Ibovespa e demais variáveis permite selecionar as features que compõem o modelo. Ao filtrar apenas valores com correlação acima ou abaixo de 70%, obtemos:

Note que, por conta do fuso horário, podemos usar informações de fechamento das bolsas internacionais. No entanto, para permitir um treinamento diário do modelo, usamos os dados de abertura das ações nacionais. Uma vez que já escolhemos o valor da abertura do índice como regressor para o modelo, para evitar o overfitting, decidimos não utilizar outras informações diretamente relacionadas ao índice.

O Prophet pode receber um dataframe contendo feriados e demais datas significativas para treinar o modelo. No nosso caso, utilizamos os feriados nacionais, além dos eventos anteriormente citados, como a descoberta do pré-sal, períodos de eleição presidencial e a Pandemia do Covid-19.

Otimização de Hiperparâmetros com Grid Search

O Prophet possibilita o ajuste de diversas configurações para a melhoria das previsões. Para visualizar uma breve descrição dos parâmetros, pode-se utilizar o comando help(Prophet). As opções abaixo serão modificadas:

  • changepoint_range: proporção histórica em que se estimará a tendência de changepoints (pontos de mudança).
  • changepoint_prior_scale: flexibilidade dos changepoints.
  • holidays_prior_scale: controle sobre o efeito dos feriados.

A melhor escolha pode encontrada através da técnica Grid Search, que itera sobre as opções listadas pelo usuário e treina modelos únicos, gerados a partir da combinação de todos os parâmetros. Vale ressaltar que, quanto mais opções são fornecidas, mais tempo será consumido na execução. O código abaixo combina o Grid Search ao cross validation para encontrar o modelo com menor MAPE:

Outputs:

Tempo em segundos, aproximadamente 1 hora e 29 minutos.

Os melhores parâmetros estão armazenados no dicionário param_dict:

{'changepoint_range': 0.95,
'changepoint_prior_scale': 0.5,
'holidays_prior_scale': 10.0}

Cross validation:

O melhor modelo apresentou MAPE de 1,01% e RMSE de 786,94 pontos para a previsão diária no horizonte de 4 dias. Na sequência, realiza-se o forecasting no dataframe testpara verificar se o modelo pode ser generalizado para dados desconhecidos:

Output:

→ O modelo atingiu acuracidade de 94,96% em relação à MAPE. ←

Próximos passos:

Note que mais dados sobre os meses de outubro e dezembro de 2023 podem ajudar na melhoria das previsões. Para isso, é interessante treinar e manter o modelo na nuvem, em provedores como Amazon AWS, Google Cloud ou Microsoft Azure.

Além de melhor escalabilidade, podemos acelerar o processamento do Grid Search, com mais opções de parâmetros. Para a manutenção do modelo, acompanhar a economia mundial se torna essencial. Novos regressores e changepoints podem ser incorporados ao modelo, conforme fatores externos sejam atestados.

Bibliografia e Referências:

UCHIDA, Pedro. Ibovespa: história, o que é e os acontecimentos mais marcantes. Disponível em: https://dropsdabolsa.com.br/blog/ibovespa-historia/. Acesso em: 20 de janeiro de 2024.

GUIMÓN, Pablo. Desemprego nos EUA chega a 14,7%, o mais alto em 70 anos. Disponível em: https://brasil.elpais.com/economia/2020-05-08/desemprego-nos-eua-chega-a-147-o-mais-alto-em-70-anos.html. Acesso em: 20 de janeiro de 2024.

PRADO, Matheus. Recuperação do Ibovespa desde o pior da crise tem sido desigual. Disponível em: https://valor.globo.com/financas/noticia/2022/03/24/recuperacao-do-ibovespa-desde-o-pior-da-crise-tem-sido-desigual.ghtml. Acesso em: 20 de janeiro de 2024.

DHUPKAR, Ritvik. Demand Forecasting using FB-Prophet. Disponível em: https://towardsdatascience.com/demand-forecasting-using-fb-prophet-e3d1444b9dd8#:~:text=The%20Facebook%20Prophet%20model%20is%20similar%20to%20a%20GAM%20(Generalized,linear%20growth%20model%20for%20forecasts. Acesso em: 20 de janeiro de 2024.

Petrobras. Disponível em: https://petrobras.com.br/pre-sal#3000m. Acesso em: 20 de janeiro de 2024.

G1. Guerra da Ucrânia alcança quase 200 mil mortos, de acordo com o ‘New York Times’. Disponível em: https://g1.globo.com/mundo/ucrania-russia/noticia/2023/08/18/guerra-da-ucrania-alcanca-quase-200-mil-mortos-de-acordo-com-o-new-york-times.ghtml. Acesso em: 20 de janeiro de 2024.

História da Ibovespa. Disponível em: https://br.advfn.com/bolsa-de-valores/bovespa/historia. Acesso em: 20 de janeiro de 2024.

PRÉ-SAL: 15 ANOS DE UMA DAS MAIORES DESCOBERTAS DA INDÚSTRIA DE ÓLEO E GÁS. Disponível em: https://alemdasuperficie.org/setor/pre-sal-15-anos-de-uma-das-maiores-descobertas-da-industria-de-oleo-e-gas/. Acesso em: 20 de janeiro de 2024.

Entenda a crise que culminou no impeachment da presidenta. Disponível em: https://oglobo.globo.com/politica/linha-do-tempo-entenda-crise-que-culminou-no-impeachment-20015867. Acesso em: 20 de janeiro de 2024.

Linha do tempo: entenda a crise na Petrobras. Disponível em: https://cbn.globoradio.globo.com/editorias/economia/2015/02/04/LINHA-DO-TEMPO-ENTENDA-A-CRISE-NA-PETROBRAS.htm. Acesso em: 20 de janeiro de 2024.

Sistema Especial de Liquidação e de Custódia (Selic). Disponível em: <https://www.bcb.gov.br/estabilidadefinanceira/sistemaselic). Acesso em: 20 de janeiro de 2024.

RAYMUNDO, Alexei. Crise Financeira de 2008. Disponível em: https://www.linkedin.com/pulse/crise-financeira-de-2008-alexei-raymundo/?originalSubdomain=pt. Acesso em: 20 de janeiro de 2024.

GLENIA, Fabíola. Com dívida de mais de US$ 14 tri, os EUA lutam para superar crise de 2008. Disponível em: https://g1.globo.com/economia/noticia/2011/09/com-divida-de-mais-de-us-14-tri-os-eua-lutam-para-superar-crise-de-2008.html. Acesso em: 20 de janeiro de 2024.

EVANS, Trevor. CINCO EXPLICAÇÕES PARA A CRISE FINANCEIRA INTERNACIONAL. Disponível em: https://repositorio.ipea.gov.br/bitstream/11058/6248/1/RTM_v3_n1_Cinco.pdf. Acesso em: 20 de janeiro de 2024.

Um Estudo de Caso sobre a Operação Lava-Jato. REDALYC. Disponível em: https://www.redalyc.org/journal/2410/241059557002/movil/. Acesso em: 02 de janeiro de 2024.

Corona vírus no mundo. Disponível em: https://dadoscoronavirus.dasa.com.br/#lp-pom-block-195. Acesso em: 25 de janeiro de 2024.

FAGUNDES, Alvaro. Marcas da pandemia. Disponível em: https://valor.globo.com/coronavirus/a-economia-na-pandemia/. Acesso em: 25 de janeiro de 2024.

Canal Rural. Como a guerra na Ucrânia afetou o mercado de fertilizantes. Disponível em: https://www.canalrural.com.br/agricultura/como-a-guerra-na-ucrania-afetou-o-mercado-de-fertilizantes/. Acesso em: 25 de janeiro de 2024.

BBC. Rússia x Ucrânia: o gasoduto vital ameaçado pelo conflito. Disponível em: https://www.bbc.com/portuguese/internacional-60317372. Acesso em: 25 de janeiro de 2024.

OpenAI. GPT-3.5 (Generative Pre-trained Transformer 3.5). Modelo de linguagem desenvolvido pela OpenAI. Disponível em: https://openai.com/. Acesso em: 28 de janeiro de 2024.

Documentação Prophet: https://facebook.github.io/prophet/. Acesso em: 05 de janeiro de 2024.

--

--