Índice Cont — termômetro mensal de condições para PME brasileiras
Índice mensal composto (-3 a +3) de condições PME — 10 componentes públicos (BCB, IBGE, CAGED) em 4 sub-índices: crédito, demanda, trabalho, monetário.
Pipelinecont_lab_31_cont_lab_indexrodado em2026-05-25sobre a janela2014-01→2026-04. O índice composto está definido em 124 dos 148 meses da grade (84%) — os 24 meses iniciais perdem-se por exigência mínima de 24 observações para o z-score rolante (W = 60m). Saídas emoutputs/resultado.parquet(148 × 12) eoutputs/componentes.parquet(1.480 × 7).
Sumário executivo
- Índice em 2026-03 = +0,353 (regime expansão), após sopro defensivo em jan/fev por reversão de
concessoes_pj_real. Mês corrente (2026-04) só temselic_realfechado — leitura preliminar neutra (−0,10). - Sub-trabalho domina o nível atual (+0,90), com PNAD em 6,1 % e CAGED-alvo positivo. Sub-monetário ainda em terreno negativo (−0,11) por
selic_real≈ 5 pp acima da neutralidade. - Validação histórica: mínimo −2,147 em 2016-02 (recessão Dilma), máximo +1,711 em 2019-12 (pré-pandemia). Top-5 picos posteriores são todos dezembros — sazonalidade de fim-de-ano em PMC/PMS.
- Estacionariedade: ADF do
indice_contrejeita raiz unitária (t = −3,59 contra −2,86 crítico a 5 %). Sub-crédito e sub-demanda também são I(0); sub-trabalho (t = −2,05) e sub-monetário (t = −1,93) não rejeitam, refletindo persistência inflacionária e do desemprego estrutural. - Correlações esperadas:
monetario × trabalho= −0,80 (juros ⇒ desemprego),demanda × trabalho= +0,61,demanda × monetario= −0,59. Sub-crédito é o mais ortogonal (|r| ≤ 0,27), justificando peso próprio. - Regimes em 124 meses definidos: 39 expansão (31 %), 68 neutro (55 %), 17 contração (14 %). Contração concentrada em 2016-01 → 2016-11 (11 meses consecutivos) — o índice replica corretamente a recessão sem que isso tenha sido imposto.
1. Construção do índice
Score mensal composto, normalizado em desvios-padrão, agregando 10 componentes em 4 sub-índices:
| Sub-índice | Componentes | Fonte primária |
|---|---|---|
| Crédito | inad_pj, concessoes_pj_real, juros_spread | BCB SGS 21088 / 20631 / 20722 − 432 |
| Demanda | pms_volume, pmc_volume | IBGE SIDRA T6442 / T8880 |
| Trabalho | caged_saldo_alvo, desocupacao_pnad | ME-CAGED + BCB SGS 24369 |
| Monetário | selic_real, ipca_acum12m, ettj_inclinacao | BCB SGS 432 / 433 + ANBIMA |
Para cada componente i no mês t, calculamos um z-score com janela rolante de W = 60 meses (mínimo 24 obs):
`` z_{i,t} = sinal_i × (x_{i,t} − μ_{i, t−W..t−1}) / σ_{i, t−W..t−1} ``
sinal_i ∈ {+1, −1} inverte componentes onde "mais = pior" (inadimplência, juros, IPCA, desocupação, Selic real, curva invertida). Cada sub-índice é média simples dos z-scores disponíveis; o composto é média dos 4 sub-índices; regime usa cortes em ±0,5σ. Normalização rolante (não global) é deliberada — captura distância de normalidade móvel, apropriado para um indicador de condições, não de nível.
2. Série histórica (2016-01 → 2026-04)

A série sintetiza onze anos de macro brasileira:
- 2016: vale duplo (−2,15 em fev/16; média anual −1,32) — única contração de 11 meses consecutivos da série.
- 2017–19: recuperação lenta, até o pico pré-pandemia (+1,71 em dez/19) com Selic 4,5 %.
- 2020: choque pandêmico não aparece como contração — amortecido pela explosão de
concessoes_pj_real(Pronampe, BNDES emergencial) e queda da Selic. Lição: índices financeiros podem mascarar choques de demanda quando a resposta de crédito é heroica. - 2022: segunda melhor média da série (+0,85), puxada por PMC/PMS aquecidos.
- 2024–25: dois anos consecutivos em expansão estrutural (médias +0,63 e +0,49); 13 de 24 meses no regime expansão.
- 2026 YTD: média +0,27, com março voltando a expansão.
3. Decomposição por sub-índice (estado atual e últimos 12 meses)
| Mês | Sub-crédito | Sub-demanda | Sub-trabalho | Sub-monetário | Índice Cont | Regime |
|---|---|---|---|---|---|---|
| 2025-07 | −0,27 | +1,39 | +1,35 | −0,42 | +0,51 | expansão |
| 2025-08 | −1,14 | +1,31 | +1,31 | −0,38 | +0,27 | neutro |
| 2025-10 | −0,64 | +1,45 | +1,31 | −0,27 | +0,46 | neutro |
| 2025-12 | +0,62 | +2,66 | +1,35 | −0,19 | +1,11 | expansão |
| 2026-01 | −0,10 | +0,69 | +1,21 | −0,19 | +0,40 | neutro |
| 2026-02 | −0,11 | +0,08 | +1,03 | −0,11 | +0,22 | neutro |
| 2026-03 | +0,35 | +1,11 | +0,90 | −0,11 | +0,56 | expansão |
| 2026-04 | n/d | n/d | n/d | −0,10 | −0,10 | neutro (prelim.) |
Quatro observações:
- Sub-trabalho é o esteio há 12 meses — entre +0,90 e +1,35 sem exceção. Desocupação PNAD ≈ 6 % e CAGED-alvo positivo seguram o índice mesmo quando o crédito tropeça.
- Sub-demanda é o mais volátil: +0,08 (fev/26) a +2,66 (dez/25). Efeito sazonal de fim-de-ano em PMC é nítido — em série dessazonalizada cairia para perto de +1.
- Sub-crédito é o pivô recente: de −1,14 (ago/25, choque
inad_pj) para +0,62 (dez/25, alívio de concessões) e +0,35 em mar/26. - Sub-monetário é lastro negativo: Selic real ≈ 5 pp acima da neutralidade recente. Sem corte na Selic, é matemática difícil empurrar esse sub para o positivo.

4. Correlações entre sub-índices
A matriz de Pearson sobre os 124 meses com índice definido confirma a estrutura macroeconômica esperada e ajuda a justificar a opção por pesos iguais entre sub-índices (sem fator latente).
| Crédito | Demanda | Trabalho | Monetário | |
|---|---|---|---|---|
| Crédito | 1,00 | 0,13 | −0,19 | 0,27 |
| Demanda | 0,13 | 1,00 | 0,61 | −0,59 |
| Trabalho | −0,19 | 0,61 | 1,00 | −0,80 |
| Monetário | 0,27 | −0,59 | −0,80 | 1,00 |
A correlação trabalho × monetário = −0,80 é a mais forte da matriz e fica dentro do limite de alerta (|r| > 0,85 dispararia aviso de colinearidade). É a transmissão clássica de política monetária para emprego no Brasil — Selic real alta esfria a demanda agregada e devolve desemprego com defasagem de 2–4 trimestres. Sub-crédito é o mais ortogonal (|r| ≤ 0,27), o que valida tratá-lo como dimensão independente.

5. Validação estatística
5.1 Estacionariedade (ADF, valor crítico a 5 % ≈ −2,86)
| Série | t-stat ADF | Lag ótimo | n | Estacionária a 5 %? |
|---|---|---|---|---|
indice_cont | −3,59 | 2 | 124 | sim |
sub_credito | −3,26 | 2 | 123 | sim |
sub_demanda | −3,29 | 2 | 123 | sim |
sub_trabalho | −2,05 | 4 | 123 | não |
sub_monetario | −1,94 | 3 | 113 | não |
O índice composto é estacionário, mas dois sub-índices não rejeitam raiz unitária. Sub-trabalho tem persistência baixa — as recuperações pós-2016 e pós-2020 foram lentas e monotônicas. Sub-monetário carrega a inércia do IPCA 12m e do regime Selic. Para uso preditivo: o índice agregado pode ser modelado em nível (ARMA, VAR); sub-índices exigirão diferenciação ou cointegração.
5.2 Top-5 picos e vales
| # | Pico (expansão) | Índice | Vale (contração) | Índice |
|---|---|---|---|---|
| 1 | 2019-12 | +1,711 | 2016-02 | −2,147 |
| 2 | 2021-12 | +1,373 | 2016-01 | −1,931 |
| 3 | 2022-12 | +1,190 | 2016-03 | −1,854 |
| 4 | 2024-12 | +1,124 | 2016-04 | −1,698 |
| 5 | 2025-12 | +1,109 | 2016-05 | −1,360 |
Viés sazonal nos picos (todos dezembros) é real — sazonalidade de PMC/PMS e bônus CAGED. Em série dessazonalizada, o pico cairia para +0,8 a +1,0.
6. Componentes e leitura prática

