Pré-processamento de Dados para Aprendizado de Máquina

Prof. Letícia Raposo

ROTEIRO Da EDA ao pré-processamento

  • Na aula anterior, a EDA revelou o que está errado ou precisa de atenção na base: tipos de variável, assimetria, dispersão, valores ausentes, outliers, cardinalidade.
  • O pré-processamento é a etapa em que essas informações viram ações concretas sobre os dados, antes de treinar qualquer modelo.

flowchart LR
    A["EDA<br/>diagnóstico"] --> B["Integração<br/>consolidar fontes"]
    B --> C["Eliminação manual<br/>e amostragem"]
    C --> D["Balanceamento<br/>e limpeza"]
    D --> E["Transformação<br/>dados prontos para o modelo"]
    style A fill:#8FB6D9,color:#12283F,stroke:#8FB6D9
    style E fill:#12283F,color:#ffffff,stroke:#12283F

INTRODUÇÃO Onde o pré-processamento entra no ciclo de ML

%%{init: {"themeVariables": {"fontSize": "18px"}, "flowchart": {"rankSpacing": 26, "nodeSpacing": 22, "padding": 8}}}%%
flowchart LR
    A["Problema<br/>de negócio"] --> B["Coleta<br/>de dados"]
    B --> C["EDA"]
    C --> D["Pré-processamento"]
    D --> E["Modelagem"]
    E --> F["Avaliação"]
    F --> G["Implantação"]
    F -.->|"revisar"| D
    style D fill:#12283F,color:#ffffff,stroke:#12283F
    style C fill:#8FB6D9,color:#12283F,stroke:#8FB6D9

  • É a etapa que costuma consumir a maior parte do tempo de um projeto de dados — e a que mais influencia a qualidade final do modelo.
  • É iterativa: uma avaliação ruim frequentemente aponta de volta para um problema de dados, não de algoritmo.
  • Deve ser reprodutível: um pipeline escrito em código, e não ajustes manuais na planilha.

INTEGRAÇÃO DE DADOS O que é integração de dados?

  • Combinar dados vindos de múltiplas fontes de forma consistente.
  • Cada fonte pode ter granularidade diferente (dados diários x mensais), unidades diferentes (kg x lb, R$ x US$) ou formatos diferentes para a mesma informação (datas, texto livre).
  • A chave de junção (ex.: CPF, ID de cliente, número de protocolo) precisa existir e ser confiável em todas as fontes envolvidas.

%%{init: {"flowchart": {"nodeSpacing": 6}}}%%
flowchart LR
    A["Sistema A<br/>vendas"] --> D["Chave de junção<br/>(ex.: CPF, ID cliente)"]
    B["Sistema B<br/>cadastro"] --> D
    C["Sistema C<br/>atendimento"] --> D
    D --> E["Base integrada"]
    style E fill:#12283F,color:#ffffff,stroke:#12283F

INTEGRAÇÃO DE DADOS Tipos de junção

  • Inner: só as chaves presentes nas duas fontes — quem falta em uma delas é perdido.
  • Left: preserva toda a base principal (A); onde não há correspondência em B, as colunas de B ficam ausentes.
  • Full: união completa das chaves — útil para auditar divergências entre fontes.

INTEGRAÇÃO DE DADOS Junção na prática: a chave importa

A — cadastro

cliente_id cidade
1 São Paulo
2 SP
2 SP
3 Recife

B — crédito

id_cliente renda
” cli1 ” 4.200
CLI2 3.100
CLI3 5.800
  1. Padronizar a chave nas duas fontes (formato, espaços, maiúsculas/minúsculas): sem isso, a junção encontra zero correspondências.
  2. Verificar a unicidade da chave em cada fonte: o cliente 2 aparece duas vezes em A.
  3. Juntar e conferir a contagem: 3 clientes viram 4 linhas — uma chave duplicada multiplica linhas na junção.

