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?"
É 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.