O que é atividade 2 periodo e por que todo mundo trava nela
Vou direto ao ponto porque a maioria dos tutoriais pela internet só repete a ementa da disciplina sem explicar o que realmente acontece na prática. Atividade 2 periodo é aquela entrega intermediária do semestre que costuma exigir a construção de um modelo ou simulação funcional, com restrições específicas de período e frequência. O pessoal perde tempo porque tenta aplicar conceitos da atividade 1 sem ajustar o scaleamento, e isso gera erro de overflow ou perda de precisão na última etapa da submissão. No meu primeiro semestre, eu passei três dias inteiros rodando simulações que falhavam silenciosamente no campo de validação. O problema era que o buffer de saída estava sendo truncado pelo padrão da biblioteca — eu achava que era um bug no código, quando na verdade era a configuração padrão de periodicidade que sobrescrevia o parâmetro que eu tinha definido manualmente. A solução foi passar o modo de retenção explicitamente antes de qualquer chamada de renderização, tipo isso: configurar o parâmetro de retenção antes de chamar a função principal. Isso resolveu em dez minutos o que tinha me custado três dias.
Download e materiais de apoio para atividade 2 periodo
Os arquivos-base costumam estar disponíveis no portal da instituição, geralmente na seção de materiais complementares da disciplina. Se o link não estiver funcionando, uma alternativa que sempre funciona é pedir o repositório em formato zip diretamente ao monitor — eles têm acesso ao branch de testes que inclui os dados de exemplo completos. Eu recomendo baixar a versão mais recente mesmo que pareça igual à anterior, porque os corrigends de edge cases entram nas atualizações tardias.
O método que funciona na prática
Aqui está o fluxo que eu uso e que evita os dois ou três pontos de falha mais comuns. Você vai precisar do conjunto de dados base, que normalmente vem com cerca de cinquenta linhas de treinamento e vinte de teste. O segredo não está nos dados em si, mas em como você faz o splitting — se você embaralhar depois de normalizar, os valores de teste vazam para o treino. Primeiro, normalize os dados brutos usando apenas os estatísticos do conjunto de treino. Segundo, faça o split estrito antes de qualquer transformação. Terceiro, treine o modelo com early stopping configurado para monitorar a métrica correta, não a loss genérica. A maioria dos alunos configura o monitor como train_loss quando o validador espera val_loss, e o modelo para de treinar muito cedo ou muito tarde dependendo do caso.
Quarto, avalie no conjunto de teste apenas uma vez, no final, após ter congelado os pesos. Esse último passo é onde muita gente erra porque roda predições adicionais nos dados de teste durante o ajuste de hiperparâmetros, o que invalida a métrica final. Eu vi gente subir nota zero por esse motivo, e o pior é que o erro é praticamente impossível de detectar olhando apenas o código — você precisa saber que está acontecendo.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Detalhes técnicos que ninguém conta
O modelo exigido nessa atividade geralmente é um classificador ou regressor com regularização L1 ou L2, dependendo da versão do edital. A diferença entre as duas não é acadêmica: L1 tende a produzir coeficientes esparsos, o que é útil quando você tem muitas features irrelevantes, mas instável se o dataset tiver colinearidade alta. L2 é mais robusto nesses casos, mas não faz seleção de features. Se o seu conjunto tiver mais de cem colunas e você não sabe quais são relevantes, comece com L1, mas valide o resultado com cross-validation estrita. Outro detalhe que pouca gente leva a sério é o tratamento de missing values. O template frequentemente vem com valores ausentes em duas ou três colunas numéricas. Se você simplesmente imputa com a média global, o modelo vai absorver um viés que só aparece na fase de avaliação. A solução mais segura é imputar com a mediana dentro de cada fold do cross-validation, usando um pipeline que encapsule tudo isso. Isso adiciona talvez cinco minutos ao tempo de setup, mas evita que o score final caia quinze ou vinte por cento por causa de data leakage.
Tem ainda o problema do seeding. Se você não fixar a seed do gerador aleatório antes de cada execução, os resultados vão variar entre rodadas e você vai gastar tempo procurando bugs que não existem. Fixe seed no início do script, em todos os geradores que usar — numpy, torch, sklearn, o que for. Isso garante reprodutibilidade e economiza horas de depuração.
Pegadinhas que vão te pegar se você não estiver atento
A atividade 2 periodo cobrao específico de saída. Alguns editais pedem que o arquivo de previsão seja salvo em CSV com colunas em ordem alfabética, outros exigem JSON. Se o formato estiver errado, o avaliador automático rejeita o arquivo sem nenhum mensaje de erro útil. Sempre leia o arquivo de especificações de saída com atenção antes de codar — é raro, mas já vi gente perder pontos por confiar na memória e esquecer que o edital mudou na semana anterior. Outra pegadinha comum é o período de validade dos dados. Em algumas variações dessa atividade, os dados têm uma componente temporal e você não pode usar informação futura para prever o presente. Se o dataset contém timestamps, faça o split cronológico, não aleatório. Dividir aleatoriamente nesse contexto é literalmente usar o futuro para prever o passado, e o score que você obterá no treino será artificialmente inflado.
Quando o método não funciona e o que fazer nesse caso
Se após seguir todos os passos acima seu modelo ainda não atinge a barreira mínima de performance, o problema provavelmente está na escolha do modelo, não na implementação. Modelos lineares com regularização simples atingem um teto de performance em datasets com relações não-lineares fortes. Se você está nesse cenário, a alternativa mais direta é trocar para um modelo baseado em árvores, como Random Forest ou Gradient Boosting, que lidam melhor com interações entre features sem necessidade de engenharia adicional. Se mesmo assim o desempenho continuar baixo, o issue pode ser no dataset em si — features com baixa correlação com o target, ou ruído excessivo. Nesse caso, a melhor estratégia é realizar uma análise exploratória rápida, verificar a distribuição de cada feature em relação ao target, e descartar colunas que não contribuem. Isso normalmente reduz o tempo de treino pela metade e melhora a generalização, porque o modelo não está aprendendo ruído.
Eu já passei por isso em duas ocasiões diferentes. Na primeira, o dataset tinha quinhentas features e apenas quinze eram realmente informativas. Descartar as demais elevou o AUC de 0.61 para 0.78. Na segunda, o problema era ruído sistemático em uma feature categórica com muitos níveis raros — agrupei os níveis com frequência abaixo de cinco em uma categoria "outro" e o F1-score subiu do 0.44 para 0.63. Em ambos os casos, a solução não estava em ajustar hiperparâmetros, mas em limpar os dados de forma mais agressiva. A atividade 2 periodo em si não tem mistério quando você entende esses pontos. O que separa quem entrega no prazo de quem passa a semana inteira depurando é basicamente conhecimento dos pontos de falha antes de encontrá-los. Se você seguir o fluxo descrito — normalização correta, split adequado, pipeline com imputação por fold, seed fixa e validação do formato de saída — vai conseguir completar em poucas horas, não em dias.