INTEGRAÇÃO DE DADOS Redundância e conflito de valores

  • Redundância de entidade: a mesma entidade aparece sob identificações diferentes em cada fonte (ex.: “SP”, “São Paulo” e “S.Paulo” como o mesmo estado).
  • Redundância de atributo: uma coluna pode ser derivável de outra já presente na base integrada (ex.: idade calculada a partir da data de nascimento) — atributos redundantes podem ser detectados por correlação (numéricas) ou pelo teste qui-quadrado (categóricas).
  • Conflito de valores: a mesma entidade tem valores diferentes para o mesmo atributo em fontes distintas (ex.: dois sistemas com endereços desatualizados de formas diferentes) — exige uma regra de resolução (fonte mais recente, fonte mais confiável, etc.).

INTEGRAÇÃO DE DADOS Detectando redundância de atributos

  • Renda, empréstimo e limite de crédito se movem juntos: carregam, em parte, a mesma informação.
  • Para categóricas, use o teste qui-quadrado de independência (ou V de Cramér).
  • Correlação alta não obriga a eliminar — mas exige uma decisão consciente: manter uma, combinar (PCA) ou usar modelos robustos à multicolinearidade.

INTEGRAÇÃO DE DADOS Como resolver um conflito de valores

%%{init: {"themeVariables": {"fontSize": "18px"}, "flowchart": {"rankSpacing": 26, "nodeSpacing": 22, "padding": 8}}}%%
flowchart LR
    A["Conflito:<br/>as fontes divergem"] --> B{"Existe data<br/>de atualização?"}
    B -->|sim| C["Usar o valor<br/>mais recente"]
    B -->|não| D{"Uma fonte é<br/>sabidamente mais<br/>confiável?"}
    D -->|sim| E["Priorizar a<br/>fonte confiável"]
    D -->|não| F["Marcar como conflito:<br/>revisar ou manter<br/>ambos com um indicador"]
    style A fill:#8FB6D9,color:#12283F,stroke:#8FB6D9
    style F fill:#12283F,color:#ffffff,stroke:#12283F

  • Registre qual regra foi aplicada: a decisão precisa ser rastreável e repetível quando novos dados chegarem.

INTEGRAÇÃO DE DADOS Como deduplicar

%%{init: {"themeVariables": {"fontSize": "18px"}, "flowchart": {"rankSpacing": 26, "nodeSpacing": 22, "padding": 8}}}%%
flowchart LR
    A["1. Padronizar<br/>caixa, espaços,<br/>acentos, formatos"] --> B["2. Agrupar candidatos<br/>(blocking): mesma<br/>cidade, mesmo ano"]
    B --> C["3. Comparar pares<br/>similaridade<br/>de texto"]
    C --> D["4. Decidir<br/>duplicata, distinto<br/>ou revisar"]
    D --> E["5. Fundir<br/>manter o registro<br/>mais completo"]
    style E fill:#12283F,color:#ffffff,stroke:#12283F

  • Exata: linhas idênticas em todas as colunas (ou na chave) — resolve-se em uma linha de código.
  • Aproximada: “Maria da Silva” e “Maria Silva” — usa medidas de similaridade (distância de edição/Levenshtein, similaridade de Jaccard sobre tokens).
  • Comparar todos os pares custa \(n(n-1)/2\) comparações — o agrupamento por candidatos (blocking) evita esse custo quadrático.

INTEGRAÇÃO DE DADOS Efeito da deduplicação na integração

Ao combinar três sistemas com clientes em comum, cerca de 14% dos registros eram duplicatas da mesma entidade sob identificações levemente diferentes.

ELIMINAÇÃO MANUAL O que eliminar manualmente, e por quê

  • Identificadores únicos (ID, CPF, número de protocolo): não carregam padrão generalizável — apenas identificam o registro.
  • Variáveis constantes ou quase constantes: o mesmo valor (ou quase) em praticamente todas as observações — não ajudam o modelo a diferenciar casos.
  • Vazamento de dados óbvio: colunas que só existiriam depois do evento a ser previsto (ex.: “data de alta” para prever internação).
  • Duplicatas exatas de outra coluna: mesma informação registrada em dois lugares com nomes diferentes.

Diferente da eliminação automática por métricas (VIF, importância de variáveis), a eliminação manual usa conhecimento de domínio — e deve ser sempre documentada e justificada.

ELIMINAÇÃO MANUAL Devo eliminar esta coluna?

