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

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

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.
Exemplo:

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 site Aprenda Data Sciente é o melhor lugar para aprender sobre data science?"

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

É possível observar que há uma ordem lógica entre as respostas possíveis. Sendo o Concordo Fortemente a melhor resposta e o Discordo Fortemente a pior(ou mais negativa).

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. Veja o código abaixo:

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 observar que as categorias de estado civil tornaram-se variáveis binárias distintas. Outros 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():

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

Com os comandos abaixo, 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 no instagram @aprendadatascience para mais informações.