Criando seu primeiro Transformer para previsão de séries econômicas

Introdução

A análise de séries temporais econômicas é um desafio constante para economistas e cientistas de dados. Nos últimos anos, a arquitetura Transformer, que revolucionou o processamento de linguagem natural (NLP), emergiu como uma ferramenta que pode auxiliar na modelagem de sequências, incluindo séries temporais.

Neste tutorial, vamos construir um modelo Transformer para prever a Dívida Bruta do Governo Geral (DBGG) do Brasil, como forma de compreende se de fato, a arquitetura transformer consegue lidar com a previsão de séries econômicas. Usaremos a biblioteca darts, que simplifica a aplicação de modelos avançados de previsão.

Para uma introdução ao uso de Transformers para Séries Temporais, veja esse post.

Para obter o tutorial deste exercício faça parte do Clube AM e receba toda semana os códigos em R/Python, vídeos, tutoriais e suporte completo para dúvidas.

1. Preparando o Ambiente e Obtendo os Dados

Primeiro, precisamos dos dados. A forma mais fácil de acessar dados do Banco Central do Brasil (BCB) é através da sua API. Vamos instalar a biblioteca python-bcb para isso, juntamente com a darts.

CÓDIGO DISPONÍVEL PARA MEMBROS DO CLUBE AM

Agora, vamos carregar os pacotes que usaremos e buscar a série da DBGG (código SGS 13762) a partir de 2006.

CÓDIGO DISPONÍVEL PARA MEMBROS DO CLUBE AM
Gráfico Série da DBGG

2. Pré-processamento: Treino, Validação e Normalização

Modelos de deep learning, como o Transformer, aprendem padrões a partir dos dados. É essencial separar nosso conjunto de dados em uma parte para treino (onde o modelo aprende) e outra para validação (onde testamos seu desempenho em dados que ele nunca viu). Usaremos 80% dos dados para treino e os 20% restantes para validação.

Além disso, redes neurais funcionam melhor quando os dados de entrada estão em uma escala semelhante, geralmente entre 0 e 1. Esse processo é chamado de normalização.

CÓDIGO DISPONÍVEL PARA MEMBROS DO CLUBE AM

3. Construindo o Modelo Transformer

A escolha dos parâmetros (hiperparâmetros) de um modelo Transformer é extremamente importante para seu desempenho. Vamos detalhar nossas escolhas, explicando o funcionamento de cada argumento na função TransformeModel:

Parâmetros Temporais

input_chunk_length = 36: Define quantos timesteps passados o modelo utiliza como entrada. Com 36 meses (3 anos), captura ciclos econômicos completos e padrões fiscais anuais da DBGG.

output_chunk_length = 1: Determina quantos passos à frente o modelo prevê simultaneamente. Valor 1 prioriza precisão no curto prazo, adequado para séries fiscais onde acurácia imediata é crítica.

Arquitetura do Modelo

d_model = 32: Controla a dimensionalidade das representações internas do modelo. Valor reduzido (32) equilibra expressividade e risco de overfitting dado o dataset pequeno (225 pontos).

nhead = 4: Número de cabeças de atenção paralelas que focam em diferentes aspectos temporais. Com 4 cabeças, o modelo captura simultaneamente tendências, sazonalidade e eventos específicos da DBGG.

num_encoder_layers = 2 e num_decoder_layers = 2: Define a profundidade da rede (número de camadas empilhadas). Profundidade conservadora previne overfitting em datasets pequenos, mantendo capacidade adequada para séries econômicas.

dim_feedforward = 128: Dimensão da rede feed-forward interna após a atenção. Seguindo a convenção 4x d_model, processa representações sem sobrecarregar o modelo.

Regularização e Treinamento

dropout = 0.2: Taxa de desativação aleatória de neurônios durante treino. Valor 20% (acima do padrão 10%) força aprendizado mais robusto, essencial para prevenir overfitting em datasets pequenos.

activation = “gelu”: Função de ativação não-linear aplicada nas camadas. GELU oferece gradientes mais suaves que ReLU, resultando em treino mais estável para séries econômicas.

batch_size = 16: Número de amostras processadas antes de atualizar pesos. Batches pequenos fornecem atualizações mais frequentes e regularização adicional em datasets limitados.

optimizer_kwargs = {“lr”: 1e-4}: Taxa de aprendizado (learning rate) do otimizador. Valor conservador (0.0001) garante convergência estável e evita oscilações durante o treino.

Mecanismos de Controle

