research.jflneto.dev.br
Método

Plano de experimentos — predição de matrículas para o PNLD

Especificação dos cinco experimentos sobre o Censo Escolar de Maceió, horizonte t+2

03/06/2026Métodoespecificação executadaorigem: Plano de Experimento.html

O que é este documento. Especificação dos cinco experimentos a serem implementados e executados de forma autônoma sobre os dados do Censo Escolar de Maceió, gerando dados estruturados (não gráficos renderizados) que alimentarão, em etapa posterior, uma apresentação com gráficos dinâmicos.

Escopo desta rodada. Município de Maceió; horizonte de predição t+2 (lead time real de compra: dados de 2025 → compra para 2027); apenas margens agregadas do Censo (sem identificador individual do aluno); coordenadas cruas, sem limpeza pesada.

Princípio operacional. Preferir degradação elegante a travar. Onde um dado faltar ou estiver sujo, aplicar o fallback documentado, registrar a decisão e seguir. Apenas três condições exigem intervenção humana.

1 · Arranque — verificações e decisões iniciais

Bloco 0 — antes de qualquer modelagem

Reconhecimento de dados

Arquivos esperados na pasta

  • CSV do Censo de Maceió — todas as escolas, etapas e anos disponíveis.
  • Coordenadas das escolas (no CSV ou em arquivo separado).
  • Notebook Jupyter com os experimentos mais recentes do autor.

Primeira ação obrigatória

Produzir results/data_recon.md documentando: schema do CSV e seu mapeamento para o esquema canônico; granularidade (série/grade vs. etapa agregada); anos disponíveis e nº de origens de backtesting; diagnóstico de qualidade das coordenadas (% ausente, % em centroide, bounding box); o que foi aproveitado do notebook; e o mapa de oferta por escola (quais grades cada escola atende).

Regra geral de decisão

Trabalhar sempre na menor granularidade disponível. Mapear nomes reais de coluna para o esquema canônico. Não corrigir coordenadas nesta rodada — apenas diagnosticar. Reutilizar do notebook só o que for sólido, documentando o que foi descartado.

Parâmetros do projeto (defaults deliberados)

ParâmetroDefaultSignificado
horizon2Horizonte t+2 — lead time de compra. Não alterar.
min_series_length4Mínimo de observações anuais para a série entrar.
alpha_levels0,10 e 0,05Níveis de não-cobertura (intervalos de 90% e 95%).
purchase_quantiles0,50 · 0,70 · 0,80 · 0,90 · 0,95Níveis de compra varridos (Exp. 3).
cost_ratios_k1 · 2 · 3 · 5 · 10Razões custo(falta)/custo(sobra). Varridas, não fixadas.
geo_neighbors_k5Vizinhos para alocação espacial (Exp. 5).
random_seed42Semente única para toda aleatoriedade.
Contexto Sobre o k de custo. Não há valor oficial do FNDE para o custo relativo de faltar vs. sobrar livro. Por isso varremos k em vez de fixá-lo — o resultado é uma curva, e a mensagem é que comprar pelo intervalo domina comprar pela média para qualquer k plausível.

Bloqueios que exigem resposta humana — e só estes

  • B1 — Histórico insuficiente: menos de 2 origens de backtesting avaliáveis em t+2.
  • B2 — Coluna de ano ou de matrícula não identificável após o mapeamento canônico.
  • B3 — Ausência total de coordenadas e o Exp. 5 sendo requerido (e nem o fallback "mesmo bairro" sendo possível).

Para todo o resto: aplicar o fallback documentado e seguir. Bloqueios, se houver, vão no topo de data_recon.md.

2 · Infraestrutura compartilhada

Bloco 1 — implementar uma vez, reutilizar

Contrato de dados — esquema canônico

Toda a modelagem consome um único DataFrame em formato longo, uma linha por série-ano. Chave de série: (school_id, grade).

CampoDescrição
school_idIdentificador único da escola.
stageEtapa canônica: EI_CRECHE, EI_PRE, EF_AI, EF_AF, EM, OUTROS.
gradeSérie/grade (EF_1…EF_9, EM_1…). Se indisponível, grade = stage.
yearAno do Censo.
enrollmentMatrícula (soma sobre turmas, se aplicável).
lat, lonCoordenadas da escola (podem ser nulas).
Contexto EJA, profissionalizante e similares vão para stage = OUTROS: entram nos experimentos de série temporal (1, 2, 3) como estrato, mas ficam fora da cadeia de progressão (4, 5), pois não seguem progressão regular grade-a-grade.

Protocolo de backtesting

Origem móvel com janela de treino expansiva, avaliando sempre o horizonte t+2. Para cada origem T, treina com anos ≤ T, prevê T+2, compara com o observado. O mesmo conjunto de pares (origem, alvo) é usado por todos os métodos — comparabilidade é inegociável. As previsões cruas são gravadas em results/predictions/ para que os Exp. 2 e 3 não precisem re-treinar.

