Ir para o conteúdo

Overview

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.


A ordem das operações

flowchart LR
    A["coletar"] --> B["explorar"]
    B --> C["limpar<br/><small>correções linha a linha</small>"]
    C --> D["DIVIDIR"]
    D --> E["ajustar transformadores<br/><small>só no treino</small>"]
    E --> F["treinar"]
    F --> G["avaliar<br/><small>uma vez</small>"]

    style D fill:#f0883e,stroke:#f0883e,color:#0d1117
    style G fill:#7fad7f,stroke:#3fb950

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.

    Tipos de features

  • 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.

    Distribuições

  • 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.

    Divisão

  • 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.

    Vazamento

  • 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.

    Qualidade

  • 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.

    Desbalanceamento

  • 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.

    Pré-processamento

  • 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.

    Handouts


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
Papers With Code benchmarks de pesquisa, com placares vários
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.