Como realizar o processo de enconding de variáveis categóricas?

Alex Barros
6 min readAug 7, 2020

--

O que são variáveis categóricas, one-hot enconding e integer enconding.

via pinterest https://pin.it/6iPFLhA

As variáveis categóricas também são conhecidas como variáveis qualitativas. Vamos analisar dois grupos: Ordinais e Nominais;

A depender do tipo de variável categórica, você pode precisar realizar procedimentos diferentes antes de utilizá-la em um modelo de Machine Learning. Você verá a diferença entre o one hot enconding e o integer enconding.

Afinal, o que são variáveis categóricas ou qualitativas?

São variáveis/dados que representam características de um objeto; Por exemplo, sexo, estado civil, tipo de endereço ou categorias de filmes. Esse tipo de dado é geralmente referênciado como dados qualitativos para a estatística. Para você entender melhor, vou deixar alguns exemplos de variáveis categóricas mais comuns:

Sexo: Masculino, Feminino, Outro ou Indefinido

Estado Civil: Divorciado, Casado, Solteiro, Viúvo, União Estável ou Indefinido

Gêneros de Filmes: Ação, Aventura, Comédia, Crime, Drama, Fantasia, Histórico, Mistério, Político, Romance, Ficção, etc

Tipo Sanguíneo: A, B, AB ou O

Esses tipos de variáveis tem um número limitado de valores e é fácil para um e estudante de ciência da computação visualizar variáveis categóricas como uma enumeração. Você deve observar também as escalas de medidas de uma variável categóricas. Formalmente existe quatro tipos: nominal, ordinal, intervalo e razão/proporção. Exploraremos nesse artigo somente o nominal e Ordinal.

Nominal:

São utilizadas para nomear variáveis sem nenhum valor quantitativo. As escalas são geralmente rótulos. São mutualmente exclusivas, ou seja, em tese a variável só pode ser de um tipo.

Qual o seu gênero sexual?
1.Masculino
2. Feminino
3.Não Binário
4.Prefiro não reponder
5.Outro

Outros exemplos poderiam ser: Línguas faladas em um país; Espécies Biológicas; Cores de um carro;

Ou seja, qualquer variável que não possua relação lógica matemática, de ordem ou hierárquica entre si.

Ordinal:

A maior diferença entre a escala ordinal e nominal é a questão da ordem. Na escala ordinária, a ordem dos valores é um fator importante. Uma dica para lembrar é que a escala ordinal lembra ordem. Um dos exemplos clássicos é a Escala Likert. Você não sabe o que é? Tem certeza? Veja um exemplo, ao perguntar "O medium é a melhor plataforma para distribuição de conhecimento?"

Escala Likert ( Livro: Hands-On Exploratory Data Analysis — Suresh Kumar Mukhiya)

Outro exemplo são as perguntas que algumas farmácias fazem ao terminar o atendimento.

Você ficou satisfeito com nosso atendimento?
1. Muito Insatisfeito
2. Um Pouco Insatisfeito
3. Neutro
4. Satisfeito
5. Muito Satisfeito

Por que precisamos fazer o enconding dessas variáveis categóricas?

A razão é que a maioria dos algoritmos de Machine Learning trabalham com features/variáveis em forma numérica. A maioria das variáveis categóricas que vimos são do tipo texto/string. Elas podem ser convertidas para inteiros ou floats. Esse processo de converter uma variável textual para um inteiro é chamado de enconding (codificação).

O modo de realizar esse encondig difere a depender se são variáveis nominais ou ordinais.

Variáveis categóricas Nominais — One Hot Enconding

O primeiro método que você irá aprender é chamado de one-hot enconding e funciona melhor para as variáveis em escala nominal. Esse processo cria uma variável nova para cada variável string.

Vamos usar o nosso exemplo de Estado Civil: Divorciado, Casado, Solteiro, Viúvo, União Estável ou Indefinido. São seis valores diferentes, então precisaremos criar seis novas variáveis. Cada uma receberá um valor binário de 1 ou 0, para definir se a pessoa possui aquele status ou não.

