¿Cómo codificar variables categóricas?

En este tutorial te explico cómo codificar variables categóricas con ejemplos en Python y cómo elegir el mejor método de codificación en tu dataset.

¿Qué son las variables categóricas?

En un dataset, las variables categóricas son aquellas que indican que una observación pertenece a una categoría determinada.

Su valor representa la categoría a la que pertenecen y se suelen caracterizar por ser de tipo texto o estar representada por un caracter.

Ejemplos de variables categóricas

Por ejemplo, un dataset con información sobre el estado civil sería una variable categórica:

  • Estado civil:
    • Soltero
    • Casado
    • Viudo
    • Divorciado

Otra variable categórica sería una representando el color de algo en nuestro dataset:

  • Color:
    • Rojo
    • Verde
    • Amarillo

En un dataset con información sobre vehículos podríamos tener una variable categórica con el color del coche.

O la calificación en un examen si estuviéramos ante un dataset con información sobre estudiantes:

  • Calificación:
    • A
    • B
    • C
    • D

⚠️ Pero ojo, porque no siempre es el caso. A veces un número también puede estar representando una variable categórica si su principal función es indicar que la observación pertenece a una categoría determinada.

Por ejemplo, este podría ser el caso del código postal. El código postal puede estar representado como un número entero (como en el caso de España) y indicar que una dirección pertenece a una zona geográfica determinada.

¿Cómo identificar una variable categórica en un dataset?

Lo primero que podemos hacer para identificar las variables categóricas de nuestro dataset es fijarnos en el tipo de datos. Si es tipo string o un caracter tenemos grandes posibilidades de que estemos ante una variable categórica.

Las variables con textos o etiquetas, como nombres de países, tipos de productos, o clasificaciones, suelen ser categóricas.

A veces, los números se usan para representar categorías (como códigos de género, donde 1 = Masculino y 2 = Femenino o los códigos postales que te decía antes). Estas características son categóricas aunque sean números.

Para detectar más variables categóricas fíjate en esto cuando estés haciendo un análisis de las distribuciones de tus características:

  • Si una variable tiene un número relativamente pequeño y fijo de valores únicos, es probable que sea categórica.
  • Si los valores se repiten en patrones específicos o se agrupan en categorías definidas estarás ante una variable categórica.

Además, a menudo, los datasets vienen con descripciones o documentación que define el tipo de cada variable. Revisar esta información puede aclararte la naturaleza categórica de algunas variables.

Sin olvidar que toda la información que puedas obtener sobre el dominio del problema que intentas resolver y el sentido común te ayudarán a discernir si una variable es o no categórica.

Tipos de variables categóricas

Una vez que tengamos fichadas las variables categóricas de nuestro dataset podremos diferenciarlas entre variables categóricas ordinales o nominales.

Esto es importante para elegir después el método de codificación óptimo para cada una de ellas.

Variables categóricas ordinales

Las variables ordinales implican un orden o jerarquía entre las diferentes categorías a las que puede pertenecer la variable.

Esto significa que puedes establecer cuál es mayor o menor, mejor o peor, etc., en algún sentido específico.

Un ejemplo típico de variable ordinal sería el nivel de educación (primaria, secundaria, universitaria), donde claramente hay un orden de progresión.

Variables categóricas nominales

Las variables nominales representan categorías que no tienen un orden o jerarquía específico entre sí.

Su principal característica es que permiten clasificar elementos en grupos distintos, pero sin que puedas definir un orden entre estos grupos.

Un ejemplo claro de variable nominal es el color. Los colores (rojo, azul, verde, ...) simplemente nombran categorías sin indicar ningún tipo de orden o grado.

Variables categóricas binarias

Las variables categóricas binarias son un tipo especial de variables categóricas nominales en las que sólo hay dos categorías posibles.

Algunos ejemplos comunes incluyen:

  • Presencia/Ausencia: Indica si un elemento posee o no una característica particular. Por ejemplo si un vehículo tiene seguro o no tiene seguro.
  • Sí/No: Responde a una pregunta con dos posibles respuestas (ejemplo: sí está suscrito, no está suscrito).
  • Verdadero/Falso: Denota la veracidad de una afirmación (ejemplo: la afirmación es verdadera, la afirmación es falsa).

Técnicas de codificación de variables categóricas en Python

Tal vez te estés preguntando por qué es necesario codificar las variables categóricas.

Bien.

Es sencillamente porque muchos modelos de Machine Learning no soportan trabajar con datos no numéricos.

