Dados: o Combustível da IA
- ⬜🤖 O que é Inteligência Artificial?(Fundamentos da IA)
Recomendamos completar os pré-requisitos antes de seguir, mas nada te impede de continuar.
“Dados são o novo petróleo” — mas petróleo bruto não move carro. Precisa ser extraído, refinado e distribuído. Com dados é igual: a qualidade, o balanceamento e a forma como você divide o dataset determinam se o modelo vai aprender de verdade ou decorar lixo. Neste artigo, você vai entender o pipeline de dados que sustenta toda IA moderna — da coleta ao train/val/test split, passando por data leakage, class imbalance e augmentation.
O que são dados de treinamento
Para aprender, um modelo precisa de exemplos. Cada exemplo é um par: uma entrada e uma saída esperada (no caso supervisionado), ou simplesmente uma amostra da distribuição que queremos modelar (não-supervisionado).
| Tipo de tarefa | Input | Label (saída) | Dataset famoso |
|---|---|---|---|
| Classificação de imagem | Foto 224×224 pixels | "gato", "cachorro", "carro" | ImageNet (14M imagens, 21k classes) |
| Tradução | "Que horas são?" (pt-BR) | "What time is it?" (en) | WMT (milhões de pares paralelos) |
| LLM (pré-treino) | Sequência de tokens | Próximo token | Common Crawl (~15T tokens) |
| Detecção de fraude | Transação bancária (features) | "fraude" ou "legítima" | Proprietário (bancos não compartilham) |
| Speech-to-text | Áudio em chunks | Transcrição texto | LibriSpeech (960h de áudio) |
Note que para LLMs, os dados não são rotulados por humanos — o label é simplesmente o próximo token no texto original. Isso é o que tornou o pré-treino em escala possível: a internet é um dataset auto-rotulado de trilhões de exemplos.
Qualidade vs Quantidade: os 5 pilares
A intuição “mais dados = melhor modelo” é parcialmente verdade, mas dados ruins em escala ensinam coisas erradas em escala. O modelo aprende exatamente o que está nos dados — incluindo vieses, erros e inconsistências.
Train / Validation / Test: a divisão sagrada
Treinar e avaliar nos mesmos dados é como dar a prova pro aluno estudar. Ele vai se sair bem, mas não aprendeu de verdade. A solução é dividir o dataset em três partes com papéis distintos:
Data Leakage: o assassino silencioso
Data leakage acontece quando o modelo tem acesso, direto ou indireto, a informação que não teria em produção. As métricas ficam excelentes no lab e o modelo quebra no mundo real — às vezes sem nenhum aviso.
| Tipo de leakage | Exemplo concreto | Como prevenir |
|---|---|---|
| Target leakage | "Data do diagnóstico" como feature para prever "tem doença?" — a data já pressupõe o diagnóstico | Analisar correlação feature-target; remover features que revelam a resposta |
| Train-test contamination | Mesmo paciente aparece no train e no test — o modelo aprendeu aquele indivíduo | Group split: garantir que a mesma unidade (paciente, sessão) não cruza conjuntos |
| Temporal leakage | Usar dados de julho para prever o que aconteceu em junho | Time-based split: train em dados mais antigos, test em dados mais recentes |
| Preprocessing leakage | StandardScaler.fit() em todo o dataset antes do split | Fit apenas no train; transform nos demais com os mesmos parâmetros |
# ❌ ERRADO — leakage: fit no dataset inteiro from sklearn.preprocessing import StandardScaler scaler = StandardScaler() X_scaled = scaler.fit_transform(X) # inclui test set! X_train, X_test = train_test_split(X_scaled) # ✅ CORRETO — fit apenas no train X_train, X_test, y_train, y_test = train_test_split(X, y) scaler = StandardScaler() X_train = scaler.fit_transform(X_train) # aprende stats do train X_test = scaler.transform(X_test) # aplica as mesmas stats
O erro de preprocessing leakage é tão comum que frameworks modernos como scikit-learn tem o Pipeline exatamente para forçar o fit/transform correto durante cross-validation.
Class Imbalance: quando 99% não significa nada
Detecção de fraude: 99.9% das transações são legítimas. Se o modelo prevê “legítima” para tudo, acerta 99.9%. Mas erra 100% das fraudes — exatamente o que deveria detectar. Isso é class imbalance e é um dos problemas mais comuns em ML de produção.
| Técnica | Como funciona | Quando usar |
|---|---|---|
| Class weights | Aumenta o peso da loss para a classe rara — o modelo é "punido mais" por errar a minoria | Imbalance moderado (1–10%); mais simples |
| Oversampling (SMOTE) | Gera exemplos sintéticos da classe minoritária interpolando vizinhos reais | Tabular data com poucos exemplos da classe rara |
| Undersampling | Remove exemplos da classe majoritária aleatoriamente | Dataset enorme onde perder dados não prejudica |
| Focal Loss | Reduz loss de exemplos fáceis, foca nos difíceis | Imbalance extremo; usado no RetinaNet (object detection) |
| Métricas corretas | F1, precision, recall, AUROC em vez de accuracy | SEMPRE — accuracy mascara imbalance |
📋 Dataset com 5% da classe positiva — qual técnica?
Mais simples de implementar, não altera o dataset, e funciona bem para imbalance moderado (1–10%). Para imbalance extremo (0.1%), combinar com SMOTE para gerar mais exemplos da classe rara.
Alt: SMOTE — Quando a classe rara tem poucos exemplos e você precisa gerar mais para o modelo aprender a fronteira de decisão.
Alt: Focal Loss — Para imbalance extremo em imagens/object detection onde SMOTE não se aplica.
Data Augmentation: criar dados a partir de dados
Quando dados reais são escassos ou caros, podemos gerar variações dos dados existentes sem mudar o significado. Uma foto de gato rotacionada 15° ainda é um gato — mas agora é um novo exemplo de treino.
| Domínio | Técnicas | Exemplo concreto |
|---|---|---|
| Imagens | Flip, rotação, crop, color jitter, mixup, cutout, CutMix | Foto de gato flipada horizontalmente ainda é gato; mixup combina 2 imagens com label misto |
| Texto | Back-translation, sinônimos, paráfrase via LLM, word dropout | "O cão é grande" → inglês → "The dog is big" → pt-BR → "O cachorro é grande" |
| Áudio | Time stretch, pitch shift, adição de ruído de fundo, reverb | Voz com eco de ambiente ainda é a mesma frase |
| Tabular | SMOTE, noise injection, feature crossover, Gaussian noise | Transação de fraude com valor ±2% ainda é fraude |
De onde vêm os dados dos LLMs
O pipeline de dados de um LLM moderno começa com coleta bruta em escala de terabytes e termina em um dataset curado de alta qualidade — o que sobra depois de filtrar o lixo:
| Fonte | Volume estimado | Prós | Contras |
|---|---|---|---|
| Common Crawl | ~15T tokens brutos → ~2T após filtro | Enorme, diverso, gratuito | Muito ruído, spam, duplicatas, vieses de quem escreve na web |
| Wikipedia | ~4B tokens (en) | Alta qualidade, factual, estruturado | Viés enciclopédico; pouca linguagem informal |
| GitHub | ~1T tokens de código | Código real, multilinguagem, comentários | Muitos repos abandonados; código de má qualidade |
| Livros | Milhões de livros | Prosa longa e bem escrita; raciocínio elaborado | Copyright questionável (NYT vs OpenAI, Authors Guild) |
| Dados sintéticos | Ilimitado em teoria | Curadoria controlável; útil para nichos | Risco de model collapse em gerações subsequentes |
Feature engineering: preparando os dados para o modelo
Dados brutos raramente entram direto no modelo. Precisam ser transformados em features — representações numéricas que o modelo consegue processar:
| Transformação | O que faz | Quando usar |
|---|---|---|
| Normalização (min-max) | Escala valores para [0, 1]: (x - min) / (max - min) | Features com ranges muito diferentes (ex: idade vs salário) |
| Padronização (z-score) | Transforma para média=0, std=1: (x - μ) / σ | Quando a distribuição importa (regressão, SVM, PCA) |
| One-hot encoding | Categoria → vetor binário: "gato" → [1,0,0], "cão" → [0,1,0] | Features categóricas com baixa cardinalidade (<50 categorias) |
| Tokenização | Texto → sequência de IDs inteiros via BPE/WordPiece | Qualquer input textual para Transformers e LLMs |
| Embedding lookup | ID inteiro → vetor denso de dimensão d (aprendido no treino) | Alta cardinalidade (cidades, produtos, usuários) |
Perguntas e respostas
❓ Se dados sintéticos são baratos, por que não usar só eles?
❓ Cross-validation substitui o test set?
❓ Quanto dado preciso para treinar um modelo bom?
❓ O que é dataset shift e por que minha performance cai em produção?
Quiz rápido
4 perguntas · Acerte tudo e ganhe o badge 🎯 Gabarito