Por que fazer encoding de variáveis?

e como funciona os algoritmos para essa transformação

Gustavo Candido
Data Hackers
6 min readJan 22, 2024

--

Photo by Mateus Campos Felipe on Unsplash

Tipos de variáveis

Caso você não se lembre ou não saiba, ao estudar estatística básica um dos primeiros tópicos abordados são os tipos de variáveis.

Veja a seguir a classificação das variáveis:

Classificação de Variáveis

Imagine que somos pesquisadores e fomos à rua levantar dados de possíveis eleitores de um candidato x.

Variáveis como sexo, educação, estado civil, são possíveis qualidades (ou atributo) do indivíduo pesquisado. Enquanto renda, peso, número de filhos são números resultantes de uma contagem ou mensuração.

As variáveis do primeiro tipo são chamados de qualitativas, ao passo que as do segundo tipo são quantitativas.

Vamos focar mais nas variáveis qualitativas, ainda dentro delas, podemos classificar como:

  • Nominal: não existe nenhuma ordenação. Por ex.: estado civil, genêro, cor dos olhos.
  • Ordinal: existe uma ordem. Por ex.: educação, classe social, nível de satisfação.

Perceba que no primeiro tipo não é possível manter uma hierarquia ou ordem. Enquanto no segundo tipo, é possível.

Problema

Vamos supor que temos uma base de dados com as colunas nome, sexo e faixa de renda. Perceba que nesse exemplo, o nome e sexo são variáveis qualitativas nominais, enquanto renda é qualitativa ordinal. Veja o dataset a seguir:

Dataset

O grande problema é que a maioria dos algoritmos de aprendizado de máquina preferem trabalhar com números.

E ao dropar essas colunas, perderemos um grande poder preditivo.

Procurando resolver esse problema, surge o encoding de variáveis. Que nada mais é do que transformar essas variáveis qualitativas em números.

One-Hot Encoding

Esse algoritmo transforma uma coluna com n rótulos em n colunas e cada uma dessas colunas será representante de cada uma dessas categorias. Irá atribuir 1 se o valor pertencer aquela categoria e 0 se não.

Visualizando, fica máis facil de entender:

One Hot Encoding

O One-Hot Encoding é utilizado para variáveis qualitativas nominais, ou seja, que não possuem ordem ou hierarquia.

Em python

Vamos aplicar o OHE no nosso exemplo?

#instalação do pacote
!pip install category_encoders

#import da função
from category_encoders import *

#objeto e a variável que queremos transformar como parâmetro (sexo)
ohe = OneHotEncoder(cols=['Sexo'])

#treinamento e ajuste
df_ohe = ohe.fit_transform(df_cats)

Basta substituir o nome das colunas e do dataset para utilizar o seu. Porém, se quiser visualizar e rodar meu exemplo, clique aqui para acessar o link do repositório do GitHub.

Ao executar esse código, o dataset transformado ficará assim:

Perceba que as pessoas que anteriormente eram atribuídos como sexo masculino agora são marcados com “1” na coluna Sexo_1 e “0” na coluna Sexo_2.

Pronto, transformamos nossa originalmente variável qualitativa nominal em uma variável quantitativa discreta, agregando uma importante feature para o nosso modelo e sem perder poder preditivo.

Cuidado, há um erro muito grande nessa transformação - a multicolinearidade, se fôssemos fazer um modelo utilizando regressão linear aplicada a predição, pore exemplo. Falaremos mais sobre, no final.

Ordinal Encoding

Se aplica quando temos variáveis qualitativas ordinais, isto é, que possuem uma hierarquia, uma ordem. Como por exemplo: ensino superior é maior na hierarquia, do que ensino médio. A renda de uma pessoa considerada classe alta é maior do que um classe baixa. E assim por diante.

Ordinal Encoding

Perceba que diferente do One Hot Encoding, o Ordinal Encoding não cria N colunas.

Em python

Utilizando o mesmo pacote do scikit-learn, vamos aplicar o Ordinal Encoding:

#instalação do pacote
!pip install category_encoders

#import da função
from category_encoders import *

#objeto e a variável que queremos transformar como parâmetro (renda)
orde = OrdinalEncoder(cols=['Renda'])

#treinamento e ajuste
orde.fit_transform(df_cats)

E esse é o resultado:

Temos que tomar cuidado, pois o Ordinal Encoding pode fazer a transformação de um jeito não muito agradável: a Kizzy possui renda média e foi atribuída como 1, enquanto a Silvia possui renda baixa e foi atríbuida como 2 e a Rafaela, por sua vez, foi atribuído, já que possui renda alta.

Veja que a ordem dos rótulos não está alinhada com a relação de renda real. Se Kizzy tem renda média, Silvia tem renda baixa e Rafaela tem renda alta, a atribuição de valores numéricos deve refletir essa ordem natural. Que seria:

  • Silvia (renda baixa): 1
  • Kizzy (renda média): 2
  • Rafaela (renda alta): 3

Multicolinearidade

Como dito acima, há um grande problema que devemos ter cuidado. A multicolinearidade. Se você não sabe esse conceito, sugiro dar uma pesquisada para continuar esse tópico, além de ler meu texto sobre correlação.

Como vimos, o One Hot Encoding transforma uma coluna com n rótulos em n colunas. Porém, o certo para evitar a multicolinearidade é transformar uma coluna com n rótulos em n-1 colunas. Ou seja, se queremos transformar uma coluna com 2 rótulos, deveríamos ter apenas 1 coluna.

Aplicando o exemplo do sexo, temos uma colunas com os rótulos M e F. Aplicando o OHE, criará uma coluna para o sexo M, atribuindo 1 se a pessoa pertencer aquela coluna e 0 se não.

Qual é a colinearidade dessas colunas? 1!!! Pois se a linha está 0 para M, obrigatoriamente estará 1 para F. Quanto M impacta F? 100%! E isso é um grande problema para predição.

Correlação entre as variáveis “Sexo”

Como solucionar isso? Utilizando a regra do n-1. Nesse caso, apenas dropando a coluna ‘F’.

Sem multicolinearidade

Perceba que agora sabemos o sexo de todos sem multicolinearidade. O Gustavo é 1, logo ele é pertence ao sexo masculino. A silvia é 0, logo ela é do sexo feminino. Não há necessidade uma segunda coluna.

Obs.: A multicolinearidade não impacta se o modelo for inferencial. Apenas se for de caráter preditivo.

Conclusão

Como vimos, modelos de aprendizado de máquina, no geral, não lidam bem com variáveis categóricas.

Por isso, torna-se necessário a transformação dessas variáveis em variáveis quantitativas, para não perder nenhum poder preditivo.

Com isso, surgem algoritmos como o One-Hot Encoding, que é utilizado quando a variável é qualitativa nominal e o Ordinal Encoding, que tem seu propósito em variáveis qualitativas ordinais.

Na aplicação do OHE, é preciso tomar muito cuidado com a multicolinearidade, e por isso usa-se a regra do N-1.

Em resumo, esses algoritmos são muito importantes no dia-a-dia de um cientista de dados e por isso torna-se necessário conhecê-los muito bem.

Links

Para se conectar comigo, acesse meu LinkedIn.

O código desse artigo está no meu GitHub.

Referências

Codificando Variáveis Categóricas

Livro Hands On with Scikit-Learn

--

--

Gustavo Candido
Gustavo Candido

Written by Gustavo Candido

Estudante de Sistemas de Informação na ESPM - SP. Alguém interessado em ciência de dados, computação e matemática.