Early Stopping (patience=30, min_delta=0.0005): Callback que monitora perda de validação e interrompe treino automaticamente. Paciência de 30 épocas acomoda convergência lenta de séries econômicas, prevenindo overfitting.

gradient_clip_val = 1.0: Limita magnitude máxima dos gradientes durante backpropagation. Previne gradientes explosivos que podem ocorrer em períodos de mudanças abruptas na DBGG.

save_checkpoints e force_reset: Salvam automaticamente o melhor modelo durante treino e reiniciam pesos a cada sessão. Garantem preservação do modelo ótimo e reprodutibilidade entre experimentos.

CÓDIGO DISPONÍVEL PARA MEMBROS DO CLUBE AM

4. Comparação com Outros Modelos

Um modelo complexo como o Transformer nem sempre é a melhor solução. É uma boa prática compará-lo com modelos mais simples e clássicos. Vamos usar dois:

  1. Exponential Smoothing (Suavização Exponencial): Um modelo estatístico clássico que atribui pesos decrescentes exponencialmente às observações passadas. Usamos a versão AutoETS para a escolha automática dos melhores parâmetros.
  2. Theta: Um método de previsão univariado que tem se mostrado muito competitivo, decompondo a série em linhas de tendência.
CÓDIGO DISPONÍVEL PARA MEMBROS DO CLUBE AM

5. Avaliação Final e Visualização

Agora, vamos gerar as previsões para o período de validação e comparar os resultados. A métrica que usaremos é o MAPE (Mean Absolute Percentage Error), que nos dá o erro percentual médio, facilitando a interpretação.

Lembre-se que a previsão do Transformer está na escala normalizada (0 a 1). Precisamos revertê-la para a escala original antes de calcular o erro e visualizar.

CÓDIGO DISPONÍVEL PARA MEMBROS DO CLUBE AM
MAPE Transformer: 4.07%
MAPE Exponential Smoothing: 2.68%
MAPE Theta: 8.11%
Previsão da DBGG: Transformer, Exponential Smoothing, Theta

Conclusão

Neste tutorial, passamos por todas as etapas para criar, treinar e avaliar um modelo Transformer para prever uma importante série econômica brasileira. Ao compará-lo com modelos mais clássicos, podemos ter uma visão clara de suas vantagens e desvantagens.

Frequentemente, modelos mais simples como o ETS podem apresentar resultados muito competitivos com um custo computacional e de implementação muito menor.

No caso do Transformer, precisamos lidar com uma série de parâmetros para ajustar a qualidade dos resultados, além de sofrer com o tempo de processemaneto dos ajuste do modelo.

A escolha do modelo ideal dependerá sempre do problema em questão, da quantidade de dados disponíveis e do equilíbrio entre performance e complexidade.

Quer aprender mais?

Conheça nossa Formação do Zero à Análise de Dados Econômicos e Financeiros usando Python e Inteligência Artificial. Aprenda do ZERO a coletar, tratar, construir modelos e apresentar dados econômicos e financeiros com o uso de Python e IA.

Referências

Compartilhe esse artigo

Facebook
Twitter
LinkedIn
WhatsApp
Telegram
Email
Print

Comente o que achou desse artigo

Outros artigos relacionados

Análise de Criptomoedas com Python

Aprenda a estruturar um pipeline de dados financeiros com Python. Ensinamos a construção de um dashboard automatizado para coleta, tratamento e visualização de criptomoedas via API.

Como Construir um Monitor de Política Monetária Automatizado com Python?

Descubra como transformar dados do Banco Central em inteligência de mercado com um Monitor de Política Monetária Automatizado. Neste artigo, exploramos o desenvolvimento de uma solução híbrida (Python + R) que integra análise de sentimento das atas do COPOM, cálculo da Regra de Taylor e monitoramento da taxa Selic. Aprenda a estruturar pipelines ETL eficientes e a visualizar insights econômicos em tempo real através de um dashboard interativo criado com Shiny, elevando o nível das suas decisões de investimento.

Qual o efeito de um choque de juros sobre a inadimplência?

Neste exercício, exploramos a relação dinâmica entre o custo do crédito (juros na ponta) e o risco realizado (taxa de inadimplência) através de uma análise exploratória de dados e modelagem econométrica utilizando a linguagem de programação R.

Boletim AM

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais e conteúdos exclusivos sobre Análise de Dados!

Boletim AM

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais e conteúdos exclusivos sobre Análise de Dados!

como podemos ajudar?

Preencha os seus dados abaixo e fale conosco no WhatsApp

Boletim AM

Preencha o formulário abaixo para receber nossos boletins semanais diretamente em seu e-mail.