%%{init: {"themeVariables": {"fontSize": "18px"}, "flowchart": {"rankSpacing": 26, "nodeSpacing": 22, "padding": 8}}}%%
flowchart LR
    A["Coluna<br/>candidata"] --> B("É só um<br/>identificador?")
    B -->|não| C("Constante ou<br/>quase constante?")
    C -->|não| D("Só existe depois<br/>do alvo?")
    D -->|não| E("Duplica<br/>outra coluna?")
    E -->|não| K["Manter"]
    B -->|sim| X["Eliminar<br/>e documentar"]
    C -->|sim| X
    D -->|sim| X
    E -->|sim| X
    style A fill:#8FB6D9,color:#12283F,stroke:#8FB6D9
    style X fill:#12283F,color:#ffffff,stroke:#12283F

  • Os quatro critérios usam conhecimento do problema, não uma métrica calculada — por isso a decisão é manual.

ELIMINAÇÃO MANUAL Variáveis constantes e quase constantes

Variável Valor mais frequente Frequência Decisão
pais “Brasil” 100% eliminar (constante)
moeda “BRL” 99,8% eliminar (quase constante)
tipo_conta “corrente” 92% manter — ainda discrimina 8% dos casos
escolaridade “Médio” 45% manter
  • Uma variável com um único valor tem variância zero: não pode explicar nenhuma diferença entre casos.
  • Quase constante não é o mesmo que irrelevante: uma variável rara pode ser justamente o sinal (ex.: 0,2% de casos de fraude).
  • Verifique a relação com o alvo antes de descartar uma variável quase constante.

ELIMINAÇÃO MANUAL Vazamento de dados: o que o modelo pode “saber”

  • Vazamento é usar, no treino, informação que não estaria disponível quando o modelo for usado de verdade.
  • O resultado é enganoso: métricas excelentes na validação e desempenho ruim em produção.

ELIMINAÇÃO MANUAL Eliminação de colunas e de registros

  • Colunas: IDs, constantes, redundantes ou com vazamento evidente saem antes mesmo da modelagem.
  • Registros (linhas): casos claramente corrompidos (ex.: idade = 999, data inválida) ou comprovadamente erros de digitação — não outliers legítimos — podem ser removidos após investigação.
  • Remover um registro é diferente de remover um outlier legítimo: o primeiro corrige um erro; o segundo descarta informação real sobre a variabilidade dos dados.

AMOSTRAGEM Tipos de amostragem

  • Amostragem aleatória simples: cada observação tem a mesma probabilidade de ser selecionada.
  • Amostragem estratificada: a população é dividida em estratos (ex.: classes do alvo) e a amostra preserva a proporção de cada estrato.
  • Amostragem sistemática: seleciona a cada \(k\)-ésimo elemento de uma lista ordenada.
  • Amostragem por conglomerados: seleciona grupos inteiros (ex.: hospitais, turmas) em vez de indivíduos — útil quando os dados já estão naturalmente agrupados.

Conexão com ML

Separar treino, validação e teste (holdout) é, na prática, um problema de amostragem. A validação cruzada (k-fold cross-validation) é uma forma sistemática de reamostrar os dados várias vezes para estimar o desempenho do modelo com mais robustez.

AMOSTRAGEM Os quatro esquemas, lado a lado

  • Pontos escuros: elementos selecionados (cerca de 10% da população de 100 elementos).
  • Linhas tracejadas: os estratos (2º painel) e os conglomerados — aqui, 10 blocos, dos quais 1 foi sorteado (4º painel).
  • Na sistemática, a lista é percorrida de 9 em 9 a partir de um início aleatório — cuidado se a lista tiver periodicidade.

AMOSTRAGEM Holdout e validação cruzada

  • Holdout: uma única divisão. Simples e rápida, mas o resultado depende de qual divisão saiu no sorteio.
  • k-fold: cada parte serve uma vez de validação; o desempenho é a média das \(k\) rodadas — estimativa mais estável, ao custo de treinar \(k\) modelos.

