Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

Feature engineering, Unidad 5 — Variables categóricas, 5.1 — Tipos de variables categóricas ·

Ordinales

Variables ordinales: Un enfoque práctico para el feature engineering

Introducción

Las variables ordinales son un tipo de variable categórica que tiene un orden natural. Este orden implica una jerarquía entre las categorías, pero no proporciona información sobre la magnitud relativa entre ellas. Por ejemplo, si consideramos la escala de gravedad médica (leve, moderado, grave), aunque sabemos que "grave" es más severo que "moderado", no podemos decir cuánto más severo es uno en relación con el otro.

Las variables ordinales son importantes para el feature engineering porque pueden mejorar significativamente la precisión de los modelos de machine learning. Sin embargo, su correcta transformación y utilización puede ser una tarea compleja. En este artículo, exploraremos cómo manejar eficazmente las variables ordinales en el contexto del feature engineering.

Explicación principal

Las variables ordinales pueden transformarse a través de varios métodos para que puedan ser utilizadas por modelos de machine learning. La elección del método depende del tipo de modelo y la naturaleza de los datos.

Codificación numérica

Una de las formas más directas de manejar variables ordinales es asignando un número entero a cada categoría en función de su orden. Este proceso se conoce como label encoding:

import pandas as pd

# Ejemplo de variable ordinal
data = {'level': ['light', 'moderate', 'severe']}
df = pd.DataFrame(data)

# Codificación numérica
df['ordinal'] = df['level'].astype('category').cat.codes

print(df)

En este ejemplo, "light" se convierte en 0, "moderate" en 1 y "severe" en 2. Sin embargo, esta transformación no mantiene la interpretabilidad de las distancias entre las categorías.

One-hot encoding

Otra opción es convertir las variables ordinales a un conjunto de variables binarias (one-hot encoding). Esto crea una nueva columna para cada categoría y asigna un valor 1 en la columna correspondiente si el dato pertenece a esa categoría, o 0 en caso contrario.

# Ejemplo de one-hot encoding
df = pd.get_dummies(df, columns=['level'])

print(df)

El one-hot encoding puede ser útil para modelos que no asumen un orden entre las categorías (como los algoritmos basados en árboles), pero también incrementa el número de características y puede resultar en overfitting.

Target encoding

La target encoding es una técnica más avanzada donde se asigna a cada categoría la media de la variable objetivo. Este método mantiene la relación ordinal y proporciona una representación numérica que los modelos pueden interpretar mejor:

from sklearn.model_selection import train_test_split

# Ejemplo de target encoding
train, test = train_test_split(df, test_size=0.2)

mean_level = train.groupby('level')['ordinal'].mean().to_dict()

# Aplicar target encoding en el conjunto de entrenamiento y prueba
train['ordinal'] = train['level'].map(mean_level)
test['ordinal'] = test['level'].map(mean_level)

print(train[['level', 'ordinal']])

La target encoding puede mejorar significativamente la precisión del modelo, pero requiere un uso cuidadoso para evitar overfitting y asegurar la consistencia en el conjunto de prueba.

Errores típicos / trampas

Crear variables sin sentido

Una mala práctica común es crear nuevas variables basadas solo en intuiciones o supuestos sin una base sólida. Por ejemplo, asignar un valor numérico a cada categoría sin considerar el orden real puede llevar a resultados no interpretables y potencialmente inexactos.

Usar información futura

La target encoding con datos del conjunto de prueba en el conjunto de entrenamiento es una práctica que debe evitarse. Esto puede dar lugar a overfitting, ya que las predicciones del conjunto de prueba se basan en los mismos datos de entrenamiento.

Data leakage

El uso inadecuado de variables ordinales puede llevar al data leakage. Por ejemplo, si el número de días desde un evento es utilizado para codificar una variable ordinal, esta variable podría contener información sobre la fecha del evento, lo que no debería estar disponible en tiempo real.

Checklist accionable

  1. Identifica las categorías: Análiza cuidadosamente las variables ordinales y determina el orden natural entre ellas.
  2. Elige la técnica adecuada: Basado en el modelo y los datos, selecciona una técnica de codificación (label encoding, one-hot encoding o target encoding).
  3. Evita overfitting: Usa validación cruzada para evaluar la consistencia del modelo.
  4. Consiste en el entrenamiento y prueba: Asegúrate de que el procesamiento de las variables ordinales sea consistente entre ambos conjuntos.
  5. Evalúa la interpretabilidad: Verifica que la transformación no altere significativamente la interpretabilidad del modelo.

Siguientes pasos

  1. Practica con diferentes datasets: Aplica los conocimientos adquiridos en proyectos reales para ganar experiencia práctica.
  2. Explora modelos más avanzados: Investiga cómo manejar variables ordinales en modelos basados en árboles y ensembles, ya que requieren un enfoque diferente.
  3. Aprende optimización de hiperparámetros: Mejora la precisión del modelo ajustando parámetros relacionados con las variables ordinales.

Este artículo proporciona una guía práctica para trabajar con variables ordinales en el contexto del feature engineering, desde su identificación hasta su transformación y uso efectivo. Siguiendo estas pautas, podrás mejorar significativamente la precisión de tus modelos de machine learning.

Contacto

Indica tu objetivo (ChatGPT, RAG, agentes, automatización) y tu stack (web/backend).