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
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:
- 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.
- 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%
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 R. Aprenda do ZERO a coletar, tratar, construir modelos e apresentar dados econômicos e financeiros com o uso de Python e IA.
Referências
-
Banco Central do Brasil (BCB) — Sistema Gerenciador de Séries Temporais (SGS). Disponível em: https://www3.bcb.gov.br/sgspub/
-
Darts Documentation — Time Series Forecasting with Python. Unit8, 2025. Disponível em: https://unit8co.github.io/darts/.
-
Vaswani, A. et al. (2017) — Attention is All You Need. Advances in Neural Information Processing Systems (NeurIPS). Disponível em: https://arxiv.org/abs/1706.03762.
-
Hyndman, R. J. & Athanasopoulos, G. (2021) — Forecasting: Principles and Practice. 3ª ed. OTexts, Melbourne. Disponível em: https://otexts.com/fpp3/.
-
Python-Banco Central do Brasil (python-bcb) — API Wrapper para o BCB. Disponível em: https://pypi.org/project/python-bcb/