AMOSTRAGEM Amostragem

  • O tamanho da amostra é um equilíbrio entre custo computacional e variância da estimativa — curvas de aprendizado (learning curves) ajudam a avaliar se mais dados melhorariam o modelo.
  • Amostrar sem estratificar uma base já desbalanceada pode, por acaso, eliminar quase todos os exemplos da classe minoritária do conjunto de treino.

AMOSTRAGEM Por que estratificar: uma simulação

Numa base com 1% de fraudes, uma amostra aleatória simples de 200 registros não tem nenhuma fraude em cerca de 14% das vezes — e, quando tem, o número oscila bastante. A amostragem estratificada garante a proporção.

DADOS DESBALANCEADOS O problema do desbalanceamento

  • Ocorre quando uma classe é muito mais frequente que outra(s) em um problema de classificação (ex.: fraude ≈ 1%, inadimplência ≈ 5%, doença rara ≈ 2%).
  • Um modelo pode atingir acurácia altíssima apenas prevendo sempre a classe majoritária — sem aprender nada útil sobre a classe minoritária, que costuma ser a mais importante de detectar.
  • O desbalanceamento é uma consequência direta de como a amostragem (bloco anterior) captura — ou não — a proporção real das classes.

Conexão com ML

Em problemas desbalanceados, acurácia é uma métrica enganosa. Precisão, recall, F1-score e AUC-PR (área sob a curva precisão-recall) refletem melhor o desempenho na classe minoritária do que acurácia ou mesmo AUC-ROC.

DADOS DESBALANCEADOS Acurácia enganosa: um modelo que nunca acerta

Modelo “ingênuo”: sempre prevê “saudável”.

Previsto: doente Previsto: saudável
Real: doente 0 20
Real: saudável 0 980
  • Acurácia = \(980/1000\) = 98%
  • Recall dos doentes = \(0/20\) = 0%

DADOS DESBALANCEADOS Métricas que enxergam a classe minoritária

Um modelo real, na mesma base de 1.000 pacientes: detecta 15 dos 20 doentes e faz 30 alarmes falsos.

Prev.: doente Prev.: saudável
Real: doente VP = 15 FN = 5
Real: saudável FP = 30 VN = 950
Métrica Fórmula Valor
Acurácia \(\dfrac{VP+VN}{ ext{total}}\) 96,5%
Precisão \(\dfrac{VP}{VP+FP}\) 33,3%
Recall \(\dfrac{VP}{VP+FN}\) 75,0%
F1-score \(\dfrac{2 \cdot ext{prec.} \cdot ext{recall}}{ ext{prec.} + ext{recall}}\) 46,2%

A acurácia caiu (98% → 96,5%), mas este modelo é muito mais útil do que o ingênuo: ele encontra 75% dos doentes.

DADOS DESBALANCEADOS Técnicas de balanceamento

  • Undersampling: reduz a classe majoritária — rápido, mas descarta informação.
  • Oversampling: duplica exemplos da classe minoritária — simples, mas pode gerar overfitting nesses exemplos repetidos.
  • SMOTE (Synthetic Minority Oversampling Technique): cria exemplos sintéticos da classe minoritária por interpolação entre vizinhos próximos, em vez de duplicar.
  • Ajuste de peso de classe (class weight): penaliza mais o erro na classe minoritária durante o treino, sem alterar os dados.
  • O balanceamento (undersampling, oversampling, SMOTE) deve ser aplicado apenas ao conjunto de treino, depois do split — balancear antes do split é uma forma de vazamento de dados, pois o conjunto de teste deixa de refletir a distribuição real do problema.

DADOS DESBALANCEADOS Como cada técnica altera os dados

Maioria em azul-claro, minoria em azul-escuro; triângulos = exemplos sintéticos. No oversampling, pontos maiores indicam cópias repetidas do mesmo exemplo.

DADOS DESBALANCEADOS SMOTE: interpolando entre vizinhos

Para cada exemplo \(x_i\) da minoria:

  1. escolhe um dos seus \(k\) vizinhos mais próximos, \(x_{viz}\);
  2. sorteia \(\lambda \in [0, 1]\);
  3. cria o ponto sintético

\[x_{novo} = x_i + \lambda\,(x_{viz} - x_i)\]

