PREPARAÇÃO DE DADOS · CODIFICAÇÃO

Transformar categorias sem inventar relações.

Modelos matemáticos precisam de números, mas cada transformação comunica uma estrutura. Ordinal Encoding preserva uma ordem verdadeira; One-Hot mantém categorias nominais separadas.

?

Existe ordem?essa é a primeira pergunta

O

Ordinal Encodingbaixo < médio < alto

1H

One-Hot Encodinguma coluna indicadora por categoria

M

Verificar o modeloalguns aceitam categorias nativamente

01 · A TABELA ORIGINAL

As colunas não possuem o mesmo significado.

Risco tem uma sequência legítima. Plano e cidade são apenas nomes de grupos. Portanto, não devem receber automaticamente a mesma codificação.

clienteidaderiscoplanocidadecancelou (y)
A24BaixoBásicoUberabaNão
B51AltoPremiumFrancaSim
C36MédioBásicoUberlândiaNão
D42AltoEssencialUberabaSim
NUMÉRICA

idade

É uma quantidade. Pode ser padronizada conforme o modelo.

24, 51, 36, 42
ORDINAL

risco

Baixo, médio e alto possuem ordem real.

baixo < médio < alto
NOMINAIS

plano e cidade

Os nomes identificam grupos, não níveis.

Uberaba ≠ “menor” que Franca
ALVO

cancelou

É a resposta y de uma classificação binária.

não=0 · sim=1

02 · ORDINAL ENCODING

Use quando a ordem faz parte do significado.

Definimos conscientemente a sequência das categorias e substituímos cada nível por sua posição.

Antes

Baixo<Médio<Alto

A relação de ordem já existe no domínio do problema.

Depois

Baixo = 0Médio = 1Alto = 2

A codificação preserva essa sequência para o algoritmo.

codificar(risco): Baixo → 0 · Médio → 1 · Alto → 2

Bom uso

Escolaridade, faixa de risco, tamanho P/M/G ou satisfação em níveis ordenados.

ordem definida pelo domínio

Mau uso

Codificar cidades como Uberaba=0, Franca=1, Goiânia=2. Não existe ordem real.

cidade 2 não é maior que cidade 1

Categoria desconhecida

Dados futuros podem trazer um nível não observado. Defina uma política para “desconhecido”.

unknown_value = -1

03 · ONE-HOT ENCODING

Use para grupos sem ordem natural.

Cada categoria vira uma coluna binária. Assim, o código não afirma que uma cidade é maior ou mais próxima que outra.

cidade originalcidade_Uberabacidade_Francacidade_Uberlândia
Uberaba100
Franca010
Uberlândia001
Uberaba100
One-Hot(Uberaba) = [1, 0, 0]   ·   One-Hot(Franca) = [0, 1, 0]

04 · TABELA PRONTA PARA O MODELO

Uma linha se transforma em um vetor numérico.

idaderisco_ordplano_Básicoplano_Essencialplano_Premiumcidade_Uberabacidade_Francacidade_Uberlândiay
2401001000
5120010101
3611000010
4220101001

Leitura da primeira linha: cliente de 24 anos, risco baixo (0), plano Básico, cidade Uberaba e alvo “não cancelou” (0). As colunas indicadoras valem 1 somente quando a categoria está presente.

05 · OUTRAS CODIFICAÇÕES

Alternativas para situações específicas.

Binária 0/1

Para exatamente duas categorias, uma única coluna pode ser suficiente.

sim=1 · não=0

Frequência

Substitui a categoria por sua frequência no treino. Economiza colunas, mas diferentes grupos podem ter a mesma frequência.

Uberaba → 0,42

Target Encoding

Usa uma estatística do alvo por categoria. Deve ser ajustado apenas no treino e dentro da validação cruzada.

alto risco de vazamento

Embeddings

Redes neurais podem aprender vetores densos para categorias ou tokens, especialmente com vocabulários grandes.

categoria → [0,18, −0,42, …]

06 · QUAL CODIFICAÇÃO PARA CADA MODELO?

A escolha depende da semântica e do algoritmo.

ModeloNominalOrdinalObservação prática
Regressão linear / logísticaOne-HotOrdinal se a ordem for realUm código nominal 0/1/2 inventaria uma relação linear.
SVMOne-HotOrdinal conscienteTambém padronize as entradas numéricas; distância e margem são sensíveis à escala.
k-NN / k-means / LVQ / RBFOne-Hot com cautelaOrdinal conscienteA representação muda diretamente as distâncias. Escala é essencial.
Perceptron / ADALINE / MLPOne-Hot ou embeddingOrdinal conscienteEscala consistente geralmente favorece o treinamento.
Árvore / Random Forest no scikit-learnCodificarOrdinal pode ser útilOne-Hot evita ordem falsa; árvores podem lidar bem sem padronização.
CatBoost / LightGBM / boosting com suporte categóricoPreferir suporte nativo quando configuradoDepende da implementaçãoNão aplique One-Hot automaticamente antes de verificar a biblioteca.
Naive BayesOne-Hot ou variante categóricaDepende da varianteEscolha Bernoulli, Multinomial, Categorical ou Gaussian conforme os dados.
TransformerIDs de tokens + embeddingsEmbeddings / atributosO ID do token é índice de consulta, não uma medida ordinal.

07 · NÃO CONFUNDA X E y

Codificador de entrada e codificador do alvo têm funções diferentes.

OrdinalEncoder

Transforma uma ou várias colunas categóricas de entrada X. A ordem deve ser especificada quando ela importa.

X[:, categoria] → números

OneHotEncoder

Cria colunas indicadoras para as categorias das entradas X.

X[:, cidade] → [0,1,0]

LabelEncoder

No scikit-learn, é destinado aos rótulos do alvo y, e não às colunas de entrada.

y: ["não","sim"] → [0,1]

08 · PIPELINE REPRODUZÍVEL

Cada grupo de colunas recebe seu transformador.

separar treino/testeimputarescalar numéricascodificar categoriastreinar modelo
# Exemplo conceitual com scikit-learn
numericas = ["idade"]
ordinais = ["risco"]
nominais = ["plano", "cidade"]

preparo = ColumnTransformer([
    ("num", StandardScaler(), numericas),
    ("ord", OrdinalEncoder(
        categories=[["Baixo", "Médio", "Alto"]]
    ), ordinais),
    ("nom", OneHotEncoder(
        handle_unknown="ignore"
    ), nominais)
])

pipeline = Pipeline([
    ("preparo", preparo),
    ("modelo", LogisticRegression())
])

# fit aprende transformações e modelo somente com o treino.
pipeline.fit(X_treino, y_treino)

# predict reutiliza exatamente as mesmas transformações.
previsoes = pipeline.predict(X_teste)