Para realizar esse procedimento em python, podemos aplicar a função do pandas get_dummmies().

Vamos demonstrar isso com um exemplo em código. Imagine um data set com informação de clientes como nome, idade e estado civil. Vamos criar um DataFrame com cinco pessoas com essas informações preenchidas.

import pandas as pd
import numpy as np
clientes_dictionary = {'nome': ['Marcos', 'Ana', 'Silvia', 'Carlos', 'Alex'],
'idade': [31, 32, 30, 30, 29],
'status': ['solteiro', 'casado', 'divorciado', 'união estável', 'casado']}
df = pd.DataFrame(clientes_dictionary)
df.head()
DataFrame com Clientes (nome, idade, status)
DataFrame criado com o Dictionary

Você pode ver que esse dataFrame possui apenas cinco entradas e três colunas: nome, idade e status. O status possui somente quatro valores: solteiro, casado, divorciado e união estável. Como não há nenhuma ordem lógica/hierárquica entre eles, aplicamos o one-hot enconding.

Você pode ver que as categorias de estado civil tornaram-se variáveis binárias distintas. Mais alguns detalhes precisam ser avaliados antes de passarmos esses dados em um algoritmo de machine learning. Mas com esse exemplo já conseguimos entender o funcionamento do processo de one-hot enconding.

Variáveis categóricas Ordinais — Integer Enconding

Apesar de podermos utilizar o mesmo procedimento anterior. Para o caso de variáveis ordinais, perderíamos informações sobre a ordem entre as variáveis.

Uma melhor abordagem seria a utilização do integer enconding. Cada variável seria modificada para o seu correspondente inteiro, preservando assim a ordem. Imagine um DataFrame com informações de notas de alunos classificadas em A, B, C, D, E e F. Poderíamos converter as notas textuais da seguinte maneira:

A -> 1
B -> 2
C -> 3
D -> 4
E -> 5
F -> 6

Para realizar esse procedimento com o pandas, podemos criar um dicionário com os dados e usar a função map():

#Criação do DataFrame
student_dictionary = {'name': ['Alex', 'Carlos', 'Amanda','Rodrigo', 'Marcelo'],'grade': ['A', 'C', 'A', 'B', 'F']}
df = pd.DataFrame(student_dictionary)
df.head()
Notas ainda em Texto

Uma vez com que o DataFrame foi criado, realizamos o mapeamento e a substituição dos valores textuais para inteiros;

Com os comandos ao lado, primeiro realizamos o mapeamento dos itens em string para integer através do dictionary mapping_dictionary;
Em seguida utilizamos a função map para realizar o mapeamento efetivo de todos os itens do dataset.

Após essa transformação, podemos utilizar esses dados em um sistema de Machine Learning para treinamento.

Há outros métodos para aplicar o integer enconding mas utilizar a função map em conjunto com um dicionário me parece um dos mais simples. O desenvolvedor consegue definir exatamente como o mapeamento será realizado.

A vantagem dessa abordagem, é que caso surja um novo domínio para a variável nota, podemos mapea-lo considerando a ordem e importância entre as notas. Por exemplo: caso indiquem que a nota "prova não realizada" é considerada pior que qualquer nota, podemos atribuir uma nota 7 ou maior para indicar maior peso negativo. Ou seja, esse tipo de mapeamento nos permite manter o valor da ordem entre os valores.

Conclusão

Nesse artigo você viu a diferença entre dois tipos de variáveis categóricas: Ordinal e Nominal. E também dois métodos de realizar o enconding dessas variáveis para modelos de Machine Learning.

Aplique essas informações nos seus modelos de machine learning e verifique se não estava ignorando ou tratando as variáveis categóricas de modo errado.

Nos siga em @aprendadatascience para mais informações.

--

--

Alex Barros
Alex Barros

Written by Alex Barros

Engenheiro da Computação. Mestre e Doutorando em Computação Aplicada. Coordenador do Escritório de Projetos e Processos no TRT8.

No responses yet