🎯 El objetivo es ser capaces de representar las variables categóricas de nuestro dataset mediante números.

Así que a continuación te presento algunas técnicas para poder codificar las variables categóricas en Python así como sus ventajas e inconvenientes y cuándo elegirlas.

Pero antes te presento el dataset sobre el que vamos a trabajar hoy.

Ejemplo de codificación de variables categóricas

Vamos a codificar las variables categóricas del dataset de aprobación de operaciones de crédito.

Este dataset es el mismo que utilizamos en el tutorial de tratamiento de valores faltantes.

Si no lo has hecho todavía te recomiendo que le eches un vistazo porque para empezar a codificar las variables categóricas tendremos que habernos asegurado primero de que nuestro dataset está completo y no le falta ningún valor.

Como recordarás, en este dataset todos los nombres de características y valores han sido cambiados a símbolos arbitrarios para proteger la confidencialidad de los datos.

Así que prepara un Notebook de Google Colab y vamos a ello. No es necesario que te instales nada, solo te hace falta una cuenta en Google 🙂

Para poder utilizar el dataset directamente en Google Colab sólo tienes que seguir este tutorial y sustituir el dataset que se descarga en ese tutorial por el que realmente queremos utilizar aquí.

!kaggle datasets download -d martaarroyo/credit-approval-dataset

Una vez descargado importamos las librerías que vamos a utilizar.

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split

Y lo primero que hacemos es un tratamiento de valores faltantes exprés.

(Recuerda que si quieres aprender en profundidad todo sobre cómo lidiar con los valores faltantes en tu dataset tienes un tutorial completo para hacerlo haciendo clic en el enlace).

Membresía requerida

Este contenido está disponible únicamente para suscriptores.

Puedes apuntarte a la plataforma en este enlace

¿Ya eres un ninja? logeate aquí

One-hot encoding

Con este tipo de codificación creamos una columna para cada categoría y si la observación pertenece a esa categoría asignamos un 1.

Si no, un 0.

Lo que estamos haciendo es representar la variable categórica como un conjunto de características binarias.

Ten en cuenta que para codificar una variable categórica con k valores posibles necesitaremos crear k nuevas columnas.

En nuestro ejemplo tenemos 3 colores diferentes por lo que necesitamos tres columnas nuevas.

También podríamos crear únicamente dos columnas nuevas y cuando la variable categórica no pertenece a ninguna de esas dos categorías, significa que lo hace a la que falta.

Por ejemplo, si eliminamos la columna Rojo (puedes taparla con la mano), la observación de la fila 3 no pertenece ni a la categoría Azul, ni a la categoría Amarillo (no hay un 1 en ninguna) por lo que sabremos el color es el Rojo.

💡 Para codificar mediante One-Hot Encoding una variable categórica con k categorías posibles, necesitaremos crear un mínimo de k-1 columnas nuevas.

  • Es más eficiente computacionalmente.

Sin embargo hay ocasiones en las que puede sernos útil crear las k columnas nuevas:

  • Cuando necesitamos una representación explícita de cada categoría
  • Al entrenar modelos basados en árboles de decisión: Cuando entrenamos un árbol de decisión, el modelo busca la mejor característica y el mejor punto de división dentro de esa característica para dividir los datos de manera que mejore un criterio específico. Al aplicar one-hot encoding y crear una variable binaria para cada categoría, permites que el árbol:
    • Considere cada categoría individualmente.
    • Evite suposiciones sobre la relación entre categorías.

One-hot encoding en Pandas

Para codificar variables categóricas en Pandas tenemos get_dummies().

Membresía requerida

Este contenido está disponible únicamente para suscriptores.

Puedes apuntarte a la plataforma en este enlace

¿Ya eres un ninja? logeate aquí

One-hot encoding en Scikit-learn

Para aplicar la codificiación One-Hot en Scikit-learn tenemos OneHotEncoder().

Membresía requerida

Este contenido está disponible únicamente para suscriptores.

Puedes apuntarte a la plataforma en este enlace

¿Ya eres un ninja? logeate aquí

Diferencias entre get_dummies y OneHotEncoder

Ahora que ya hemos visto qué hace get_dummies() de Pandas y OneHotEncoder()de Scikit learn vamos a ver las principales diferencias entre ambos.

