Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Tratamento de variáveis categóricas

Olá,

a instrutora atribui um número a um determinado valor (categoria) de uma variável qualitativa com a justificativa de que o modelo aceita somente números. Minha dúvida é: O fato de atribuirmos números de 1 a 4 para valores categóricos, não fará com o que o modelo considere estes "labels" (como a instrutora sugere) como números, fazendo uma ponderação arbitrária para estas categorias. Isto é, tratar uma categoria como "mais relevante do que a outra"?

O correto não seria "dummerizar" as variáveis qualitativas?

Abs

4 respostas

Alguém para ajudar?

Olá, Daniel! Tudo bem com você?

O motivo da instrutora ter realizado essa transformação é porque a maioria dos algoritmos de ML preferem trabalhar com dados numéricos. Então converter essas categorias para 1, 2, 3... é uma opção quando temos uma hierarquia nos dados representados.

Como assim hierarquia?

O livro Mãos à obra: aprendizado de máquina com Scikit-Learn, Keras & TensorFlow: Conceitos, ferramentas e técnicas para a construção de sistemas inteligentes na pagina 53 aborda essa questão muito bem:

Um dos problemas com essa representação é que os algoritmos de ML assumem que dois valores próximos são mais semelhantes que dois valores distantes. Isso pode ser bom em alguns casos (por exemplo, para categorias ordenadas como "ruim", "médio", "bom" e "excelente")... Para corrigir esse problema, uma solução comum é criar um atributo binário por categoria.

O atributo binário é a "dummização" que você falou. Então é possível utilizar essas duas formas de transformação dos dados categoricos, a depender do caso. O que a instrutora fez foi o chamado Label Encoder e a dummização é comumente referida como One-hot Encoder.

Como sugestão de leitura complementar deixo o livro mencionado acima, que é muito bom, e deixo também o tópico "One-Hot Enconding vs Label Enconding".

Qualquer dúvida estou à disposição.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!
solução!

Olá Bruno, tudo bem!

Eu tenho a primeira edição do livro "Mãos à obra..." e nesta versão contém apenas esta passagem: "Um dos problemas com essa representação é que os algoritmos de ML assumem que dois valores próximos são mais semelhantes que dois valores distantes. ". O trecho da ponderação arbitrária de dar valores numéricos para campos categóricos, mesmo que sejam ordinais, como é o caso de escala Likert deve ter apenas a partir da segunda edição. Inclusive no trecho subsequente do mesmo parágrafo ele propõe que para corrigir este problema usa-se a criação de atributos binários (dummy)

Minha observação foi baseada em algumas referências como a do professor de MBA de Data Science da USP Luiz Paulo Fávero, em que no seu livro Manual de Análise de Dados (2021), tanto no capítulo de PCA, página 380, quando diz: " Podemos perceber, em todas as situações, que as variáveis originais a partir das quais serão extraídos fatores são quantitativas, visto que a análise fatorial parte do estudo do comportamento dos coeficientes de correlação de Pearson entre as variáveis. É comum, entretanto, que pesquisadores façam uso do incorreto procedimento de ponderação arbitrária em variáveis qualitativas, como variáveis em escala Likert, para, a partir de então ser aplicada uma análise fatorial. "

quanto no capítulo de Regressão Simples e Múltipla, página 541, quando diz:

" Não podemos simplesmente atribuir valores a cada uma das categorias da variável qualitativa, pois isso seria um erro grave, chamado de ponderação arbitrária, uma vez que estaríamos supondo que as diferenças na variável dependente seriam previamente conhecidas e de magnitudes iguais às diferenças dos valores atribuídos a cada uma das categorias da variável explicativa qualitativa. Nestas situações, a fim de que este problema seja completamente eliminado, devemos recorrer ao artifício das variáveis dummy, ou binárias,... "

No capítulo de Regressão Logística Binária e Multinomial, ele explica que:

" As técnicas de regressão logística binária e multinomial são elaboradas com base na estimação por máxima verosimilhança. "

Disso, eu entendi que não podemos definir que a diferença entre "bom" e "ruim" é 2, por exemplo em uma escala (muito ruim:1, ruim:2, medio:3, bom:4 e muito bom:5).. Estaríamos ponderando arbitrariamente. Entendi que foi exatamente o que a instrutora fez quando atribuiu 1 ao valor '< 0 DM', 2 ao valor '0 <= ... < 200DM', e assim por diante. Como saber que a diferença entre esses campos é 1?

A justificativa do professor Fávero é que ao multiplicar um valor arbitrário como estes ao parâmetro estimado correspondente do logito (Z = B0 + B1X1 + ... + BkXk) , estamos interferindo fortemente no cálculo da probabilidade (1 / (1+ exp(-Z)), consequentemente, impactando na maximização do Log Likelihood.. Ou seja, o modelo como um todo é influenciado.

Você poderia compartilhar artigos/referências que mostram que este argumento proibitivo do uso de ponderação arbitrária em variáveis explicativas (mesmo que em ordinais) não é válido?

Olá, Daniel!

Muito obrigado por esclarecer e mostrar as referências que você utilizou e por trazer esse espaço de discussão no fórum, enriquece outros alunos e também a mim, que aprendi com você novas biografias.

Relacionado ao trecho retirado do livro Mãos à obra: aprendizado de máquina com Scikit-Learn, Keras & TensorFlow: Conceitos, ferramentas e técnicas para a construção de sistemas inteligentes a edição da qual retirei o trecho citado foi a segunda edição.

Indo mais a fundo na questão, no livro Machine Learning – Guia de Referência Rápida: Trabalhando com Dados Estruturados em Python o autor faz a seguinte colocação:

Uma alternativa à codificação de variáveis dummy é a codificação de rótulos (Label Encoder). Nesse caso, cada dado de categoria será atribuído a um número. É um método conveniente para dados com alta cardinalidade. Esse codificador impõe uma ordem, que poderá ser ou não desejável. Menos espaço poderá ser ocupado em comparação com uma codificação one-hot, e alguns algoritmos (de árvore) são capazes de lidar com essa codificação.

Com isso, podemos observar que a utilização da Label Encoder pode ser conveniente em alguns casos. Porém, vale ressaltar que a utilização de algoritmos dessa natureza varia de caso a caso, por exemplo, na citação que você mencionou essa codificação não seria possível ao se trabalhar com regressão, mas de acordo com Machine Learning – Guia de Referência Rápida: Trabalhando com Dados Estruturados em Python ao se trabalhar com árvores ela torna-se uma codificação possível.

Particularmente falando, ainda não tive a necessidade da utilização de LabelEncoder em um cenário real, principalmente porque o One Hot Encoder (ou codificação dummy) supre todos os casos, tanto dos modelos baseados em verossimilhança, quanto os que não são. Então sempre recorro a essa codificação.

Para um melhor esclarecimento a respeito dos métodos de codificação em questão, nosso time irá revisar com mais detalhes a aula em questão.

Mais uma vez, obrigado por abrir essa discussão, foi enriquecedora.

Grande abraço e bons estudos!