Lidando com variáveis categóricas – Python

Ao criarmos um modelo, é comum termos variáveis categóricas importantes para a explicação da nossa variável alvo. Entretanto, modelos são quantitativos e, portanto, precisam ter variáveis numéricas.

Para lidar com esta limitação, uma prática bastante comum é criar uma nova variável para cada possível valor assumido pela variável em questão – em circuitos digitais, esse processo é conhecido como One Hot Encoding. Por exemplo, se possuímos uma variável com domínio {“Quente”, “Morno”, “Frio”, “Gelado”}, podemos torná-la numérica utilizando 4 variáveis – também conhecidas como dummies – da seguinte maneira:

tabela

Desta maneira, você mapeará a influência de cada possível valor categórico em uma nova variável.

Mas o que fazer quando o número de categorias é muito grande?

Recentemente, em uma competição do Kaggle, me deparei com variáveis que possuíam milhares de categorias. Com isso, precisaria mapear uma base com 8 variáveis para uma nova com mais de 16 mil!!

Foi quando descobri que o scikit-learn possui a classe OneHotEncoder. Tudo o que você precisa fazer é separar as variáveis categóricas em uma matriz (numpy.array), criar um encoder baseado nas categorias deste array (encoder.fit(array)), aplicar o encoder  (encoder.transform(array)) e juntar com as demais variáveis:

import numpy as np
from sklearn import preprocessing

#Dada uma matriz X, filtramos as variáveis
#categóricas em uma nova matriz categ_X

encoder = preprocessing.OneHotEncoder()

encoder.fit(categ_X)
categ_X = encoder.transform(categ_X)

#Realizando a junção
X = np.append(X, categ_X, axis=1)

É importante frisar que as categorias precisam estar mapeadas em inteiros antes da criação do encoder. Caso você ainda não tenha os dados mapeados em inteiros, isso pode ser feito utilizando a classe LabelEncoder, também encontrada no scikit-learn.

Espero ter ajudado. Qualquer dúvida, deixe o seu comentário.

Anúncios

Tags:, , ,

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: