Introdução: Por que as variáveis categóricas importam nas árvores de decisão

Os modelos de árvore de decisão estão entre os algoritmos de aprendizagem de máquina mais interpretáveis, tornando-os uma opção para tarefas de classificação e regressão em domínios como finanças, saúde e marketing. Suas regras de decisão transparentes permitem que os stakeholders compreendam por que uma previsão é feita. No entanto, o desempenho e a confiabilidade de uma árvore de decisão dependem muito de como as variáveis categóricas são pré-processadas. Dados categóricos – valores como país[, ]tipo de produto, ou segmento de cliente[[] – não podem ser diretamente alimentados na maioria dos algoritmos de árvore sem codificação adequada. Uma abordagem ingênua pode introduzir viés, aumentar a sobrecarga computacional ou mesmo interromper a capacidade do modelo de capturar divisões significativas. Este artigo fornece um guia abrangente para lidar com variáveis categóricas em modelos de árvore de decisão, abrangendo técnicas de codificação, suporte de algoritmos nativos e melhores práticas para construir modelos robustos de alta performance.

Compreender Variáveis Categóricas

Variáveis categóricas representam dados que podem assumir um número limitado e fixo de valores possíveis. Elas se enquadram em dois tipos principais:

  • Variáveis nominais – categorias sem ordem intrínseca (por exemplo, cor: vermelho, azul, verde; cidade: Nova Iorque, Londres, Tóquio).
  • Variáveis ordinais – categorias com ordem clara e significativa (por exemplo, escolaridade: ensino médio, bacharelado, mestrado, doutorado; satisfação: baixa, média, alta).

A distinção é crítica porque cada tipo requer uma estratégia de codificação diferente para preservar as informações inerentes à ordenação. As árvores de decisão tratam inerentemente as funcionalidades como se fossem contínuas, avaliando limiares divididos; para as características categóricas sem codificação, a árvore só pode realizar divisões binárias com base na presença ou não de uma categoria (quando se usa uma só linha) ou tratar etiquetas inteiras como ordenado (quando se usa a codificação de etiquetas). Esta característica torna a escolha do método de codificação longe de ser trivial.

Métodos comuns de codificação

Existem várias técnicas de codificação, cada uma com trade-offs em termos de dimensionalidade, interpretabilidade e compatibilidade com algoritmos de árvore de decisão. Abaixo examinamos os métodos mais amplamente utilizados.

Codificação de rótulos (Codificação Ordinal)

A codificação de etiquetas atribui um inteiro único a cada categoria, normalmente 0, 1, 2,... para as categorias K. Este método é simples e eficiente em termos de memória, porque não aumenta o número de funcionalidades. Contudo, implica uma relação artificial ordinal que pode enganar uma árvore de decisão. Por exemplo, uma árvore pode aprender que a divisão [[FLT: 0]]education level & gt;= 2[[FLT: 1]] separa “master’s” de “bachelor’s”, que é válida para dados ordinais. Mas, para dados nominais como cores, a codificação de etiquetas sugere esporosamente que “green” (2) é maior do que “red” (0), levando a divisões sem sentido.

Quando usar: Apenas para as características categóricas ordinais onde a ordem inteira reflete a verdadeira hierarquia. Muitas implementações scikit-learn exigem que você forneça a ordem correta manualmente através de um mapeamento, ou use com uma lista de categorias predefinida.

Codificação de um só calor

A codificação a quente cria variáveis binárias do manequim K, cada uma representando a presença (1) ou ausência (0) de uma categoria. Este método elimina qualquer ordenação artificial e é geralmente seguro para dados nominais. A maioria das bibliotecas de árvore de decisão, incluindo o , funciona bem com características one-hot porque as divisões são simples “está presente categoria?” testes.

Drawbacks:] Ele sofre da curse de dimensionalidade quando K é grande. Uma coluna com 1000 valores únicos irá inflar o espaço de funcionalidades por 999 colunas, aumentando o uso de memória e o tempo de treino. Além disso, a codificação a quente pode levar à esparsidade de dados, que pode degradar o desempenho de árvores muito profundas.

