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âmetro | Default | Significado |
|---|---|---|
horizon | 2 | Horizonte t+2 — lead time de compra. Não alterar. |
min_series_length | 4 | Mínimo de observações anuais para a série entrar. |
alpha_levels | 0,10 e 0,05 | Níveis de não-cobertura (intervalos de 90% e 95%). |
purchase_quantiles | 0,50 · 0,70 · 0,80 · 0,90 · 0,95 | Níveis de compra varridos (Exp. 3). |
cost_ratios_k | 1 · 2 · 3 · 5 · 10 | Razões custo(falta)/custo(sobra). Varridas, não fixadas. |
geo_neighbors_k | 5 | Vizinhos para alocação espacial (Exp. 5). |
random_seed | 42 | Semente única para toda aleatoriedade. |
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).
| Campo | Descrição |
|---|---|
school_id | Identificador único da escola. |
stage | Etapa canônica: EI_CRECHE, EI_PRE, EF_AI, EF_AF, EM, OUTROS. |
grade | Série/grade (EF_1…EF_9, EM_1…). Se indisponível, grade = stage. |
year | Ano do Censo. |
enrollment | Matrícula (soma sobre turmas, se aplicável). |
lat, lon | Coordenadas da escola (podem ser nulas). |
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.
Formato de saída — dados, não gráficos
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_1em escola só de EF (a transição infantil → anos iniciais).EF_5 → EF_6em escola só de anos iniciais.EF_9 → EM_1em escola só de fundamental.- qualquer outra descontinuidade de oferta.
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.
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".
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
- Erro decomposto em direção — under/over do preditor-base; quantifica o problema "faltou vs. sobrou".
- Curva de compra por quantil — para cada nível de compra: comprado, falta, sobra, escolas com falta. Produz a fronteira sobra × falta.
- Custo sob perda assimétrica —
custo(p,k) = k·falta(p) + sobra(p); para cadak, o nível de compra ótimop*. Produz custo × p e p* × k.
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.
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.
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
kescolas 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}.
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.
9 · Ordem de execução e gates
- Bloco 0 →
data_recon.md. Gate: bloqueios B1/B2/B3? Senão, segue. - Infraestrutura → io, schema, backtesting, metrics, conformal, progression, geo. Gate: validação do schema passa.
- Exp. 1 → previsões + tabela mestra. Gate: campeão por etapa identificado.
- Exp. 2 e 3 → consomem as previsões do Exp. 1 (podem rodar em paralelo).
- Exp. 4 → GPR intra-escola (depende da cadeia de progressão).
- Exp. 5 → fronteira espacial (depende da cadeia; compõe com o Exp. 4).
- Síntese → painel under/over comparando todos os métodos + narrativa em camadas + manifest final.
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.