O novo ponto fica sobre o segmento que liga os dois — em vez de repetir um ponto existente, preenche a região da minoria.

DADOS DESBALANCEADOS Balancear antes ou depois do split?

✗ Errado: vazamento

%%{init: {"themeVariables": {"fontSize": "18px"}, "flowchart": {"rankSpacing": 26, "nodeSpacing": 22, "padding": 8}}}%%
flowchart TD
    A["Base completa"] --> B["Balancear (SMOTE)"]
    B --> C["Split treino / teste"]
    C --> D["Teste contém dados<br/>sintéticos derivados<br/>do treino"]

✓ Certo

%%{init: {"themeVariables": {"fontSize": "18px"}, "flowchart": {"rankSpacing": 26, "nodeSpacing": 22, "padding": 8}}}%%
flowchart TD
    A["Base completa"] --> B["Split estratificado"]
    B --> C["Treino"]
    B --> T["Teste intacto<br/>(distribuição real)"]
    C --> D["Balancear só o treino"]
    style T fill:#12283F,color:#ffffff,stroke:#12283F

  • O teste deve refletir os dados como serão encontrados na prática: se for balanceado, a métrica deixa de representar o problema real.

LIMPEZA DE DADOS O que é limpeza de dados?

  • Duplicatas: registros repetidos, exatos ou quase exatos, que inflam artificialmente o tamanho da base.
  • Inconsistências de formato: datas em formatos diferentes, texto com capitalização inconsistente, unidades de medida misturadas.
  • Valores fora do domínio válido: idade negativa, porcentagem acima de 100%, data de nascimento posterior à data de admissão.
  • Valores ausentes: identificar, entender o mecanismo (MCAR/MAR/MNAR) e decidir a estratégia de imputação.

Conexão com ML

“Garbage in, garbage out”: nenhum algoritmo, por mais sofisticado, corrige um problema sistemático de qualidade de dados. Limpeza malfeita se propaga como viés silencioso em qualquer modelo treinado sobre a base.

LIMPEZA DE DADOS Inconsistências de formato: antes e depois

Problema Antes Depois
Capitalização e espaços ” cli12 “,”CLI12” “CLI12”
Grafias da mesma categoria “SP”, “sao paulo”, “S. Paulo” “São Paulo”
Formatos de data “2024-03-05”, “05/03/2024”, “03-05-2024” 2024-03-05
Unidades misturadas “70 kg”, “154 lb” 70,0 (kg)
Separador decimal “1.234,56” e “1234.56” 1234,56
  • Ambiguidade de datas: “03-05-2024” é 3 de maio ou 5 de março? Sem uma regra da fonte, não há como saber — descubra o formato por sistema de origem, e não linha a linha.
  • Padronize com regras explícitas e guarde o valor original em uma coluna à parte, para auditar.

LIMPEZA DE DADOS Valores fora do domínio válido

Toda variável tem um domínio: regras simples de validação encontram muitos erros.

Regra de validação Exemplo de violação
\(0 \le \text{idade} \le 120\) idade = 999 ou −3
\(0 \le \text{porcentagem} \le 100\) taxa de desconto = 150%
data de nascimento < data de admissão nascido em 2099
valor de compra > 0 valor = −250
categoria ∈ lista de valores permitidos sexo = “X1”
  • Um valor fora do domínio é erro, não outlier: pode ser corrigido na fonte ou tratado como ausente.
  • Automatize as regras: elas devem rodar toda vez que chegarem dados novos.

LIMPEZA DE DADOS Valores ausentes: por que faltam?

Mecanismo Definição Exemplo Consequência
MCAR (completamente aleatório) A ausência não depende de nenhuma variável Sensor que falha ao acaso Menos dados, mas sem viés
MAR (aleatório condicional) Depende de outras variáveis observadas Score ausente com mais frequência entre clientes jovens Viés corrigível usando as outras variáveis
MNAR (não aleatório) Depende do próprio valor ausente Rendas altas deixam de ser declaradas Viés difícil de corrigir; a ausência em si é informação
  • O mecanismo não é observável direto nos dados: é uma hipótese, apoiada pelo conhecimento do domínio.
  • A decisão de tratamento depende dele: ignorar a ausência só é inofensivo no caso MCAR.

