Visão Geral
Dados em Aprendizado de Máquina
Um modelo treinado é uma função ajustada a uma amostra. Tudo o que ele algum dia saberá sobre o mundo chega pelas linhas que você entregou e toda decisão tomada antes do treinamento — o que coletar, o que manter, o que corrigir, o que normalizar, o que guardar de fora — é uma decisão sobre o que o modelo consegue aprender. Nenhuma delas envolve um único peso.
"Lixo entra, lixo sai" é verdade e quase inútil, porque não diz qual lixo nem como você saberia. Este capítulo é a versão específica: o punhado de decisões tomadas antes de existir modelo algum, o que cada uma pode quebrar e como saber se você acertou.
A ideia estrutural
O pipeline de dados tem uma linha atravessada nele — a divisão treino/teste — e uma regra governa tudo dos dois lados:
Nada que aprenda um número a partir dos dados pode ser ajustado antes da divisão.
Uma média, uma mediana, um vocabulário, uma média por categoria, um conjunto de componentes principais, uma lista de colunas selecionadas: cada um é um parâmetro estimado a partir de linhas. Estime-o usando linhas contra as quais você vai pontuar depois e a pontuação deixa de medir generalização. Todo o resto deste capítulo é consequência dessa frase, ou uma maneira de conferi-la.
Simulador: NetLab · Treino, validação e ruído
Esta aula tem o seu próprio cenário no NetLab, o laboratório de redes do curso: o grafo já vem montado, com uma nota do que experimentar e um link de volta para cá. Treine, mude, quebre. Um grafo que você tinha no simulador não se perde: fica a um Ctrl+Z.
A ordem das operações
A ordem não é preferência de estilo. Cada passo está onde está por causa do que ele aprende:
| Passo | Estima alguma coisa a partir dos dados? | Onde pertence |
|---|---|---|
Ler um histograma, um describe(), um gráfico de dispersão | não — mas você aprende | antes, gastando a curiosidade com cuidado |
| Remover linhas exatamente duplicadas | não | antes |
| Corrigir um erro de unidade, um erro de digitação, uma sentinela conhecida | não | antes |
| Preencher uma lacuna com a mediana | sim | depois — dentro do pipeline |
| Padronizar, escalar min-max | sim | depois — dentro do pipeline |
| Construir um vocabulário de categorias, fazer target encoding | sim | depois — dentro do pipeline |
| Selecionar as k melhores features | sim | depois — dentro do pipeline |
| Sobreamostrar a classe minoritária | sim | depois — só na dobra de treino |
| PCA, t-SNE, qualquer projeção aprendida | sim | depois — dentro do pipeline |
A coluna do meio é o teste. Se um passo produziria um número diferente ao receber outro conjunto de linhas, ele tem parâmetros — e parâmetros estimados a partir do conjunto de teste são parâmetros que o conjunto de teste já não pode julgar.
A parte que pega todo mundo
Acertar isso uma vez, para uma única divisão, é fácil. No instante em que você faz validação cruzada, ajusta hiperparâmetros ou faz bootstrap, um scaler.fit(X_train) escrito à mão é ajustado uma vez enquanto as dobras mudam cinco vezes — e todas as dobras ficam contaminadas de novo. A única versão da regra que sobrevive à reamostragem é um Pipeline. Veja vazamento de dados.
Onde cada coisa dá errado
Cada tópico deste capítulo é uma etapa desse pipeline falhando.
-
Tipos de Features
Que tipo de coisa está em cada coluna e por que não dá para simplesmente contar isso ao modelo. Erre aqui e a rede assume em silêncio que
azul > vermelho. -
Distribuições
Como as colunas são antes de você tocar nelas — forma, escala, assimetria, modas — e o que cada uma dessas coisas implica para a transformação que você está prestes a escolher.
-
Divisão Treino / Val / Teste
A linha do diagrama. Para que serve cada um dos três conjuntos, por que três e não dois e a única regra sobre o conjunto de teste que todo mundo quebra.
-
Vazamento de Dados
O que acontece quando informação atravessa essa linha. Quatro mecanismos, cada um medido: um filtro rodado antes da divisão transforma ruído puro em 0,870 de acurácia.
-
Qualidade dos Dados
Valores faltantes, outliers, duplicatas — e a coluna que ninguém audita, os rótulos. Uma rede ajusta 40% de rótulos errados até uma pontuação de treino perfeita.
-
Desbalanceamento de Classes
Quando uma classe é 1% das linhas, a acurácia deixa de ser uma medida. O que mudar: a amostragem, a perda, o limiar ou a métrica.
-
Pré-processamento
Tudo à direita da linha: escalar, codificar, transformar assimetria e projetar para baixo. Cada uma dessas coisas é ajustada, então cada uma pertence ao pipeline.
-
Handouts
Três roteiros de aula completos — análise exploratória, normalização e redução de dimensionalidade — em página única, mais um notebook no Colab que percorre o caminho inteiro.
Onde conseguir dados
| Fonte | Domínio | Formato |
|---|---|---|
| UCI ML Repository | geral, pequenos, clássicos | CSV, ARFF |
| OpenML | benchmarks com metadados e resultados publicados | ARFF, Parquet |
| Kaggle Datasets | tudo, com qualidade variando muito | CSV, JSON |
| Hugging Face Datasets | PLN, visão, áudio, em escala | Arrow, Parquet |
| TensorFlow Datasets | visão, PLN, áudio, prontos para stream | TFRecord |
| Google Dataset Search | índice da web inteira | vários |
Antes de baixar qualquer coisa, pergunte de que aquilo é amostra
Um conjunto de dados é uma amostra de alguma população, tirada por algum processo, em algum momento. Um modelo treinado nele herda cada uma dessas três coisas. A pergunta que importa não é "este conjunto está limpo?" mas "a população de onde ele veio é a população em que meu modelo vai ser implantado?". Um benchmark que todo mundo usa não está isento — veja a auditoria de erros de rótulo em qualidade dos dados.
Pontos-chave
- Um modelo só sabe o que as linhas contam a ele. Cada decisão tomada antes do treino (o que coletar, manter, corrigir, normalizar, separar) decide o que ele é capaz de aprender.
- Nada que aprenda um número a partir dos dados pode ser ajustado antes da divisão. Uma mediana, um scaler, um vocabulário, uma escolha de colunas, um PCA: cada um é ajustado só nas linhas de treino, dentro de um
Pipeline. E é oPipelineque se valida cruzado. - Uma codificação afirma quais comparações fazem sentido. Códigos inteiros inventam uma ordem com distâncias; o one-hot recusa qualquer estrutura.
LabelEncodernuma feature de entrada nunca está certo. - Olhe as distribuições antes de transformar. Comparar média e mediana pega a maior parte da assimetria. Uma transformação não acrescenta informação: se as classes se sobrepõem em todas as features, nenhum modelo as separa. O conserto é uma feature melhor.
- A validação serve para toda escolha; o teste serve para um número, lido uma vez. Uma divisão única é uma loteria (que vale 15 pontos na página de divisão) e qualquer conjunto usado para escolher deixa de servir para medir.
- O vazamento faz ruído parecer sinal: um filtro de features rodado antes da divisão transformou ruído puro em 0,870 de acurácia. O vazamento de que todo mundo avisa (padronizar antes, +0,004 de AUC) é o mais barato; seleção, grupos e reamostragem antes da divisão custam muito mais. Uma pontuação boa demais é um incidente a investigar.
- Audite os dados, rótulos incluídos. O que um valor faltante significa depende de quem saiu, o teste de outlier usual falha quando os outliers são muitos e uma rede ajusta 40% de rótulos errados até uma pontuação de treino perfeita.
- Com desbalanceamento, mude primeiro o relatório e o corte: a acurácia e o ROC-AUC lisonjeiam uma classe rara. O limiar é onde os custos entram. Reamostre só dentro da dobra de treino.