2. Classificação ou Regressão
Prazo e Entrega
13.nov (sexta) 2026
Commits até 23:59
A mesma equipe do EDA
60% da nota de Projeto
docs/projects/classification/ ou docs/projects/regression/
Projeto: Classificação ou Regressão com redes neurais
Segunda entrega do projeto. A equipe treina uma rede neural sobre o mesmo dataset do EDA, na tarefa escolhida na proposta: classificação ou regressão, uma só. O pipeline do EDA é o ponto de partida. A pergunta desta entrega: a rede aprende algo que modelos mais simples não aprendem? E quanto dá para confiar no número que ela entrega?
Regras
- Rede obrigatória: uma MLP (ou mais funda) em PyTorch, Keras/TensorFlow ou NumPy feito pela equipe. O
MLPClassifier/MLPRegressordo scikit-learn só vale como baseline. - Mesmo dataset, mesma tarefa e mesmo treino/teste do EDA, com a mesma semente. A validação sai do treino.
- O teste é usado uma única vez, na etapa 5, depois de tudo decidido pela validação. Se ele ajudou a escolher algo, diga no relatório: a etapa 5 vale até a metade.
- Sementes fixas, figuras numeradas com título, eixos e legenda; todo número pedido aparece no texto.
Etapas
-
0 · Ponto de partida · 0,5
- O pipeline do EDA importado de
code/, ajustado só no treino, com as correções apontadas no EDA. - A métrica principal e o critério de sucesso escritos antes de treinar: "MAE pelo menos 15% menor que o do melhor baseline".
- O pipeline do EDA importado de
-
1 · Baselines · 1,0
- Um trivial (classe majoritária ou média do treino,
Dummy*) e um linear (logística ou linear/Ridge), no mesmo pipeline, avaliados na validação. - Opcional: random forest ou boosting. Em tabelas eles costumam empatar com a rede; se for o caso, diga.
- Um trivial (classe majoritária ou média do treino,
-
2 · A rede · 2,0
- Camadas, larguras, ativações e inicialização justificadas; nº de parâmetros comparado ao nº de linhas do treino.
- Saída e perda coerentes com a tarefa (abaixo). Rede e loop em arquivos de
code/.
-
3 · Treinamento · 1,5
- Otimizador (SGD com momentum, Adam ou AdamW), taxa, batch e épocas, com o motivo.
- Parada antecipada pela validação, restaurando os melhores pesos.
- Curvas de treino e de validação por época, lidas: converge? onde começa o overfitting?
-
4 · Regularização e hiperparâmetros · 2,0
- Duas técnicas ou mais (weight decay, dropout, BatchNorm/LayerNorm…) comparadas com a rede sem nenhuma.
- Busca com 8 configurações ou mais (taxa, largura/profundidade, regularização) escolhida pela validação, numa tabela ordenada.
-
5 · Avaliação no teste · 1,5
- A configuração escolhida, retreinada e avaliada uma vez, com as métricas da tarefa (abaixo).
- Uma tabela com a rede e os baselines no mesmo teste: o critério da etapa 0 foi atingido?
- 3 sementes ou mais (média ± desvio): a diferença para o baseline é maior que essa variação?
-
6 · Análise de erros · 1,0
- O erro por subgrupo (uma categoria do EDA, faixas do alvo) e os piores exemplos, com uma hipótese para cada padrão.
- Importância por permutação: bate com o que o EDA sugeria?
-
7 · Conclusão · 0,5
- A rede valeu a pena? Limitações, quem seria afetado por um erro e o que faria com mais tempo.
- A tabela de resumo dos resultados preenchida.
O que muda com a tarefa
| Item | O que fazer |
|---|---|
| Baseline trivial | DummyClassifier(strategy="most_frequent") |
| Saída e perda | binária: 1 unidade + BCEWithLogitsLoss; multiclasse: 1 unidade por classe + CrossEntropyLoss. A rede devolve logits |
| Desbalanceamento | weight/pos_weight na perda ou reamostragem só no treino |
| Métricas no teste | matriz de confusão, precisão, recall e F1 por classe, F1 macro, ROC-AUC; se desbalanceado, curva precisão-recall e PR-AUC |
| Limiar | escolhido na validação, justificado pelo custo dos erros |
| Item | O que fazer |
|---|---|
| Baseline trivial | DummyRegressor(strategy="mean") (ou "median") |
| Saída e perda | 1 unidade linear + MSE, MAE ou Huber, justificada pelos outliers do EDA |
| Alvo assimétrico | treinar em log1p(y) é permitido; as métricas voltam à escala original |
| Métricas no teste | MAE, RMSE e R² (MAPE só se o alvo fica longe de zero) |
| Figuras | previsto × real e resíduos × previsto |
MLP · Otimização · Regularização · Métricas de classificação · Métricas de regressão · Separação
Esqueleto do loop de treino com parada antecipada (PyTorch)
best, wait = float("inf"), 0
for epoch in range(max_epochs):
model.train()
for xb, yb in train_loader:
optimizer.zero_grad()
loss = loss_fn(model(xb), yb)
loss.backward()
optimizer.step()
model.eval()
with torch.no_grad():
val_loss = loss_fn(model(X_val), y_val).item()
if val_loss < best:
best, wait = val_loss, 0
torch.save(model.state_dict(), "best.pt") # guarda os melhores pesos
else:
wait += 1
if wait == patience:
break
model.load_state_dict(torch.load("best.pt"))
Resumo dos resultados
A última seção do relatório, com as linhas na ordem:
| # | Resumo | Valor |
|---|---|---|
| 1 | Dataset, tarefa, alvo e métrica principal | |
| 2 | Treino · validação · teste (linhas) | |
| 3 | Melhor baseline e sua métrica no teste | |
| 4 | Rede escolhida: camadas × unidades, nº de parâmetros, regularização | |
| 5 | Otimizador, taxa, batch e época em que parou | |
| 6 | Métrica principal da rede no teste (média ± desvio, 3 sementes) | |
| 7 | Critério de sucesso atingido? | |
| 8 | Subgrupo com o maior erro e o valor |
Entrega
Relatório em docs/projects/classification/index.md ou docs/projects/regression/index.md (conforme a tarefa, como no template), no mesmo repositório do EDA, com os títulos das etapas na ordem desta página, código em code/ (roda de um clone limpo) e figuras em figures/ — veja Formato de Entrega. Prazo não é estendido · plágio zera a entrega · IA é permitida, mas todos os membros explicam cada número e cada decisão: provas orais podem ocorrer e a Avaliação de Projeto limita a nota.
---
project: classification # ou regression
dataset: https://...
team: [Nome Sobrenome, ...]
ai_use: "none"
---
Bônus de competição (até +1, nota limitada a 10): se o dataset é de uma competição aberta (Kaggle, DrivenData, Zindi), +0,5 por uma submissão válida da rede e +0,5 se ela ficar entre os 50% melhores do leaderboard, com link e captura de tela no relatório.
Rubrica
Rubrica em revisão
A rubrica desta entrega ainda pode ser revisada. Qualquer mudança será anunciada em aula e registrada nesta página antes do prazo.
Cada etapa vale integral, metade ou zero: integral quando tudo o que o cartão pede está lá e justificado; metade quando falta a justificativa ou o número que sustenta a análise; zero quando ausente ou incorreta.
| Etapa | Pts | Nota integral quando |
|---|---|---|
| 0. Ponto de partida | 0,5 | Pipeline do EDA reaproveitado sem vazamento; métrica e critério numérico definidos antes de treinar. |
| 1. Baselines | 1,0 | Trivial e linear no mesmo pipeline, avaliados na validação e interpretados. |
| 2. A rede | 2,0 | Arquitetura justificada, saída e perda certas para a tarefa, código em code/ que roda. |
| 3. Treinamento | 1,5 | Escolhas do otimizador justificadas, parada antecipada pela validação, curvas lidas. |
| 4. Regularização e hiperparâmetros | 2,0 | Duas técnicas comparadas, 8 configurações ou mais escolhidas pela validação. |
| 5. Avaliação no teste | 1,5 | Teste usado uma vez, métricas da tarefa, comparação com os baselines e 3 sementes. |
| 6. Análise de erros | 1,0 | Erro por subgrupo com hipóteses e importância por permutação comparada ao EDA. |
| 7. Conclusão | 0,5 | Limitações e uso responsável discutidos, resumo dos resultados completo. |
| 10 |