LIMPEZA DE DADOS Estratégias para valores ausentes

%%{init: {"themeVariables": {"fontSize": "18px"}, "flowchart": {"rankSpacing": 26, "nodeSpacing": 22, "padding": 8}}}%%
flowchart LR
    A["Valor ausente"] --> B{"Coluna quase<br/>toda ausente?"}
    B -->|sim| C["Considerar<br/>eliminar a coluna"]
    B -->|não| D{"Poucas linhas<br/>e MCAR?"}
    D -->|sim| E["Remover<br/>as linhas"]
    D -->|não| G["Imputar + criar<br/>indicador de ausência"]
    style A fill:#8FB6D9,color:#12283F,stroke:#8FB6D9
    style G fill:#12283F,color:#ffffff,stroke:#12283F

  • Um indicador de ausência (coluna 0/1) preserva a informação de que o valor faltava — útil principalmente em MAR e MNAR.
  • Estatísticas de imputação (média, mediana, moda) devem ser calculadas só no treino.

LIMPEZA DE DADOS O custo da imputação pela média

Os pontos imputados (triângulos) caem todos sobre a linha da média: a imputação simples encolhe a variância e enfraquece a relação entre as variáveis. Métodos condicionais (regressão, kNN, imputação múltipla) preservam melhor essa estrutura.

LIMPEZA DE DADOS Outlier: erro ou informação?

%%{init: {"themeVariables": {"fontSize": "18px"}, "flowchart": {"rankSpacing": 26, "nodeSpacing": 22, "padding": 8}}}%%
flowchart LR
    A["Valor<br/>extremo"] --> B{"Impossível<br/>no domínio?"}
    B -->|"sim: erro"| C["Corrigir na fonte<br/>ou tratar como ausente"]
    B -->|não| D{"Cauda legítima<br/>da distribuição?"}
    D -->|sim| E["Manter; usar log,<br/>RobustScaler ou<br/>modelos robustos"]
    D -->|incerto| F["Investigar com<br/>especialista e comparar<br/>o modelo com e sem"]
    style A fill:#8FB6D9,color:#12283F,stroke:#8FB6D9

  • Uma renda 1.000 vezes maior que a de todos os demais é provavelmente erro de digitação; uma renda 10 vezes maior pode ser um cliente real.
  • Em variáveis assimétricas (renda, preços), a regra do IQR marca como outlier muitos valores legítimos — prefira critérios ajustados ao domínio, ou aplique o critério após uma transformação logarítmica.

TRANSFORMAÇÃO DE DADOS Visão geral da transformação de dados

  • Escalonamento (padronização, normalização, RobustScaler) e transformação de forma (log, Box-Cox) já foram vistos na aula anterior — seguem sendo parte central da transformação.
  • Discretização: converter uma variável contínua em categorias (faixas etárias, faixas de renda).
  • Binarização: converter uma variável em indicador 0/1 a partir de um limiar (ex.: “atrasou o pagamento” a partir de dias de atraso).
  • Criação de variáveis derivadas (feature engineering): razões, interações entre variáveis, extração de dia da semana/mês a partir de datas.
  • Redução de dimensionalidade: combinar várias variáveis correlacionadas em poucos componentes (ex.: PCA).

TRANSFORMAÇÃO DE DADOS Por que escalonar, de novo: distâncias

Algoritmos baseados em distância (kNN, k-means, SVM) somam diferenças de todas as variáveis — quem tem unidade maior domina.

Cliente Idade (anos) Renda (R$)
A 30 5.000
B 60 5.500
C 31 8.000
Dist. euclidiana sem escalonar Dist. padronizada (z-score)
A–B (30 anos de diferença) 500,9 3,01
A–C (1 ano de diferença) 3.000,0 1,67
Mais próximo de A B C

Padronização com \(z = (x - \mu)/\sigma\), usando \(\mu_{idade}=40\), \(\sigma_{idade}=10\), \(\mu_{renda}=6.000\), \(\sigma_{renda}=1.800\). Sem escalonar, a renda decide tudo e a idade é ignorada.