OneHotEncoder (Scikit-learn)get_dummies (Pandas)
Manejo de tipos de datosPuede manejar strings y números categóricos directamente.Funciona mejor con strings; los números categóricos deben ser convertidos a strings.
Uso con modelos de MLSe integra con pipelines y transformadores de scikit-learn para flujos de trabajo complejos.Más simple y directo, adecuado para análisis de datos sin integración de scikit-learn.
Manejo de categorías desconocidasCapacidad para manejar categorías desconocidas con el parámetro handle_unknown.No tiene funcionalidad incorporada para manejar categorías desconocidas. Hay que hacerlo a mano.
Almacenamiento de información de categoríasAjusta el codificador una vez y úsalo en múltiples conjuntos de datos.Codifica basándose en las categorías presentes; puede resultar en diferentes codificaciones si se aplica por separado a diferentes conjuntos de datos.
Salida de datosPor defecto devuelve un array de NumPy.Siempre devuelve un DataFrame de Pandas.

One-Hot Encoding en las categorías más frecuentes

El principal problema de aplicar One-Hot Encoding para codificar las variables categóricas es que si el número de categorías es muy alto crearemos muchas columnas nuevas.

Membresía requerida

Este contenido está disponible únicamente para suscriptores.

Puedes apuntarte a la plataforma en este enlace

¿Ya eres un ninja? logeate aquí

Codificación binaria

La codificación binaria es un tipo de codificación de variables categóricas que utiliza código binario.

A cada categoría le asignamos un número que luego sustituimos por su código binario, es decir, por su representación con 0 y 1.

Si te fijas, en el ejemplo tenemos un color más (Azul) que en el ejemplo de One-Hot encoding y nos hace falta una columna menos.

💡 Utilizando codificación binaria necesitamos menos columnas (características) nuevas para codificar la variable categórica.

Si tenemos k categorías distintas necesitaremos log2(k) columnas nuevas.

La desventaja principal es que es las nuevas características son mucho más difíciles de interpretar que en el caso de One-Hot encoding.

Membresía requerida

Este contenido está disponible únicamente para suscriptores.

Puedes apuntarte a la plataforma en este enlace

¿Ya eres un ninja? logeate aquí

Codificación de frecuencia

Esta codificación asigna valores basados en la frecuencia de las categorías.

Membresía requerida

Este contenido está disponible únicamente para suscriptores.

Puedes apuntarte a la plataforma en este enlace

¿Ya eres un ninja? logeate aquí

Codificación ordinal

Esta técnica es súper sencilla porque lo único que tienes es sustituir las categorías por números del 1 a k, dónde k es el número de categorías que tienes en esa caracaterística.

Membresía requerida

Este contenido está disponible únicamente para suscriptores.

Puedes apuntarte a la plataforma en este enlace

¿Ya eres un ninja? logeate aquí

Codificación utilizando el objetivo

Una manera de intentar incorporar información sobre el objetivo directamente en la codificación de las variables categóricas es utilizar la variable objetivo.

Una de las técnicas de este estilo más habituales es la codificación de la variable categórica con la media del objetivo (target mean encoding), que es el método que vamos a ver en este tutorial pero te puedes poner tan creativo como quieras 🚀

Membresía requerida

Este contenido está disponible únicamente para suscriptores.

Puedes apuntarte a la plataforma en este enlace

¿Ya eres un ninja? logeate aquí

Cómo elegir el mejor método de codificación de variables categóricas

En este tutorial hemos visto distintos métodos para codificar variables categóricas y los hemos implementado en Python con Pandas y/o con Scikit-learn.

¿Es mejor la codificación binaria que One-Hot encoding? ¿Cuál es la que deberías usar?

Depende.

Depende de tus datos, del tipo de modelo que quieras utilizar, y de tus objetivos. No existe un método universalmente superior y la elección adecuada varía según el contexto.

Aquí te dejo algunas consideraciones y recomendaciones para ayudarte a decidir:

Membresía requerida

Este contenido está disponible únicamente para suscriptores.

Puedes apuntarte a la plataforma en este enlace

¿Ya eres un ninja? logeate aquí

Accede a todo el contenido premium

Ya no necesitas pagar cientos de euros por un Bootcamp para convertirte en ninja de los datos. Por solo 17€/mes (o menos 🤯), obtén acceso al podcast premium, a todos los tutoriales y a los resúmenes de los libros más top sobre Machine Learning y Ciencia de datos y aprende a tu ritmo.
¡Empieza ahora!
Copyright © 2024  · Datos 🥷 · Todos los derechos reservados