Dica prática: O código de um só a quente só depois de dividir os dados em conjuntos de treino e teste para evitar fuga de dados. Largue uma categoria (use em pandas get dummies) para modelos lineares, mas para árvores de decisão manter todas as colunas K é normalmente bom porque a árvore irá tratá-las de forma independente.

Codificação de Frequência / Alvo

A codificação de frequência substitui cada categoria pela sua contagem (ou frequência relativa) no conjunto de treinos. A codificação de destino substitui as categorias pela média da variável- alvo para essa categoria (ou uma versão suavizada). Estes métodos são populares para funcionalidades de alta-cardinalidade, porque evitam expandir a matriz de funcionalidades.

Aviso: A codificação de alvo vaza informações sobre o alvo para o recurso, o que pode causar uma sobreposição grave se não for tratada com validação cruzada ou suavização.A codificação de alvo integrada da LightGBM e CatBoost oferece uma codificação de alvo integrada com regularização que mitigue este risco.Para outras bibliotecas, use um conjunto de espera separado ou aplique um esquema de validação cruzada para calcular os meios de destino.

A codificação de frequência não vaza o alvo, mas perde a correlação entre categoria e alvo. Funciona melhor quando a frequência em si é preditiva (por exemplo, categorias raras indicam comportamento mais outlier).

Codificação Bíntica

A codificação binária converte primeiramente as categorias em etiquetas inteiras (0 para K-1) e representa cada inteiro na forma binária, criando novas colunas log2(K). É um compromisso entre uma-quente e codificação de etiquetas: produz menos funcionalidades do que uma-quente mas menos interpretáveis. Alguns praticantes acham-na eficaz para funcionalidades de alta-cardinalidade em modelos baseados em árvores.

Codificação de Hashing

A hashing de recursos (ou o truque de hashing) aplica uma função de hash a cada categoria e leva o módulo do número de caixas de saída. Isto pode reduzir drasticamente as dimensões e é útil quando o número de categorias é enorme (por exemplo, endereços IP). No entanto, as colisões (mapeamento de categorias diferentes para o mesmo bin) podem degradar a qualidade do modelo. Raramente é a primeira escolha para árvores de decisão, a menos que as restrições de memória sejam graves.

Apoio nativo em Bibliotecas de Árvores de Decisão

Moderno gradiente impulsionando bibliotecas desenvolveram manipulação categórica nativa que muitas vezes supera a codificação manual. Compreender o que cada biblioteca oferece pode economizar tempo e melhorar a precisão.

scikit- learn (Tree de decisão / RandomForest / GradientBoosting)

O scikit- learn não manipula nativamente as características categóricas. Todas as entradas devem ser numéricas. Você deve codificar as variáveis categóricas antes de as inserir no modelo. Contudo, versões recentes (≥0.24) introduzidas e que aceitam as funcionalidades categóricas diretamente através do parâmetro – mas isto é limitado à implementação baseada em histogramas. Para o clássico DecisionTree e RandomForest, ainda é necessária a codificação manual.

]scikit-learn OrdinalEncoder documentation

LightGBM

O LightGBM tem excelente suporte nativo para características categóricas. Você simplesmente declara o recurso como (ou usa o parâmetro ). Internamente, ele usa um algoritmo que agrupa categorias com base nas estatísticas de gradiente do alvo, encontrando divisões ótimas sem expansão de um só ponto. Isso é rápido e eficiente em memória, especialmente para colunas de alta-cardinalidade.

LightGBM categórico suporte de recursos

CatBoost

O CatBoost foi especificamente desenhado para lidar com as características categóricas de forma ideal. Aplica-se a codificação de destino ordenada com uma abordagem baseada em permutação que reduz a fuga de alvo e a sobreposição. Por padrão, o CatBoost trata todas as funcionalidades como numéricas, a menos que sejam explicitamente marcadas como categóricas através . Também suporta os objectivos de texto e categoriais multiclasse. O tratamento das categóricas pelo CatBoost é muitas vezes superior à codificação manual, especialmente em pequenos conjuntos de dados.