Métricas — fonte única, aplicadas a todos os experimentos

Sempre em dois níveis: por escola-série e agregado (e por etapa quando fizer sentido).

Magnitude

MAE (interpretável em alunos) e MASE (escala contra o naive, comparável entre turmas de tamanhos díspares).

Direção do erro — under / over (transversal, exigido em todos)

Com resíduo e = y_real − y_previsto: under (faltou livro, e > 0) e over (sobrou livro, e < 0), cada um reportando taxa, magnitude média e volume total.

Contexto Por quê. Como a compra do PNLD é por escola e o custo de faltar ≠ custo de sobrar, a média do erro esconde o que importa. Reportar under/over separadamente expõe qual método erra "para o lado perigoso".

Formato de saída — dados, não gráficos

Atenção Regra absoluta desta rodada. Nenhum gráfico renderizado (PNG) é entregável. Os entregáveis são dados estruturados prontos para um front-end dinâmico (tooltip, hover, zoom).

Cada experimento grava em results/expN/: um summary.json com arrays de pontos já contendo os campos do tooltip; CSVs tidy para recortes; e um meta.json com parâmetros, seeds e fallbacks aplicados. Um manifest.json global indexa tudo, e o README_RESULTS.md diz qual artefato alimenta qual gráfico.

3 · Cadeia de progressão e séries de fronteira

Espinha dorsal dos Exp. 4 e 5

A transição não ocorre só no 9º ano

Cadeia canônica grade-a-grade

EI_PRE → EF_1 → … → EF_5 → EF_6 → … → EF_9 → EM_1 → EM_2 → EM_3

Classificação automática de cada grade-escola

  • Série interna — a grade predecessora existe na mesma escola; a coorte progride internamente. → Exp. 4 (GPR).
  • Série de fronteira — a predecessora não existe na mesma escola, mas existe na vizinhança; a coorte entrou de fora. → Exp. 5 (alocação espacial).

As fronteiras emergem dos dados

  • EI_PRE → EF_1 em escola só de EF (a transição infantil → anos iniciais).
  • EF_5 → EF_6 em escola só de anos iniciais.
  • EF_9 → EM_1 em escola só de fundamental.
  • qualquer outra descontinuidade de oferta.
Contexto Composição t+2. A coorte que estará na grade g em T+2 esteve em g−2 em T. O pipeline encadeia dois passos: o passo interno usa GPR (Exp. 4) e o passo de fronteira usa alocação espacial (Exp. 5). É assim que os dois experimentos se compõem em vez de competir.

4 · Experimento 1 — Protocolo de baselines Maceió

Objetivo

Estabelecer o erro de referência ("o número a bater") em t+2, com rigor. Gera a tabela mestra e as previsões que os demais experimentos reutilizam.

Procedimento

Para cada série, treinar e prever t+2 com: naive (último valor), drift, média móvel, tendência linear, Holt/ETS e auto-ARIMA (ordens baixas se o custo for proibitivo).

Saídas

predictions/exp1.csv; metrics_by_method.csv; metrics_by_method_stage.csv; summary.json com o ranking e os arrays para barras comparativas.

MensagemMensagem: quão difícil é bater o naive — ecoa o achado de 2024 e calibra a expectativa da banca.

5 · Experimento 2 — Estratificação por etapa Maceió

Objetivo

Testar se modelar por etapa supera um modelo global único. Apenas etapa nesta rodada (sem urbano/rural nem dependência).

Procedimento

Comparar o melhor baseline global contra o melhor baseline por etapa, pareando por escola-série e aplicando teste t-pareado (ou Wilcoxon, se a distribuição dos erros for muito assimétrica — registrar qual).

Saídas

stratification_gain.csv (erro global, erro estratificado, diferença, p-valor por etapa); summary.json com barras "ganho por etapa".

MensagemMensagem: em quais etapas segmentar compensa e em quais é indiferente.

6 · Experimento 3 — Incerteza e utilidade de compra Maceió

O slide-assinatura

Objetivo

Mostrar que a incerteza é (a) confiável e (b) decisória para a compra do PNLD sob custo assimétrico.

Método — conformal prediction (method-agnostic)

Banda simétrica por nível α (métricas PICP e MPIW) e bandas por quantil para a curva de compra. Embrulha qualquer preditor, sem depender da estrutura do modelo.

As três camadas de decisão

  1. Erro decomposto em direção — under/over do preditor-base; quantifica o problema "faltou vs. sobrou".
  2. Curva de compra por quantil — para cada nível de compra: comprado, falta, sobra, escolas com falta. Produz a fronteira sobra × falta.
  3. Custo sob perda assimétricacusto(p,k) = k·falta(p) + sobra(p); para cada k, o nível de compra ótimo p*. Produz custo × p e p* × k.
