Curso

"Em muitas atividades práticas de ciência de dados, o conjunto de dados terá variáveis categóricas. Essas variáveis geralmente são armazenadas como valores de texto". (Practical Business Python) Como o aprendizado de máquina se baseia em equações matemáticas, manter variáveis categóricas como texto pode causar problemas. Muitos algoritmos aceitam valores categóricos sem grandes ajustes, mas mesmo nesses casos costuma haver discussão sobre codificar ou não as variáveis. Já os algoritmos que não suportam valores categóricos exigem metodologias de codificação. Vamos explorar alguns métodos.
Metodologias de codificação
Label encoding
No label encoding, mapeamos cada categoria para um número ou rótulo. Os rótulos escolhidos para as categorias não têm relação entre si. Assim, categorias que possuem alguma proximidade entre elas perdem essa informação após a codificação.
Frequency encoding
Nesse caso, usamos a frequência das categorias como rótulos. Quando a frequência tem alguma correlação com a variável alvo, isso ajuda o modelo a entender e atribuir pesos em proporção direta ou inversa, dependendo da natureza dos dados.
One-hot encoding
Nesse método, mapeamos cada categoria para um vetor que contém 1 e 0 indicando a presença ou ausência da característica. O número de vetores depende das categorias que queremos manter. Para variáveis de alta cardinalidade, esse método gera muitas colunas e pode desacelerar bastante o aprendizado. Existe um debate entre one-hot encoding e dummy encoding e quando usar cada um. Eles são bem parecidos, mas o one-hot gera um número de colunas igual ao de categorias, enquanto o dummy gera uma a menos. No fim, cabe à pessoa que modela decidir isso durante a validação.
Armadilha da variável dummy:
Imagine que você tenha duas categorias em uma variável categórica. Após aplicar one-hot encoding, haverá duas colunas representando a variável, mas, olhando de perto, apenas um vetor já é suficiente para representar ambos os valores. Por exemplo, uma variável categórica com os valores "red" e "blue". Depois do one-hot, dois vetores são formados: um indicando "red" e outro "blue". Porém, a informação pode ser aprendida usando apenas um vetor, e o outro será redundante. Podemos então remover um vetor, reduzindo a quantidade de dados com que os algoritmos precisam ser treinados. Isso ajuda o modelo a performar melhor e facilita a explicação do funcionamento do modelo. Em cenários reais, lidamos com muitas variáveis categóricas, às vezes já conhecendo parte delas pelos resultados. As práticas de codificação ajudam a tratar a entrada de dados, mas também podem tornar o processo e o aprendizado mais pesados.
Target, Impact ou Likelihood encoding
Target encoding é parecido com label encoding, mas aqui os rótulos são correlacionados diretamente com a variável alvo. Por exemplo, no mean target encoding, para cada categoria da variável, o rótulo é definido pela média do alvo nos dados de treino. Esse método evidencia a relação entre categorias semelhantes, porém essas relações ficam limitadas às categorias e ao próprio alvo. As vantagens do mean target encoding são não alterar o volume de dados e acelerar o aprendizado; a desvantagem é ser mais difícil de validar. Regularização é necessária na implementação desse tipo de codificação. Veja o target encoder em python e em R.
Estatísticas de codificação
A variabilidade da codificação descreve a variação da codificação dentro de uma mesma categoria. No caso do one-hot encoding, a variabilidade depende do momento da implementação, quando se decide o número de categorias a manter com impacto suficiente no alvo. Outras metodologias de codificação também apresentam variabilidade significativa, geralmente identificada na etapa de validação.
Para calcular a distinguibilidade da codificação, contamos os rótulos das categorias e então calculamos o desvio padrão desses rótulos. Isso indica o quanto as categorias codificadas são distinguíveis — se estão bem separadas ou agrupadas.
Lembre-se: se você optar por um estilo de codificação simples ao construir um modelo, ele tende a ficar enviesado. Para entender melhor, confira esta discussão. Além disso, para cada tipo de modelo, ajuste sua metodologia de codificação: para regressão, por exemplo, você pode usar mean target encoding; para classificação, vale considerar relative frequency encoding.
Por fim, compartilho um transformer no estilo scikit-learn que ajuda a codificar variáveis categóricas com diferentes técnicas.
category_encoders
Esta biblioteca compatível com scikit-learn oferece as seguintes técnicas já implementadas:
- Ordinal
- One-Hot
- Binary
- Helmert Contrast
- Sum Contrast
- Polynomial Contrast
- Backward Difference Contrast
- Hashing
- BaseN
- LeaveOneOut
- Target Encoding
Ela aceita dataframes do pandas como entrada e pode transformar os dados. Também é compatível com pipelines do sklearn; para detalhes, visite aqui.
Se quiser aprender mais sobre scikit-learn, faça o curso Supervised Learning with scikit-learn da DataCamp.

