Índice Futuros — como é calculado
O Índice Futuros é o número 0–100 que encabeça cada país no atlas de futuros.xyz. Não é uma opinião nem uma estimativa editorial: é uma função documentada de indicadores citados, recalculada a partir dos dados brutos em cada build da plataforma. Esta página explica o método completo, passo a passo, com as fórmulas exatas e a cadeia de auditoria que permite decompor qualquer pontuação até o seu registro de fonte original.
Resumo em uma linha
O índice é a média, com pesos iguais, de 10 pontuações de eixo; cada eixo é a média dos seus indicadores citados, normalizados para 0–100 contra metas (goalposts) fixadas nos percentis 5 e 95 da distribuição regional agrupada (método tipo IDH/ODS).
Escopo
| Dimensão | Valor |
|---|---|
| Geografias | 26 (25 países + agregado LATAM) |
| Eixos | 10 |
| Janela temporal | 2010–2024, série anual |
| Indicadores com sinal (ids únicos) | 798 |
| Indicadores excluídos (neutro ou constante) | 133 |
| Instâncias indicador×eixo×país que contribuem | 16.970 |
| Células eixo×país pontuadas | 260 de 260 (0 vazias, 0 em quarentena) |
Números do último bake (generated_at = 2026-08-25); regeneram-se a cada atualização de dados — os números exatos vivem no bloco stats de scores.json, que é a autoridade sobre esta tabela.
Os 10 eixos, com peso idêntico (0,10 cada um): saúde · educação · trabalho e economia · segurança · justiça e estado de direito · meio ambiente e clima · infraestrutura · inovação e soberania tecnológica · coesão social e inclusão · governança democrática.
O pipeline, do cache ao atlas
- Entrada. Cada célula
pilar × paísdo cache de parâmetros contém instâncias de indicadores com série temporal, unidade, direção desejável (good_direction) ecitation_id. As células em quarentena (marcadas pelos controles de integridade) são excluídas por completo — ver a semântica exata abaixo. - Bake. O script
scripts/bake-composite-scores.tsaplica o método descrito abaixo e emitepublic/data/scores.json. - Verificação. Um gate de prebuild (
scripts/check-scores.ts) bloqueia o deploy com quatro checagens: o arquivo existe e parseia; cobre toda geografia não-quarentenada presente no cache; cada geografia tem ≥1 pilar pontuado; e o composto, olatestde cada pilar e cada ponto de cada série são números finitos em [0, 100]. É um gate de forma e cobertura, não de frescor. - Apresentação. A interface lê
scores.json; os pesos de pilar vivem em um único lugar do cliente (PARAM_WEIGHTSemsrc/lib/composite-score.ts) e são renormalizados para soma 1, de modo que reponderar o índice é uma mudança de uma linha, transparente e versionada.
Semântica de quarentena
A quarentena não é um desconto de pontuação: é exclusão total, com regras precisas em cada elo.
| Regra | Efeito exato |
|---|---|
| Origem | A bandeira vem do pipeline de validação: o envelope de cada célula carrega validator_status, red_team_status, quarantine e quarantine_reason (tipos em src/shared/index.ts). |
| Bake | A célula é descartada antes da passada 1: não recebe pontuação e as suas observações tampouco participam da fixação de goalposts de nenhum indicador. |
| Gate | check-scores.ts constrói o conjunto de geografias exigidas só com células não-quarentenadas; uma célula em quarentena não quebra o build por "faltante". |
| Interface | A página do parâmetro mostra um banner de quarentena tanto para envelopes status: "quarantined" quanto para envelopes ready com quarantine: true. |
| Contabilidade | scores.json publica stats.cells_quarantined; hoje é 0, mas o mecanismo está sempre ativo. |
| Monitoramento | A quarentena exclui do índice, não do monitoramento: a camada de saúde do dado pontua toda célula ready, em quarentena ou não, então a célula conserva a sua pontuação de confiança e as suas anomalias visíveis. |
O método, passo a passo
Passo 1 — Metas (goalposts) por indicador
Para cada indicador (por exemplo, expectativa de vida ao nascer) agrupam-se todas as suas observações através de todos os países e todos os anos da janela. As metas são fixadas nos percentis 5 e 95 dessa distribuição agrupada:
- P5 = piso (pontuação 0) · P95 = teto (pontuação 100)
- Com menos de 8 observações usa-se mín–máx como reserva.
- Se ainda assim a amplitude das metas é degenerada (P95 − P5 < 10⁻⁹) recai-se em mín–máx; se essa amplitude também é nula, o indicador é excluído — um indicador que não separa valores não discrimina.
- A
good_directionde um id é a primeira declarada encontrada no cache; aplica-se de forma consistente a todas as instâncias do mesmo indicador em todos os países.
Usar percentis em vez do mínimo e do máximo evita que o valor atípico de um único país defina a escala para toda a região. E agrupar todos os anos em uma única distribuição torna as metas estáveis no tempo: se um país melhora, a sua pontuação sobe; a régua não se move com ele.
Passo 2 — Normalização 0–100, consciente da direção
Cada observação é transformada em pontuação:
n(i, c, t) = clamp[0,100]( (x(i, c, t) − P5ᵢ) / (P95ᵢ − P5ᵢ) × 100 )
se good_direction(i) = "down": n ← 100 − nonde x(i, c, t) é o valor do indicador i no país c no ano t. A inversão direcional garante que mais pontuação sempre significa melhor: em homicídios por 100.000 ou emissões per capita, um valor baixo produz uma pontuação alta.
Exclusões (por design, não por conveniência):
- Indicadores com
good_direction: neutral(população total, superfície…) são descritivos, não normativos → não pontuam. - Indicadores constantes ou com um único valor não discriminam entre países → não pontuam.
- No último bake: 133 ids excluídos por essas regras, 798 com sinal.
Passo 3 — Preenchimento da série 2010–2024
Muitas fontes publicam com atraso ou em anos alternados. Para cada instância de indicador completa-se a série anual arrastando a observação mais próxima: para cada ano sem dado busca-se a observação mais recente anterior ou igual a esse ano (forward-fill); só os anos anteriores à primeira observação tomam o valor dessa primeira observação (back-fill). Cada célula anual fica marcada como observada ou preenchida.
A cobertura publicada por pilar é exatamente:
cobertura(p, c) = células indicador×ano observadas / (n_indicadores × 15 anos), 3 decimaisPor exemplo, saúde na Costa Rica: 141 indicadores, cobertura 0,749 — 74,9% das 2.115 células anuais (141 × 15 anos) são observações reais, o resto é arrasto. O preenchimento nunca inventa níveis novos — só sustenta o último valor conhecido.
Passo 4 — Pontuação de eixo
S(p, c, t) = média de n(i, c, t) sobre os indicadores i que contribuem para o eixo pMédia simples, sem pesos internos: dentro de um eixo, cada indicador com sinal conta igual.
Passo 5 — O Índice Futuros
Índice(c, t) = Σₚ wₚ · S(p, c, t), com wₚ = 0,10 para os 10 eixosOs pesos são iguais de forma deliberada: o índice é uma média transparente de dez lentes, não um modelo com ponderações opacas. Qualquer reponderação futura será uma mudança explícita e auditável em PARAM_WEIGHTS (os pesos são renormalizados para soma 1 automaticamente).
A variação em 5 anos (Δ5a) que acompanha o índice é simplesmente Índice(c, 2024) − Índice(c, 2019) sobre a mesma série.
Cadeia de auditoria: do número à fonte
Cada pontuação é decomponível de ponta a ponta:
Índice (71, Costa Rica)
└─ eixo saúde (75) — 141 indicadores, cobertura 0,749
└─ contributing[]: id do indicador + citation_id
└─ citations.json: fonte, série, ano, URL profunda
└─ registro original (Banco Mundial, CEPAL, OPAS, fonte nacional…)A forma exata de scores.json:
| Nível | Campos |
|---|---|
| Raiz | generated_at · method (descrição do método em uma linha) · year_min/year_max · pillar_weight (0,1) · stats · geographies{} |
stats | geos · params · cells_scored · cells_quarantined · indicator_ids_scored · indicator_ids_excluded_neutral_or_constant · empty_pillar_cells |
| Por geografia | composite (último ano) · composite_series (2010–2024) · delta_5y · pillars{} |
| Por pilar | series · latest · n_indicators · coverage (3 decimais) · contributing[] com {id, label, citation_id, good_direction} de cada indicador |
Não existe nenhum número no índice que não possa ser seguido até um registro de fonte citado.
Como ler o número
- É relativo à região, não absoluto. Um 100 significa "no percentil 95 da distribuição agrupada da América Latina e do Caribe 2010–2024", não "problema resolvido". Não é comparável com o IDH nem com outros índices em níveis.
- A ordenação importa mais que o decimal. As pontuações são arredondadas para inteiros no bake (a pontuação de pilar é
round(média)e o composto éround(média dos pilares arredondados)); diferenças de 1–2 pontos entre países estão dentro do ruído de cobertura. - O comportamento do índice é verificável nos extremos. No último bake: Uruguai 78, Chile 77, Costa Rica 71, Argentina 70 e Brasil 65 no topo; Nicarágua 43, Honduras 42 e Haiti 24 embaixo; o agregado LATAM em 58. Os Estados frágeis pontuam baixo, as democracias mais sólidas lideram governança e justiça — a direção do método se sustenta sem ajustes manuais.
Limitações declaradas
Leia isto antes de citar o índice
As quatro limitações a seguir são parte da metodologia, não letra miúda.
- Preenchimento temporal. Os anos sem observação arrastam o último valor conhecido; a cobertura publicada por pilar quantifica quanto da série é observado vs. sustentado.
- Média simples dentro do pilar. Um pilar com muitos indicadores de um mesmo tema inclina a pontuação para esse tema; a lista
contributing[]torna essa composição visível. - Metas agrupadas por região. O índice mede posição dentro da América Latina e do Caribe; não captura a distância frente a referências extrarregionais.
- Janela 2010–2024. Mudanças estruturais anteriores a 2010 não afetam as metas.
Reprodutibilidade
O índice completo se regenera a partir dos dados citados com um comando:
bun run scripts/bake-composite-scores.ts # regenera public/data/scores.json
bun run scripts/check-scores.ts # gate: cobertura + toda pontuação ∈ [0,100]O método está implementado em um único arquivo legível (scripts/bake-composite-scores.ts, ~360 linhas) e este documento corresponde linha a linha a esse código. Se o código e este documento divergem, o código manda e o documento é corrigido — nunca o contrário.
A promessa de que "reponderar é uma mudança de uma linha" tem, além disso, uma face prática na plataforma: /indice é o construtor de índices próprios (escolha componentes, pesos e normalização min-max ou z; os 25 países são reclassificados ao vivo), e /indices é o hub de transparência que lista cada composto publicado (ICF, ISC, IAC, ICR) com a sua árvore de pesos lida dos arquivos de bake reais.
Referências metodológicas
- PNUD, Human Development Report — Technical Notes (normalização por metas do IDH).
- OCDE/JRC, Handbook on Constructing Composite Indicators: Methodology and User Guide, 2008.