Introdução
As condições financeiras desempenham um papel central na transmissão da política monetária e na atividade econômica. Elas refletem o custo e a disponibilidade de financiamento para famílias e empresas, influenciando decisões de consumo e investimento. Para mensurar esse conceito abstrato, bancos centrais e instituições financeiras utilizam o Índice de Condições Financeiras (ICF), uma métrica sintética que agrega diversas variáveis de mercado.
Este exercício tem como objetivo replicar a metodologia do Banco Central do Brasil (BCB) para a construção do ICF, conforme detalhado no Boxe 5 do Relatório de Inflação de Dezembro de 2022 e no Estudo Especial nº 76. Utilizando a linguagem Python, desenvolvemos um pipeline completo de dados para coletar, processar e modelar indicadores financeiros locais e globais, culminando na extração de um índice comum via Análise de Componentes Principais (PCA).
Quer ver a vídeoaula do tutorial deste exercício? E receber o código que o produziu? 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.
O Poder do Python na Análise Macrofinanceira
A execução deste estudo demonstra a versatilidade do ecossistema Python para a análise econômica avançada. O código desenvolvido ilustra como a linguagem permite integrar fontes de dados heterogêneas e aplicar técnicas estatísticas robustas de forma eficiente:
- Coleta: Integração simultânea com APIs do Banco Central (SGS e Expectativas), FRED (Federal Reserve Economic Data) e Yahoo Finance, além de scraping de dados do Tesouro Direto.
- Tratamento de Séries Temporais: Manipulação avançada de datas, preenchimento de falhas (forward fill), remoção de tendências (detrending) e padronização (z-score) de variáveis com diferentes unidades e periodicidades.
- Modelagem Estatística: Aplicação de Análise de Componentes Principais (PCA) para redução de dimensionalidade e extração de fatores latentes.
- Visualização de Dados: Criação de gráficos comparativos de alta qualidade para validar os resultados frente aos dados oficiais.
Metodologia e Dados
A construção do ICF parte da premissa de que as condições financeiras constituem um fator comum não observável, que afeta simultaneamente diferentes classes de ativos e preços financeiros. Essa ideia é amplamente utilizada na literatura e fundamenta a metodologia adotada pelo Banco Central do Brasil (BCB) em seus Boxe e Estudos Especiais.
Neste artigo, seguimos a metodologia proposta pelo BCB, porém introduzimos adaptações com o objetivo de garantir total reprodutibilidade do indicador utilizando exclusivamente dados obtidos via APIs públicas, acessíveis diretamente em Python. Essas modificações são necessárias porque algumas variáveis utilizadas pelo BCB não possuem acesso público automatizado.
Em particular, variáveis como o swap x DI Pré de 1 e 5 anos, CDS do Brasil (5 anos), Índice CRB e taxas de juros de economias avançadas em múltiplas maturidades foram excluídas ou substituídas por proxies economicamente equivalentes, disponíveis em bases públicas. Essa substituição busca preservar a interpretação econômica do indicador, ainda que com pequenas diferenças em relação à cesta original do BCB.
Como consequência direta das bases de dados utilizadas, o indicador aqui construído possui frequência mensal, diferentemente do ICF diário divulgado pelo BCB. Essa limitação decorre da própria natureza das séries disponíveis publicamente. Ressalte-se que seria possível obter dados de maior frequência por meio de bases pagas ou via download manual de sites como o Investing.com; no entanto, esse procedimento não foi o adotado, a fim de manter a automação completa do processo, sem qualquer intervenção humana.
Apesar dessas restrições, o indicador resultante apresenta elevada aderência ao ICF oficial do BCB, tanto em termos de dinâmica quanto de interpretação econômica, o que reforça a robustez da metodologia e das proxies utilizadas. A seguir, apresentamos o conjunto de variáveis empregadas na construção do ICF reproduzível.
1. Seleção e Coleta de Variáveis
Foram selecionadas 20 variáveis financeiras, agrupadas em 7 dimensões, cobrindo o período de 2000 a 2025.
Juros Brasil: Taxas reais das NTN-Bs de 5 e 10 anos (Tesouro IPCA+).
Juros Externos: Taxas de títulos soberanos de longo prazo dos EUA, Alemanha, Reino Unido e Japão.
Risco: VIX (volatilidade implícita do S&P 500) e Spread soberano Brasil-EUA (5 anos).
Moedas: Índice Dólar (DXY), índice de moedas emergentes e taxa de câmbio BRL/USD.
Commodities: Preços do petróleo (WTI e Brent) e índices de commodities do BCB (Metálicas e Agropecuárias).
Mercado de Capitais: Índices acionários Ibovespa, MSCI World e MSCI Emerging Markets.
| Categoria | Indicador / Série | Fonte | Python / Biblioteca | Código / Endpoint / Ticker |
|---|---|---|---|---|
| Juros Brasil | Selic (Focus, 12 meses à frente) | BCB | python-bcb |
bcb.expectativas – ExpectativasMercadoTop5Anuais |
| NTN-B (Tesouro IPCA+ 5 e 10 anos) | Tesouro Nacional | Scraping CSV | Tesouro Direto CSV | |
| Juros Exterior | EUA (3M, 2Y, 10Y) | FRED | pandas-datareader |
DGS3MO, DGS2, DGS10 |
| Alemanha (3M, 10Y) | FRED | pandas-datareader |
IR3TIB01DEM156N, IRLTLT01DEM156N |
|
| Reino Unido (3M, 10Y) | FRED | pandas-datareader |
IR3TIB01GBM156N, IRLTLT01GBM156N |
|
| Japão (3M, 10Y) | FRED | pandas-datareader |
IR3TIB01JPM156N, IRLTLT01JPM156N |
|
| Risco | Volatilidade VIX | Yahoo Finance | yfinance |
^VIX |
| Spread Brasil vs EUA (5Y) | BCB / FRED | Cálculo direto | Brasil: Swap Pré-DI/Tesouro 5Y, EUA: DGS5 |
|
| Moedas | DXY (desenvolvidos) | Yahoo Finance | yfinance |
DX-Y.NYB |
| Emergentes | FRED | pandas-datareader |
DTWEXEMEGS |
|
| BRL/USD | Yahoo Finance | yfinance |
BRL=X |
|
| Petróleo | WTI | Yahoo Finance | yfinance |
CL=F |
| Brent | Yahoo Finance | yfinance |
BZ=F |
|
| Commodities (IC-Br) | Metal (US$) | BCB (SGS) | python-bcb – módulo sgs |
29040 |
| Agropecuária (US$) | BCB (SGS) | python-bcb – módulo sgs |
29041 |
|
| Mercado de Capitais | Ibovespa | Yahoo Finance | yfinance |
^BVSP |
| MSCI World | Yahoo Finance | yfinance |
URTH |
|
| MSCI Emerging Markets | Yahoo Finance | yfinance |
EEM |
2. Tratamento dos Dados
Para garantir a comparabilidade e a adequação ao modelo estatístico, as séries passaram por transformações rigorosas: * Frequência: Todas as séries foram convertidas para frequência mensal (média ou último valor). * Estacionariedade: Variáveis com tendência de longo prazo (como índices de bolsas e commodities) foram submetidas a um processo de detrending linear. * Padronização: Todas as variáveis foram normalizadas pelo método z-score (média zero e desvio-padrão unitário), eliminando diferenças de escala.
3. Extração de Fatores (PCA)
Aplicou-se a Análise de Componentes Principais (PCA) individualmente para cada um dos 7 grupos de variáveis, extraindo a primeira componente principal de cada grupo. Isso gerou 7 subíndices representativos.
4. Ponderação Econômica
Diferente de um PCA puro sobre todas as variáveis, a metodologia do BCB pondera os subíndices com base em sua relevância econômica. Os pesos foram estimados através de regressões lineares simples, onde cada subíndice (componente principal) foi utilizado para explicar a variação futura (6 meses à frente) do IBC-Br (proxy do PIB). O ICF final é a média ponderada desses subíndices, padronizada para ter média zero e variância unitária.
Bibliotecas
Coleta de Dados
1. Juros Brasil
| Data | NTNB_5Y | NTNB_10Y | |
|---|---|---|---|
| 0 | 2004-12-01 | 8.820000 | 8.840000 |
| 1 | 2005-01-01 | 8.864286 | 8.875714 |
| 2 | 2005-02-01 | 9.094444 | 8.897778 |
| 3 | 2005-03-01 | 9.396364 | 8.962727 |
| 4 | 2005-04-01 | 9.471500 | 8.983000 |
| ... | ... | ... | ... |
| 249 | 2025-09-01 | 7.898182 | 7.603409 |
| 250 | 2025-10-01 | 8.078261 | 7.695435 |
| 251 | 2025-11-01 | 7.881579 | 7.477895 |
| 252 | 2025-12-01 | 7.862000 | 7.417250 |
| 253 | 2026-01-01 | 7.918421 | 7.648684 |
254 rows × 3 columns
2. Juros Exterior
| Data | Treasury_3M | Treasury_2Y | Treasury_5Y | Treasury_10Y | Alemanha_3M | Alemanha_10Y | ReinoUnido_3M | ReinoUnido_10Y | Japao_3M | Japao_10Y | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 308 | 2025-09-01 | 4.065714 | 3.568571 | 3.662381 | 4.120476 | 2.027273 | 2.693182 | 3.97 | 4.6885 | 0.81818 | 1.645 |
| 309 | 2025-10-01 | 3.977727 | 3.521364 | 3.648636 | 4.061818 | 2.034435 | 2.617826 | 3.93 | 4.5721 | 0.80909 | 1.655 |
| 310 | 2025-11-01 | 3.937222 | 3.550000 | 3.673333 | 4.093889 | 2.041650 | 2.657500 | 3.84 | 4.4985 | 0.80636 | 1.805 |
| 311 | 2025-12-01 | 3.679545 | 3.500909 | 3.701818 | 4.143182 | 2.045783 | 2.814211 | 3.75 | 4.4826 | NaN | 2.060 |
| 312 | 2026-01-01 | 3.664118 | 3.537059 | 3.776471 | 4.206471 | NaN | NaN | NaN | NaN | NaN | NaN |
3. Risco e 4. Moedas
| Data | VIX | DXY | BRL_USD | DXY_Emergentes | |
|---|---|---|---|---|---|
| 308 | 2025-09-01 | 15.773333 | 97.685715 | 5.370752 | 131.861262 |
| 309 | 2025-10-01 | 18.086522 | 98.765218 | 5.385140 | 132.077923 |
| 310 | 2025-11-01 | 19.904211 | 99.747369 | 5.338730 | 132.245783 |
| 311 | 2025-12-01 | 15.548182 | 98.542727 | 5.451923 | 131.289323 |
| 312 | 2026-01-01 | 15.922222 | 98.383888 | 5.359616 | 130.136273 |
5. Petróleo
| Data | WTI | Brent | |
|---|---|---|---|
| 301 | 2025-09-01 | 63.533809 | 67.548571 |
| 302 | 2025-10-01 | 60.069565 | 63.953913 |
| 303 | 2025-11-01 | 59.479474 | 63.679474 |
| 304 | 2025-12-01 | 57.866364 | 61.628636 |
| 305 | 2026-01-01 | 59.697778 | 64.106110 |
6. Commodities
| Data | WTI | Brent | Metal | Agropecuaria | |
|---|---|---|---|---|---|
| 308 | 2025-09-01 | 63.533809 | 67.548571 | 235.67 | 200.46 |
| 309 | 2025-10-01 | 60.069565 | 63.953913 | 251.64 | 195.40 |
| 310 | 2025-11-01 | 59.479474 | 63.679474 | 257.04 | 186.36 |
| 311 | 2025-12-01 | 57.866364 | 61.628636 | 282.12 | 188.81 |
| 312 | 2026-01-01 | 59.697778 | 64.106110 | NaN | NaN |
7. Mercado de capitais
| Data | Ibovespa | MSCI_World | MSCI_EM | |
|---|---|---|---|---|
| 308 | 2025-09-01 | 143730.000000 | 179.071427 | 52.151904 |
| 309 | 2025-10-01 | 144415.000000 | 182.974347 | 54.396522 |
| 310 | 2025-11-01 | 155693.052632 | 182.791053 | 54.510000 |
| 311 | 2025-12-01 | 159718.700000 | 186.016364 | 54.262273 |
| 312 | 2026-01-01 | 168300.736842 | 188.842777 | 58.000000 |
Análise Gráfica
A análise dos resultados confirma a aderência do modelo replicado à dinâmica histórica das condições financeiras no Brasil.
Comparação: ICF Calculado vs. ICF Oficial (BCB):
O gráfico comparativo revela uma correlação visual extremamente alta entre o índice replicado (linha azul) e o índice oficial divulgado pelo Banco Central (linha vermelha).
Valores positivos do ICF indicam condições financeiras restritivas (aperto), enquanto valores negativos sinalizam condições estimulativas (afrouxamento).
Dinâmica Recente:
Observa-se que, no período mais recente (2021-2024), o ICF transitou para o terreno positivo, refletindo o ciclo global e doméstico de alta de juros e a aversão ao risco, atuando como um freio na atividade econômica para combater a inflação. A estabilização recente sugere uma acomodação das condições financeiras em patamar ainda restritivo.
Referências
BANCO CENTRAL DO BRASIL. Boxe 5: Índice de Condições Financeiras. In: Relatório de Inflação: dezembro 2022. Brasília: BCB, 2022. Disponível em: https://www.bcb.gov.br/content/ri/relatorioinflacao/202212/ri202212b5p.pdf.
BANCO CENTRAL DO BRASIL. Indicador de Condições Financeiras. Estudo Especial nº 76. Brasília: BCB, [s.d.]. Disponível em: https://www.bcb.gov.br/conteudo/relatorioinflacao/EstudosEspeciais/EE076_Indicador_de_condicoes_financeiras.pdf.