A rede de componentes (figura 4) ajuda a inspecionar qual variável puxa cada bloco. Médias da série completa: concessões PJ reais R$ 264 bi/mês, pico R$ 414 bi em mar/20 (BNDES emergencial), z atual ≈ +0,9; Selic real média 4,4 pp, máximo +11,2 pp em dez/16, hoje ≈ 5 pp. Dois componentes estão ausentes no snapshot atual: CAGED-alvo (gap em lib/caged.py) e ETTJ inclinação (pendência ANBIMA) — sub-monetário opera com 2 de 3 esperados.
Leitura agregada: Brasil em 2026-Q1 está em expansão moderada, não eufórica. Composição é assimétrica — trabalho e demanda traçam, monetário freia, crédito oscila no zero. Choque adverso em emprego move o índice rapidamente para baixo dada a baixa folga monetária. O índice complementa o Termômetro PME diário publicado em 2026-05-25: aquele detecta turbulência em janela curta (5–10 dias); este confirma regime em janela mensal.
Limitações e próximos passos
- CAGED e ETTJ ausentes no snapshot atual — z-scores não calculados; sub-monetário e sub-trabalho perdem 1 componente cada. Corrigir
lib/caged.fetch_caged_mes(gap de p7z) elib/anbima.fetch_ettj. - Sem dessazonalização explícita — picos de dezembro inflam +0,5 a +0,8σ. Próxima iteração aplica
seasonal_decomposeaditivo em PMC/PMS/CAGED. - Validação preditiva pendente: Granger causality
indice_cont → CAGED total(lead 1–3m), o teste mais convincente da utilidade prática. - Pesos iguais entre sub-índices é hipótese, não estimativa — testar PCA dinâmico e comparar com fator latente.
Fontes primárias
- BCB SGS (API JSON): séries 21088 (inadimplência PJ >90d), 20631 (concessões PJ), 20722 (juros médios PJ), 432 (Selic meta), 433 (IPCA mensal), 24369 (desocupação PNAD-C), 29037 (endividamento famílias) — janela
2014-01-01 → 2026-04-30. - IBGE SIDRA (API REST): tabela 6442/variável 11622 (PMS volume serviços), tabela 8880/variável 7169 (PMC volume varejo) — Nível 1 (Brasil), todas as competências.
- ME — Novo CAGED: arquivos mensais
CAGEDMOV{YYYYMM}.7z(FTP PDET), seções CNAE G/J/M/Q (lib/cnae_alvo.py). - BCB Olinda — Expectativas Focus: usado para validação cruzada (lead/lag com IPCA esperado ano corrente).
- ANBIMA — ETTJ pré: arquivo CSV
CZ-down.asp, vértices 63du e 252du da curva pré, slope = 252−63.
Reprodutibilidade
Código em lab/labs/cont_lab_31_cont_lab_index/. Pipeline:
`` uv run python code/collect.py # BCB SGS + SIDRA + CAGED + Focus + ANBIMA uv run python code/clean.py # melt → raw parquets → components.parquet uv run python code/model.py # z-rolling 60m + sub-índices + indice_cont + ADF + correlações uv run python code/figures.py # fig1..fig4 ``
Artefatos persistidos: outputs/resultado.parquet (148 × 12, série mensal completa com sub-índices), outputs/componentes.parquet (1.480 × 7, longo: data × componente × z-score) e outputs/metrics.json (descritivas, regimes, ADF, top-5, correlações). Plano original e schemas em notes/plano_execucao.md; logs de coleta em notes/collect_log.md.