
- Setor
- Economia
- Ferramentas
- Python, DuckDB, SQL, pytest, Docker, GitHub Actions
- Entregas
- Carga incremental com histórico
- Camadas em SQL com testes
- Painel em HTML
- CI que roda o pipeline duas vezes
Desafio
Toda semana o Banco Central pergunta a cerca de 150 instituições quanto elas esperam de IPCA para este ano e para os próximos, e o Boletim Focus publica a mediana das respostas. Quisemos medir quanto essa mediana erra o IPCA realizado e a partir de quando ela passa a acertar.
A API Olinda do Banco Central publica as estatísticas do Focus por dia desde 3 de janeiro de 2000, e cada dia traz duas linhas por ano projetado: uma com as projeções informadas nos últimos 30 dias, com cerca de 148 respondentes, e outra só com as mais recentes, com cerca de 45. Usamos a primeira, que é a do Boletim semanal. O mesmo ano é projetado por anos seguidos (o IPCA de 2025 recebeu projeções de 2021 até janeiro de 2026), então cada projeção precisa saber a que distância estava do fim do ano. O IPCA anual também não vem pronto: sai da composição dos 12 meses da série 433 do SGS, que começa em janeiro de 1980. E a API não aceita contar os registros antes da carga, porque o $count dá erro.
Este projeto de estudo monta esse caminho com Python 3.12 e DuckDB para a carga e as camadas em SQL, pytest e GitHub Actions para os testes e um painel em HTML.
Solução
Escolha uma tabela da gold para ver de onde ela vem, o que calcula e o que o estudo encontrou.
IPCA de cada ano fechado
- Entrada
- As variações mensais do IPCA (SGS 433)
- Cálculo
- Composição dos 12 meses de cada ano; ano sem os 12 meses fica de fora
- Conferência
- Bate com o número oficial do IBGE: 4,62 % em 2023, 4,83 % em 2024 e 4,26 % em 2025
Quanto a mediana erra e quando passa a acertar
- Entrada
- A mediana do Focus na base de 30 dias e o IPCA anual
- Cálculo
- Erro de cada dia (mediana menos IPCA realizado) com os dias até o fim do ano projetado; data de convergência, a partir da qual o erro fica abaixo de 0,5 p.p. e não sai mais; erro médio por faixa de antecedência
- Resultado
- 1,83 p.p. com 12 a 24 meses de antecedência e 0,42 nos últimos 3 meses; na mediana dos anos, convergência 105 dias antes do fim do ano
Projeção do início do ano contra a meta e o IPCA
- Entrada
- A primeira projeção feita dentro do próprio ano, a meta de inflação e o IPCA anual
- Cálculo
- As três lado a lado, ano a ano
- Resultado
- A projeção do início do ano errou 1,59 p.p. em média e ficou abaixo do IPCA em 16 dos 26 anos; o IPCA ficou acima da meta em 20 dos 26
- Carga. A camada bronze guarda cada resposta da API como veio, com a data de extração e um hash da linha. Um valor republicado diferente vira linha nova, e o histórico fica. Como a API não entrega uma contagem, a carga pagina até a página vazia. A primeira carga trouxe 48.822 linhas de projeção, de 3/1/2000 a 6/11/2026, em uns 4 minutos. As seguintes pedem ao Focus só os últimos 35 dias além do que já temos e levam segundos.
- Camadas. A silver tem uma linha por dia, ano projetado e base, sempre a versão mais recente. A gold, em SQL, calcula o IPCA anual, o erro da mediana em cada dia (mediana menos IPCA realizado), a data de convergência de cada ano (a partir de quando a projeção fica a menos de 0,5 ponto percentual do realizado e não sai mais), o erro médio por antecedência e o Focus contra a meta de inflação. O IPCA anual composto bate com o número oficial do IBGE: 4,62 % em 2023, 4,83 % em 2024 e 4,26 % em 2025.
- Testes e CI. São 18 testes com pytest, que usam amostras reais da API e não dependem de rede. No GitHub Actions, cada push passa pelo lint, pelos testes e pelo pipeline rodado duas vezes numa amostra; a CI falha se a segunda rodada mudar o resultado. O Docker é opcional.
- Painel. Um HTML autocontido, sem biblioteca externa, com os dados embutidos.
O painel abre com quatro números que resumem o estudo. Logo abaixo, a curva de convergência mostra o erro de cada ano por meses de antecedência, com a faixa de 0,5 ponto percentual marcada, e um seletor destaca o ano escolhido. Mais abaixo ficam o erro médio por antecedência, a projeção do início do ano contra a meta e o IPCA, e o erro de cada ano. O painel abaixo é o mesmo do botão Ver projeto:
Resultado
- O erro médio absoluto da mediana cai conforme o ano se aproxima: 1,83 p.p. com 12 a 24 meses de antecedência, 1,48 com 6 a 12, 0,96 com 3 a 6 e 0,42 nos últimos 3 meses.
- A projeção feita no início de cada ano para o próprio ano errou 1,59 p.p. em média. Ficou abaixo do IPCA realizado em 16 dos 26 anos e a menos de 0,5 p.p. dele em só 6.
- Os maiores erros do início do ano foram em 2002 (projeção de 4,75 %, IPCA de 12,53 %), 2021 (3,32 % contra 10,06 %) e 2015 (6,56 % contra 10,67 %). O maior erro para cima foi em 2017 (4,86 % contra 2,95 %).
- Na mediana dos 26 anos, a projeção entrou na faixa de 0,5 p.p. 105 dias antes do fim do ano. Em 12 anos isso só aconteceu nos últimos 90 dias, e em 6 aconteceu com mais de 180. A projeção de 2002 só convergiu 18 dias antes do fim do ano; a de 2013 convergiu em 14/12/2012, 382 dias antes.
- O IPCA ficou acima da meta em 20 dos 26 anos.
O botão Ver projeto abre o painel em tela cheia. O código está no GitHub, com a licença MIT e as instruções para rodar a carga, gerar o painel e rodar os testes.
Projeto de estudo da Dome Analytics com dados abertos do Banco Central do Brasil, sob a licença ODbL. O IPCA é produzido pelo IBGE. Não tem relação com o Banco Central nem com as instituições que respondem ao Focus.
Projetos relacionados
Modernização da Engenharia de Dados de um Hospital
Diagnóstico medido e correção das cargas noturnas de um hospital de grande porte, com reconciliação a cada execução e alerta de perda silenciosa.
Frota do Rio em Tempo Real, do GPS dos Ônibus a um Painel com Kafka e Spark
As posições dos ônibus e do BRT do Rio num pipeline com Kafka e Spark Structured Streaming: velocidade pela cidade, paradas longas e o intervalo real entre partidas.