TRANSFORMAÇÃO DE DADOS Codificação de variáveis categóricas

%%{init: {"themeVariables": {"fontSize": "18px"}, "flowchart": {"rankSpacing": 26, "nodeSpacing": 22, "padding": 8}}}%%
flowchart LR
    A["Variável<br/>categórica"] --> B{"Tem ordem<br/>natural?"}
    B -->|sim| C["Codificação ordinal<br/>Fundamental=1, Médio=2,<br/>Superior=3"]
    B -->|não| D{"Muitas<br/>categorias?"}
    D -->|não| E["One-hot<br/>uma coluna 0/1<br/>por categoria"]
    D -->|sim| F["Frequência, alvo ou<br/>hashing; agrupar raras<br/>em 'Outras'"]
    style A fill:#8FB6D9,color:#12283F,stroke:#8FB6D9

cidade cidade_SP cidade_RJ cidade_REC
São Paulo 1 0 0
Recife 0 0 1
  • Numerar cidades (1, 2, 3) inventa uma ordem que não existe: Recife passaria a ser “maior” que São Paulo.

TRANSFORMAÇÃO DE DADOS Discretização: como escolher as faixas

  • Larguras iguais: fácil de interpretar, mas em variáveis assimétricas concentra quase todos os casos nas primeiras faixas.
  • Frequências iguais (quantis): faixas com o mesmo número de casos — mais informativas, com cortes menos “redondos”.
  • Por conhecimento de domínio: faixas com significado (ex.: até 25, 26–40, 41–60, 60+).

TRANSFORMAÇÃO DE DADOS Discretização de uma variável contínua

Discretizar facilita a interpretação (ex.: em relatórios) e pode ajudar modelos lineares a capturar relações não lineares — mas descarta informação e introduz fronteiras arbitrárias entre faixas.

TRANSFORMAÇÃO DE DADOS Binarização

Converte uma variável em um indicador a partir de um limiar \(\tau\):

\[b(x) = \begin{cases} 1, & x > \tau \\ 0, & x \le \tau \end{cases}\]

dias_atraso atrasou (\(\tau = 0\)) valor_compra compra_alta (\(\tau = 500\))
0 0 120 0
3 1 500 0
45 1 1.800 1
  • Útil quando estar acima ou abaixo do limiar importa mais do que a magnitude (0 dias de atraso x qualquer atraso).
  • Também usada para transformar contagens em presença/ausência (ex.: “comprou ou não comprou”).
  • O limiar deve vir do domínio do problema ou ser escolhido apenas com dados de treino.

TRANSFORMAÇÃO DE DADOS Criação de variáveis derivadas

Dado de origem Variável derivada Por que ajuda
data de nascimento e data de referência idade O modelo usa um número comparável entre pessoas
valor do empréstimo e renda comprometimento = valor / renda A razão resume o risco melhor do que cada valor isolado
data da transação dia da semana, mês, fim de semana Captura sazonalidade e hábitos
várias transações por cliente contagem, soma, média, última compra Agrega dados de granularidade mais fina (junção 1:N)
duas variáveis \(x_1, x_2\) interação \(x_1 \cdot x_2\) Permite efeitos combinados em modelos lineares
  • É a etapa em que o conhecimento de domínio mais melhora um modelo — frequentemente mais do que trocar de algoritmo.
  • Cuidado: variáveis derivadas de informação futura são vazamento.

TRANSFORMAÇÃO DE DADOS Variáveis cíclicas: o mês não é uma reta

Dezembro (12) e janeiro (1) são meses vizinhos, mas na escala 1 a 12 estão a 11 unidades de distância.

Solução: representar o mês \(m\) como um ponto no círculo,

\[x = \sin\!\left(\tfrac{2\pi m}{12}\right), \quad y = \cos\!\left(\tfrac{2\pi m}{12}\right)\]

Agora dezembro e janeiro ficam a \(2\sin(\pi/12) \approx 0{,}52\) um do outro. Vale também para hora do dia, dia da semana e ângulos.

