O pool tem 5 métodos (média, último valor, reglin, suavização exponencial, Kalman) — o ARIMA ainda não entrou. Quando m40b_arima.py gravar predicoes_arima.parquet, esta análise inteira se refaz trocando só a flag --metodos de tools/analise_ensemble.py, sem editar o script. A leitura interpretativa abaixo (o que cada número sugere fazer a seguir) é rascunho de quem executou a análise, não texto do autor da dissertação — os números foram conferidos contra os CSVs, as conclusões sobre eles ainda não passaram pelo autor. Nada aqui altera o run canônico nem as páginas já publicadas: é um recorte novo sobre os mesmos dados de e1-20260804-175333.
O run canônico já mostrou que o ensemble por média empata com o melhor método
isolado (run canônico E1). Esta análise vai um
passo além e pergunta: dado o mesmo pool de 5 métodos, existe um jeito de combinar ou selecionar que
faça melhor do que a média simples? Cinco testes independentes, todos sobre o mesmo pool e o mesmo
run — tools/analise_ensemble.py produz só os números; a leitura de cada um vem logo
abaixo, marcada como rascunho.
escalonada, 11,13 → 11,17 — hipótese refutada
seletor por estrato (10,45) contra oráculo por unidade (6,40)
entre 110 estratos — 13,6 pontos à frente do 2º colocado
das 5 predições contra o valor real — baixa demais para virar intervalo
Pool P0: media, ultimo_valor, reglin, suav_exp, kalman — os mesmos 5 métodos do run
canônico. Run e1-20260804-175333 (config.yaml, min_anos_treino: 2, o
critério hoje canônico). Salvo indicação contrária, toda tabela abaixo usa o
subconjunto comum: as linhas em que os 5 métodos do pool estão presentes e
y_true é observado — mesmo n para todo combinador e método isolado numa
mesma linha de tabela, comparação em pé de igualdade. Onde uma tabela mistura subconjuntos
diferentes, o subconjunto e o n aparecem em colunas próprias, nunca em nota de rodapé.
Peso e seleção fora da amostra (achado 3) treinam em 2021-2023 e avaliam só em 2024-2025 — anos
que o treino nunca viu.
1. Podar o pior método piora o ensemble
A hipótese óbvia era a oposta: tirar o reglin — de longe o pior método isolado,
MAE 20,84 na escalonada, entre 1,6× e 1,9× os outros quatro isolados — deveria melhorar a média do
pool. Testada contra os dados, a hipótese não se sustenta: a média sem reglin é
pior que a média com reglin, nas duas representações.
| Combinador | MAE escalonada | MAE retroativa |
|---|---|---|
| Regressão linear (isolado) | 20,84 | 14,05 |
| Média do pool (5 métodos) | 11,13 | 11,16 |
| Média sem reglin (4 métodos) | 11,17 | 11,31 |
| Mediana do pool (5 métodos) | 10,90 | 11,22 |
| Mediana sem reglin (4 métodos) | 11,19 | 11,29 |
Subconjunto comum aos 5 métodos, sem fallback. n = 1.622.035 (escalonada) e
2.756.813 (retroativa). Run e1-20260804-175333, 01/09/2026, tabela completa em
analise_ensemble/A_geral.csv.
Como ler. os 12 combinadores/métodos isolados do pool,
ordenados pelo MAE na escalonada. Compare a barra "Média do pool (5 métodos)" com "Média sem
reglin (4 métodos)" logo abaixo dela — tirar o método mais fraco não melhora, piora. Run
e1-20260804-175333, 01/09/2026.
O mesmo padrão aparece separando por posição (interna/fronteira), nas duas representações — a média do pool bate a média sem reglin em fronteira escalonada (20,88 vs. 21,19), interna escalonada (9,74 vs. 9,75), fronteira retroativa (12,67 vs. 12,93) e interna retroativa (10,71 vs. 10,83). Um método com erro alto mas descorrelacionado do erro dos outros quatro ainda contribui à média — é diversidade vencendo acurácia individual, não um artefato de agregação. [leitura do executor]
2. A comparação justa muda o baseline
Todo número acima é do subconjunto comum — só as linhas em que os 5 métodos do pool existem. Fora desse subconjunto, o universo de "último valor" é maior (ele não exige os outros quatro para existir), e o MAE do baseline muda — bastante, na escalonada.
| Representação | Subconjunto | n | MAE (último valor) |
|---|---|---|---|
| Escalonada | comum aos 5 métodos, sem fallback | 1.622.035 | 10,98 |
| universo avaliável (inclui fallback, só último valor precisa existir) | 2.094.657 | 12,11 | |
| Retroativa | comum aos 5 métodos, sem fallback | 2.756.813 | 12,00 |
| universo avaliável (inclui fallback) | 2.787.715 | 12,04 |
Fallback = séries com histórico insuficiente para os 5 métodos do pool, mas
suficiente para "último valor" sozinho (ver docstring de construir_unidade() em
tools/analise_ensemble.py). Run e1-20260804-175333, 01/09/2026.
Na retroativa a diferença é pequena (12,00 → 12,04, 31 mil linhas a mais). Na escalonada é grande (10,98 → 12,11, quase 473 mil linhas a mais) — a escalonada gera muito mais fallback porque a cadeia de origem existe mesmo quando a escola não tem os 2 anos de histórico que os outros métodos exigem. Qualquer tabela que compare "último valor" entre representações, ou entre análises deste site, só é comparável se disser qual dos dois números está usando.
3. Selecionar bate combinar — e nenhum dos dois chega perto do teto
Com o peso e a seleção treinados só em 2021-2023 e avaliados fora da amostra em 2024-2025: escolher por estrato o método com menor MAE de treino ("seletor por estrato") bate qualquer forma de combinar as 5 predições — mas a distância até o oráculo (o menor erro possível, escolhendo o melhor método unidade por unidade, não por estrato) é grande demais para ignorar.
| Combinador | MAE (2024-2025) |
|---|---|
| Oráculo por unidade teto teórico | 6,40 |
| Seletor por estrato (peso treinado 2021-2023) | 10,45 |
| Peso inverso do MAE de treino | 10,49 |
| Ensemble — mediana do pool | 10,56 |
| Ensemble — média do pool | 10,61 |
| Último valor (baseline) | 11,09 |
n = 1.805.979 em todas as linhas — mesmo subconjunto, mesmos anos de teste
(2024-2025), peso e seleção treinados só em 2021-2023 (disciplina de vazamento: o treino nunca vê
2024-2025). Run e1-20260804-175333, 01/09/2026, tabelas completas em
analise_ensemble/C_geral.csv e D_geral.csv.
Como ler. do oráculo (cinza, teto teórico — nenhum método
real chega lá) ao baseline (vermelho). O seletor por estrato (verde) e os dois ensembles (azul)
ficam próximos entre si e distantes do oráculo — a distância de 4,05 alunos de MAE entre o melhor
método realizável e o oráculo. Run e1-20260804-175333, 01/09/2026.
Se o seletor por estrato (que já escolhe o melhor método por representação×posição×etapa) só fecha uma fração da distância até o oráculo (que escolhe por unidade), o ganho não capturado não está em "acertar melhor o método por estrato" — está dentro do estrato, série a série. Um seletor mais fino que o de hoje (por escola, por faixa de tamanho) é a hipótese óbvia a testar a seguir, não um ensemble mais sofisticado sobre o mesmo grão de estrato. [leitura do executor]
4. Onde o ensemble ganha: confiabilidade, não estabilidade
Entre os 110 estratos (representação×posição×etapa×ano, os 5 anos do backtest), três pernas separadas — porque juntas contam uma história mais honesta do que qualquer uma sozinha.
4.1 — Dispersão do MAE entre estratos: empate técnico
| Método/combinador | Categoria | Desvio-padrão do MAE entre os 110 estratos |
|---|---|---|
| Suavização exponencial (isolado) | isolado | 10,44 |
| Média do pool (5 métodos) | combinador | 10,47 |
n = 110 estratos em ambas as linhas. Run e1-20260804-175333,
01/09/2026, analise_ensemble/E_resumo.csv.
A diferença é 0,03 aluno numa escala de ~10,4 — não dá para chamar nenhum dos dois de mais estável que o outro. O que é verdade, com essas palavras: a média do pool é o menor desvio-padrão entre os combinadores (os outros 6 vão de 10,50 a 10,75); entre isolados e combinadores juntos, o suav_exp fica ligeiramente à frente.
4.2 — Pior caso: aí a média do pool ganha do melhor isolado
| Método/combinador | MAE no pior estrato | Estrato do pior caso |
|---|---|---|
| Último valor (isolado) | 42,178833 | escalonada · fronteira · etapa 25 (1ª série EM) · 2023 |
| Média do pool (5 métodos) | 42,180527 | |
| Kalman (isolado) | 42,39 | |
| Suavização exponencial (isolado — melhor isolado da perna 4.1) | 43,15 |
Run e1-20260804-175333, 01/09/2026, analise_ensemble/E_resumo.csv,
coluna mae_pior_caso/estrato_pior_caso.
O último valor e a média do pool empatam no pior caso (42,18 nas duas primeiras casas decimais — diferença de 0,0017 aluno, dentro do ruído). O suav_exp, melhor isolado na perna 4.1, aqui fica atrás dos dois: 43,15 contra 42,18. E o estrato de pior caso é o mesmo para quase todos os 12 combinadores/métodos — escalonada, fronteira, etapa 25 (1ª série do EM), ano 2023: a transição 9º ano→1ª série do EM, coerente com o padrão de fronteiras já visto no run canônico.
4.3 — Frequência no top-2: é aqui que a folga aparece
Como ler. % dos 110 estratos em que cada método/combinador
fica entre os 2 de menor MAE. A média do pool (52,7%) está à frente do suav_exp (39,1%, melhor
isolado) por 13,6 pontos, e do kalman (5,5%) por quase 10×. Run e1-20260804-175333,
01/09/2026.
O ensemble não é mais estável no sentido de variar menos entre estratos — isso é empate técnico com o suav_exp. É mais confiável no sentido de raramente estar entre os piores: fica no top-2 em mais da metade dos estratos, e no pior caso empata com o melhor resultado observado (não fica atrás de ninguém). Um método isolado que erra pouco em média pode desabar num estrato específico (é o que acontece com o suav_exp no pior caso); a média do pool quase nunca desaba. Para o PNLD, que decide etapa por etapa e UF por UF — nunca "na média nacional" — essa segunda propriedade importa mais que a primeira. Esta última frase é leitura de quem executou a análise, não do autor da dissertação — ver aviso no topo da página.
5. O leque das predições não serve como intervalo de incerteza
Achado negativo. As 5 predições do pool, para cada escola-etapa-ano, formam um leque — [mínimo, máximo] entre os métodos. A pergunta: esse leque cobre o valor real com frequência suficiente para ser usado como faixa de incerteza na curva de compra do PNLD (a mesma ideia da curva falta×sobra do run canônico, mas usando o desacordo entre métodos em vez do quantil de erro histórico de um único método)?
| Recorte | n | Amplitude média do leque | Cobertura empírica |
|---|---|---|---|
| Geral | 4.378.848 | 18,63 | 47,4% |
| Escalonada | 1.622.035 | 21,29 | 52,0% |
| Retroativa | 2.756.813 | 17,06 | 44,7% |
Cobertura empírica = % das unidades em que o valor real cai dentro de [mín, máx] das
5 predições. Run e1-20260804-175333, 01/09/2026, analise_ensemble/F_dispersao.csv.
Um intervalo de incerteza que deveria conter o valor real e só consegue em 47,4% dos casos está subcobrindo por mais de 50 pontos percentuais, não por uma margem fina de calibração. Cru, o leque das 5 predições não serve como intervalo de incerteza.
Como ler. em vez de comprar no valor central do leque,
comprar no quantil p da distribuição das 5 predições (mesma lógica da curva de compra do
run canônico, aplicada à dispersão entre métodos). Mesmo em p=95% — quase o máximo do leque —
27,8% das escolas ainda ficam com falta. Run e1-20260804-175333, 01/09/2026.
| Quantil de compra | Falta (alunos) | Sobra (alunos) | % escolas com falta |
|---|---|---|---|
| p50 (mediana do pool) | 24.629.442 | 23.991.396 | 45,9% |
| p70 | 21.060.200 | 29.917.662 | 39,9% |
| p80 | 18.546.128 | 35.126.759 | 34,4% |
| p90 | 15.970.673 | 43.249.888 | 29,6% |
| p95 | 15.006.633 | 47.635.140 | 27,8% |
Recorte geral, n = 4.378.848 em todas as linhas. Falta/sobra somadas em número de
alunos-livro. Run e1-20260804-175333, 01/09/2026, analise_ensemble/F_quantis.csv.
Quantis = config.yaml → protocolo.purchase_quantiles.
Mesmo subcobrindo cru, a direção é a esperada: comprar mais alto reduz falta e aumenta sobra, igual à curva do run canônico. O que falta é calibração — inflar o leque (por exemplo, por um fator estimado fora da amostra) até a cobertura empírica bater o nível nominal desejado, do jeito que se calibra qualquer intervalo de previsão. Sem essa calibração, tratar [mín,máx] das 5 predições como se já fosse um intervalo de 90% ou 95% superestima a certeza que o ensemble de fato tem. [leitura do executor]
Fonte: run canônico e1-20260804-175333 (config.yaml,
min_anos_treino: 2), gerado em 01/09/2026 por
tools/analise_ensemble.py --run-id e1-20260804-175333. 15 tabelas em
runs/e1-20260804-175333/analise_ensemble/; documento técnico completo (uma seção por
análise A-F) em runs/e1-20260804-175333/relatorio_e8_caminhos.md. Pool P0: média,
último valor, regressão linear, suavização exponencial, Kalman — 5 métodos, ARIMA fora até
m40b_arima.py gravar predicoes_arima.parquet neste run.