Atenção Premissa a declarar. A cobertura conformal é uma garantia marginal (no agregado do nível de calibração), não escola-a-escola. Como a compra é por escola, registrar isso explicitamente e reportar a cobertura também desagregada por etapa.

Saídas

coverage.csv; purchase_curve.csv (um ponto por nível de compra, com tooltip); cost_curves.csv e p_star_by_k.csv; summary.json.

MensagemMensagem: a predição pontual é um único ponto da fronteira — quase nunca o que o PNLD quer. A incerteza permite escolher o ponto certo, e o ótimo varia com k.

7 · Experimento 4 — Cohort-survival / GPR Maceió

Objetivo

Testar se a estrutura de coorte supera a série temporal pura nas séries internas, onde a coorte progride dentro da escola.

Procedimento

Estimar razões de progressão grade-a-grade por escola, com fallback hierárquico para a GPR média da etapa no município quando o histórico for curto. Previsão t+2: ancorar em g−2 observado e encadear duas GPRs. Comparar contra o baseline campeão nas mesmas séries internas.

Saídas

predictions/exp4.csv; gpr_by_transition.csv; gpr_vs_baseline.csv (recortado por tipo de série); summary.json.

MensagemMensagem: a estrutura de coorte agrega nas séries de continuidade interna — e o quanto agrega, por transição.

8 · Experimento 5 — Coorte espacial nas fronteiras POC · proximidade pura

Objetivo

Testar se a estrutura espacial supera a série temporal pura nas séries de fronteira, onde a coorte troca de escola e o time-series é cego. Compõe com a GPR do Exp. 4.

Procedimento

  • Vizinhança por proximidade pura: as k escolas mais próximas que ofertam a grade predecessora (distância Haversine sobre coordenadas cruas).
  • Pool alimentador: soma das matrículas da grade predecessora na vizinhança.
  • Alocação às receptoras calibrando um fator de captação por escola contra as margens de ingresso históricas.
  • Validação: reconstruir o ingresso histórico e comparar contra o time-series puro só nas grades de fronteira; sensibilidade a k ∈ {3, 5, 10}.
Atenção Asterisco honesto. Com coordenada crua, parte das escolas pode colapsar no centroide, degradando "vizinho mais próximo". O resultado deve ser lido como "ganho real" ou "inconclusivo por qualidade de dado" — nunca como "espacial não ajuda". O coord_quality.csv sustenta essa leitura. Degradação elegante: escolas sem coordenada útil caem para o modo "mesmo bairro/sem geometria fina".

Saídas

predictions/exp5.csv; coord_quality.csv; spatial_vs_timeseries.csv (por tipo de fronteira); sensitivity_k.csv; summary.json.

MensagemMensagem: onde a coorte cruza de escola — todas as fronteiras, não só o 9º ano — a estrutura espacial pode agregar onde o time-series é cego, com a ressalva de dado desta POC.

9 · Ordem de execução e gates

  1. Bloco 0data_recon.md. Gate: bloqueios B1/B2/B3? Senão, segue.
  2. Infraestrutura → io, schema, backtesting, metrics, conformal, progression, geo. Gate: validação do schema passa.
  3. Exp. 1 → previsões + tabela mestra. Gate: campeão por etapa identificado.
  4. Exp. 2 e 3 → consomem as previsões do Exp. 1 (podem rodar em paralelo).
  5. Exp. 4 → GPR intra-escola (depende da cadeia de progressão).
  6. Exp. 5 → fronteira espacial (depende da cadeia; compõe com o Exp. 4).
  7. Síntese → painel under/over comparando todos os métodos + narrativa em camadas + manifest final.
Contexto Reprodutibilidade: seed única; versões de bibliotecas registradas; nenhuma etapa depende de estado fora da pasta. manifest.json e README_RESULTS.md atualizados a cada experimento concluído.

10 · O que esta rodada entrega

Entrega

Cinco experimentos em Maceió, t+2, só margens agregadas, com under/over medido em todos, incerteza ligada à decisão de compra, e o grafo de fronteira generalizado para todas as transições de etapa — tudo como dados estruturados para um HTML dinâmico posterior.

Síntese transversal (fecha a apresentação)

A narrativa em camadas: baseline difícil de bater → segmentar ajuda aqui → faixa de incerteza confiável e usável para decidir compra → coorte agrega no miolo → espacial agrega na fronteira.

Fora desta rodada (próximo passo, já desenhado)

Módulo 1 — variáveis exógenas (nascidos vivos defasados / SINASC, população / IBGE), que exige aquisição e limpeza de base externa. Decomposição do vazamento da coorte: evasão vs. migração para a rede privada vs. retenção (Módulos 2 e 3). O grafo de fronteira já entrega o vazamento total localizado por nó — gancho direto para esses módulos.