CatBoost categóricos documentação

XGBoost

A partir da versão 1.6, o XGBoost introduziu suporte experimental para características categóricas através do parâmetro e do argumento . Ele usa uma abordagem baseada em divisão semelhante à LightGBM. No entanto, a implementação ainda está amadurecendo; muitos praticantes continuam a usar codificação manual com XGBoost.

Escolher a estratégia de codificação certa

A seleção de um método de codificação depende de vários fatores:

  • Cardinalidade – Para características nominais de baixa frequência (≤10 categorias), a codificação a quente é simples e eficaz. Para cardinalidade moderada (10–100), considere codificação binária ou codificação de destino. Para cardinalidade elevada (>100), use suporte nativo (LightGBM/CatBoost) ou codificação de frequência/alvo.
  • Modelo library – Se você já estiver usando CatBoost ou LightGBM, deixe a biblioteca lidar com categóricos. Para scikit-learn, você deve codificar manualmente.
  • Ordenamento de categorias – As funcionalidades ordinais devem usar codificação ordinal.A codificação de etiquetas sem preservar a ordem é arriscada para dados nominais.
  • Interpretabilidade – Características codificadas a quente produzem splits transparentes (por exemplo, )].A codificação binária ou alvo reduz a interpretabilidade, que pode ser aceitável para tarefas focadas em previsões, mas não para requisitos regulamentares.
  • Profundidade da árvore e sobreposição – A codificação do alvo pode causar sobreposição, se não regularizada; codificação a quente pode levar a divisões muito rasas para categorias raras. A validação cruzada e a afinação do hiperparametro tornam-se mais importantes com codificações sofisticadas.

Características de alta Cardinalidade

Características categóricas de alta cardinalidade (por exemplo, códigos ZIP, IDs de usuário, IDs de produto) são notoriamente difíceis. A codificação tradicional de um-quente cria milhares de colunas de bonecos, muitas das quais aparecem em apenas algumas linhas. Isto pode:

  • Aumente o uso de memória e o tempo de treinamento dramaticamente.
  • Faça com que a árvore se divida em categorias raras que não generalizam.
  • Tornar o modelo sensível às novas categorias que aparecem na produção (se não forem manuseadas com um “desconhecido” catch-all).

As soluções incluem:

  1. Codificação de alvo com suavização – Substituir cada categoria pela média do alvo, mas reduzir as estimativas para pequenas categorias em relação à média global. Codificação de alvo ordenada do CatBoost é uma implementação robusta.
  2. Codificação de frequência – Use a contagem de cada categoria como uma característica numérica. Isso muitas vezes funciona bem com modelos de árvores porque categorias frequentes são mais prováveis de serem preditores confiáveis.
  3. Hashing de feitura – Categorias de mapas para um número fixo de caixas (por exemplo, 2^16) usando uma função de hash. Esta é uma escolha prática para cardinalidade muito alta, mas pode introduzir ruído de colisões.
  4. Grupo de categorias raras – Combine todas as categorias que aparecem menos do que, digamos, 5 vezes em um único grupo “outro” . Isso reduz a cardinalidade e estabiliza o modelo.
  5. Usando métodos específicos de árvore – Bibliotecas como LightGBM podem lidar com cardinalidades até milhares de eficientemente sem explodir a matriz de características porque aprendem a agrupar categorias internamente.

Impacto no desempenho e na interpretabilidade do modelo

O método de codificação afeta diretamente tanto a precisão quanto a interpretabilidade das árvores de decisão. Por exemplo, a codificação a quente produz divisões que são fáceis de explicar: “se a ocupação é ‘engenheiro’, em seguida, ramificar à esquerda.” Em contraste, a codificação de etiquetas pode produzir condições de divisão como “ocupação >= 3,5”, que não tem sentido, a menos que as etiquetas correspondam a uma verdadeira ordem.

