Codificação do alvo e tratamento avançado de dados categóricos
Codificação do alvo, codificação por frequência, codificação binária e embeddings para colunas de alta cardinalidade.
Codificação do alvo e tratamento avançado de dados categóricos é uma aula grátis de Learn AI with Python no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Learn AI with Python, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Learn AI with Python inclui 4 aulas no total.
O problema da codificação categórica
Os modelos precisam de números, mas as categorias são texto. A codificação por indicadores funciona para poucas categorias, mas atributos de alta cardinalidade (milhares de cidades, produtos) criam colunas demais.
Limitações da codificação por indicadores e por rótulos
A codificação por indicadores faz a dimensionalidade explodir. A codificação simples por rótulos inventa uma ordenação falsa (a cidade 5 não é maior que a cidade 2). Para dados de alta cardinalidade, precisamos de codificações mais inteligentes.
O que é a codificação pelo alvo
A codificação pelo alvo substitui cada categoria pela média do alvo correspondente àquela categoria. Uma cidade se torna a taxa média de cancelamento dos clientes daquela cidade, um único número informativo.
import pandas as pd
means = df.groupby("city")["target"].mean()
df["city_encoded"] = df["city"].map(means)O perigo do sobreajuste
Categorias raras com poucas linhas obtêm médias extremas que vazam o alvo e causam sobreajuste. Uma categoria observada uma única vez copiaria exatamente aquele único rótulo. Corrigimos isso com suavização.
Suavizando a estimativa
Suavização combina a média da categoria com a média global, ponderando-as pela quantidade de amostras da categoria. Categorias raras tendem à média global, reduzindo a variância.
import pandas as pd
global_mean = df["target"].mean()
agg = df.groupby("city")["target"].agg(["mean", "count"])
smoothing = 10
agg["enc"] = (agg["count"] * agg["mean"] + smoothing * global_mean) / (agg["count"] + smoothing)
df["city_enc"] = df["city"].map(agg["enc"])A biblioteca category_encoders
O pacote category_encoders implementa esses codificadores com uma API do scikit-learn, para que se encaixem em fluxos de processamento e sejam aplicados de forma consistente aos conjuntos de treinamento e teste.
import category_encoders as ce
encoder = ce.TargetEncoder(cols=["city", "product"], smoothing=10)
X_enc = encoder.fit_transform(X_train, y_train)
X_test_enc = encoder.transform(X_test)Evitando vazamento na prática
Sempre faça fit do codificador apenas com os dados de treinamento e depois aplique transform à validação/teste. Melhor ainda: use validação cruzada ou codificação fora da dobra, para que cada linha seja codificada com dados que não a incluam.
import category_encoders as ce
from sklearn.pipeline import make_pipeline
from sklearn.linear_model import LogisticRegression
pipe = make_pipeline(
ce.TargetEncoder(cols=["city"]),
LogisticRegression(),
)
# fit inside CV to encode without leakageCodificação binária
BinaryEncoder converte categorias em dígitos binários, usando apenas log2(N) colunas em vez de N. É uma solução intermediária e compacta entre a codificação one-hot e a codificação do alvo.
import category_encoders as ce
encoder = ce.BinaryEncoder(cols=["product_id"])
X_enc = encoder.fit_transform(X_train)
# 256 categories -> 8 binary columnsOutros codificadores úteis
category_encoders também oferece CountEncoder (frequência de cada categoria), LeaveOneOutEncoder (média do alvo excluindo a linha atual) e CatBoostEncoder (estatísticas ordenadas do alvo).
import category_encoders as ce
count_enc = ce.CountEncoder(cols=["city"])
loo_enc = ce.LeaveOneOutEncoder(cols=["city"])Lidando com alta cardinalidade
Para cardinalidade muito alta: a codificação do alvo/contagem comprime os dados em uma coluna, a codificação binária permanece compacta e agrupar categorias raras em um grupo "outro" reduz o ruído. Escolha com base na cardinalidade e no risco de vazamento.
import pandas as pd
freq = df["product"].value_counts()
rare = freq[freq < 20].index
df["product"] = df["product"].replace(rare, "other")Escolhendo um codificador
Poucas categorias: one-hot. Modelos de árvore com muitas categorias: codificação do alvo ou CatBoost. Se precisar de compactação: binária. Sempre evite vazamento fazendo fit apenas com os dados de treinamento e usando suavização ou esquemas fora da dobra.
Verificação rápida
Teste seus conhecimentos sobre codificação categórica.
Recapitulação
Recapitulação: a codificação do alvo substitui uma categoria pela média do seu alvo, usando suavização para controlar categorias raras. Use category_encoders (TargetEncoder, BinaryEncoder, CatBoost/LeaveOneOut) e faça fit apenas com os dados de treinamento ou fora da dobra para evitar vazamento. Codificadores compactos lidam com recursos de alta cardinalidade que a codificação one-hot não consegue tratar.
Perguntas Frequentes
A aula “Codificação do alvo e tratamento avançado de dados categóricos” é grátis?
Sim — o texto completo de “Codificação do alvo e tratamento avançado de dados categóricos” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Learn AI with Python, atualize para CoddyKit PRO. O curso de Learn AI with Python inclui 4 aulas no total.
O que vou aprender em “Codificação do alvo e tratamento avançado de dados categóricos”?
Codificação do alvo, codificação por frequência, codificação binária e embeddings para colunas de alta cardinalidade. Você pratica Learn AI with Python com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Learn AI with Python?
Nenhuma experiência prévia é necessária. Learn AI with Python no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Codificação do alvo e tratamento avançado de dados categóricos”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Learn AI with Python?
Sim. Cada aula de Learn AI with Python inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Métodos de seleção de atributos
- Criando atributos de interação e polinomiais
- Codificação do alvo e tratamento avançado de dados categóricos
- Engenharia automatizada de atributos com Featuretools