research.jflneto.dev.br
Resultados

Como o ensemble pode melhorar

Cinco testes sobre o pool P0 (5 métodos): poda, comparação justa, seleção fora da amostra, estabilidade entre estratos e o leque de predições como incerteza

01/09/2026Resultadosconcluído para o pool P0 (5 métodos) — ARIMA ainda foraorigem: tools/analise_ensemble.py — run e1-20260804-175333 (config.yaml, min_anos_treino=2), 15 CSVs em runs/e1-20260804-175333/analise_ensemble/
Números provisórios

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.

+0,04MAE piora ao tirar o reglin
escalonada, 11,13 → 11,17 — hipótese refutada
4,05distância do melhor realizável ao oráculo
seletor por estrato (10,45) contra oráculo por unidade (6,40)
52,7%média do pool no top-2 de MAE
entre 110 estratos — 13,6 pontos à frente do 2º colocado
47,4%cobertura empírica do leque [mín,máx]
das 5 predições contra o valor real — baixa demais para virar intervalo
O protocolo desta análise

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.

CombinadorMAE escalonadaMAE retroativa
Regressão linear (isolado)20,8414,05
Média do pool (5 métodos)11,1311,16
Média sem reglin (4 métodos)11,1711,31
Mediana do pool (5 métodos)10,9011,22
Mediana sem reglin (4 métodos)11,1911,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.

Não é ruído: se repete por posição

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çãoSubconjuntonMAE (último valor)
Escalonadacomum aos 5 métodos, sem fallback1.622.03510,98
universo avaliável (inclui fallback, só último valor precisa existir)2.094.65712,11
Retroativacomum aos 5 métodos, sem fallback2.756.81312,00
universo avaliável (inclui fallback)2.787.71512,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.

O efeito é quase todo da escalonada

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.

CombinadorMAE (2024-2025)
Oráculo por unidade teto teórico6,40
Seletor por estrato (peso treinado 2021-2023)10,45
Peso inverso do MAE de treino10,49
Ensemble — mediana do pool10,56
Ensemble — média do pool10,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.

A distância não fica em "qual método escolher"

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/combinadorCategoriaDesvio-padrão do MAE entre os 110 estratos
Suavização exponencial (isolado)isolado10,44
Média do pool (5 métodos)combinador10,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/combinadorMAE no pior estratoEstrato do pior caso
Último valor (isolado)42,178833escalonada · 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.

A leitura que sustenta as três pernas

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)?

RecortenAmplitude média do lequeCobertura empírica
Geral4.378.84818,6347,4%
Escalonada1.622.03521,2952,0%
Retroativa2.756.81317,0644,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.

Subcobertura severa — não é um problema de calibração fina

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 compraFalta (alunos)Sobra (alunos)% escolas com falta
p50 (mediana do pool)24.629.44223.991.39645,9%
p7021.060.20029.917.66239,9%
p8018.546.12835.126.75934,4%
p9015.970.67343.249.88829,6%
p9515.006.63347.635.14027,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.

Não é que o leque não sirva para nada

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.