De uma perspectiva de desempenho, a escolha pode alterar quais variáveis são selecionadas como divisões de raiz. A codificação incorreta pode fazer com que a árvore favoreça as funcionalidades que aparecem mais frequentemente ou têm maior variância nos valores codificados, levando a divisões subótimas. As experiências mostraram que usar a codificação ordinal correta (por exemplo, mapear o nível de educação educação para 0,1,2,3) melhora consistentemente a precisão sobre a codificação simples de etiquetas nas funcionalidades ordinais. Para as funcionalidades nominais, a codificação one- hot supera a codificação de etiquetas, porque a árvore pode testar categorias individuais sem impor uma ordenação falsa.

Resultados da pesquisa: Um estudo de 2020 comparando métodos de codificação para árvores com crescimento gradiente descobriu que o manuseio categórico incorporado da CatBoost obteve o menor erro de generalização em uma variedade de conjuntos de dados, seguido de codificação alvo com validação cruzada, enquanto a codificação a quente foi melhor para uma cardinalidade muito baixa.

Dicas práticas e melhores práticas

  • Sempre dividido antes de codificar – Calcular estatísticas de codificação (por exemplo, significa destino, frequências) no conjunto de treino apenas, em seguida, aplicar os mesmos mapeamentos ao conjunto de testes. Nunca usar todo o conjunto de dados para computar codificações.
  • Use um gasoduto – Em scikit-learn, combine e codificadores em para evitar fugas de dados e simplificar a validação cruzada.
  • Verifique categorias invisíveis – Na produção, novas categorias podem aparecer. Decida sobre uma estratégia: ignorar (descartar), mapear para um valor especial “desconhecido” ou manter um recuo (por exemplo, meio global para codificação de alvo).
  • Teste múltiplas codificações – O melhor método depende do conjunto de dados. Execute um pequeno experimento de validação cruzada comparando uma única opção, etiqueta, frequência e codificação de alvo (com validação cruzada adequada) em um conjunto de validação.
  • Aproveite o suporte nativo quando possível – Se você estiver livre para escolher a biblioteca do modelo, escolha CatBoost ou LightGBM para evitar dores de cabeça de codificação manuais, especialmente com recursos de alta cardioriedade.
  • Cuidado com a codificação de etiquetas para dados nominais – Quase sempre prejudica o desempenho. Se você deve usar codificação de etiquetas (por exemplo, devido a restrições de memória), pelo menos randomize a atribuição de etiquetas para reduzir o efeito de ordenação espúrio.
  • Bin ou grupo categorias raras – Uma boa regra de polegar: combinar categorias que aparecem em menos de 1% dos dados de treinamento em um único grupo. Isso reduz o ruído e estabiliza o modelo.
  • Vigie se há vazamento de dados na codificação do alvo – Use sempre validações cruzadas ou dobras separadas para calcular os meios de destino, ou use bibliotecas que implementem a ordenação (como CatBoost).A codificação do alvo vazou pode causar desempenho super-ótimista durante a validação e a generalização pobre.

Conclusão

As variáveis categóricas são uma parte fundamental de muitos conjuntos de dados do mundo real. Embora os modelos de árvore de decisão sejam robustos e interpretáveis, o seu sucesso depende da preparação correta de características categóricas. Este artigo abrangeu as principais estratégias de codificação – etiqueta, um-quente, frequência, alvo, binário e hashing –, bem como as capacidades nativas das bibliotecas populares baseadas em árvores.

  • Coincidir com a codificação com o tipo de variável (ordinário vs nominal).
  • Para recursos de alta cardinalidade, prefira codificação de alvo com regularização ou use bibliotecas com suporte categórico embutido.
  • Evitar fugas de dados através de codificações computacionais apenas em dados de treino.
  • Experimente com diferentes métodos usando validação cruzada para encontrar a melhor configuração para o seu conjunto de dados específico.

Ao manipular com cuidado variáveis categóricas, você pode desbloquear todo o potencial de modelos de árvore de decisão – alcançando melhor precisão preditiva, mantendo a interpretabilidade que torna as árvores tão valiosas.