TRANSFORMAÇÃO DE DADOS Redução de dimensionalidade com PCA

  • O PCA combina variáveis correlacionadas em componentes ortogonais, ordenados pela variância que explicam — reduz dimensionalidade preservando o máximo de informação possível.
  • Como o PCA se baseia em variância, as variáveis devem estar na mesma escala antes de aplicá-lo.
  • Os componentes resultantes são combinações lineares das variáveis originais e perdem a interpretabilidade direta de cada atributo.

TRANSFORMAÇÃO DE DADOS PCA: a intuição geométrica e quantos componentes manter

  • Escolha o número de componentes pela variância acumulada desejada (ex.: 90%) ou pelo “cotovelo” da curva.
  • Os componentes são ajustados no treino e apenas aplicados ao teste.

PIPELINE E VAZAMENTO Ajustar no treino, aplicar no treino e no teste

Etapa O que é “aprendido” Ajustar (fit) em Aplicar (transform) em
Imputação média, mediana ou moda treino treino e teste
Escalonamento \(\mu\) e \(\sigma\) (ou mín. e máx.) treino treino e teste
Codificação categorias e, se usado, o alvo treino treino e teste
PCA componentes principais treino treino e teste
Balanceamento — — somente treino
Regras de domínio — — treino e teste
  • O teste simula dados novos: nada dele pode influenciar os parâmetros do pré-processamento.
  • Em código, isso significa usar um pipeline (ex.: Pipeline do scikit-learn, recipes do R) e não transformar a base inteira de uma vez.

SÍNTESE

%%{init: {"flowchart": {"nodeSpacing": 10}}}%%
flowchart LR
    A["Integração"] --> A2["Consolidar múltiplas fontes<br/> em uma base única"]
    B["Eliminação manual"] --> B2["Remover IDs, constantes e<br/> vazamento óbvio"]
    C["Amostragem"] --> C2["Reduzir custo preservando<br/> representatividade"]
    D["Desbalanceamento"] --> D2["Balancear classes ou ajustar<br/> métricas e pesos"]
    E["Limpeza"] --> E2["Corrigir duplicatas, formatos<br/> e inconsistências"]
    F["Transformação"] --> F2["Discretizar, reduzir dimensão,<br/> criar features"]

CHECKLIST Checklist de pré-processamento

Pergunta Etapa
As fontes têm chave confiável e granularidade compatível? A contagem de linhas faz sentido após a junção? Integração
Há colunas de identificação, constantes ou com vazamento? Eliminação manual
A amostra representa a população e as proporções das classes? Amostragem
A classe de interesse é rara? Estou usando métricas adequadas? Desbalanceamento
Há duplicatas, formatos mistos, valores fora do domínio ou ausentes? Limpeza
Escala, forma, categorias e dimensão estão adequadas ao algoritmo? Transformação
Tudo o que aprende com os dados foi ajustado só no treino? Pipeline

Conclusões

O pré-processamento transforma o diagnóstico da EDA em uma base pronta para o modelo

  • Integração e limpeza garantem que a base seja consistente e confiável antes de qualquer outra etapa.
  • Eliminação manual e amostragem definem quais dados — colunas, linhas, e quantos registros — entram no pipeline.
  • Balanceamento e transformação ajustam como esses dados são apresentados ao modelo.
  • Cada técnica tem um custo: eliminar descarta informação, amostrar introduz variância, balancear artificialmente pode distorcer a distribuição real, discretizar e reduzir dimensão perdem granularidade.
  • Toda decisão de pré-processamento deve ser aplicada de forma consistente ao treino e ao teste — e, quando envolve estatísticas dos dados (médias, escalas, componentes de PCA), ajustada apenas no treino, para evitar vazamento de dados.

Referências

  • HAN, J.; KAMBER, M.; PEI, J. Data Mining: Concepts and Techniques. 3. ed. Morgan Kaufmann, 2011.
  • KUHN, M.; JOHNSON, K. Feature Engineering and Selection: A Practical Approach for Predictive Models. CRC Press, 2019.
  • WICKHAM, H.; GROLEMUND, G. R for Data Science. 2. ed. O’Reilly, 2023.
  • JAMES, G.; WITTEN, D.; HASTIE, T.; TIBSHIRANI, R. An Introduction to Statistical Learning. 2. ed. Springer, 2021.