Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

Scikit-learn desde cero, Unidad 4 — Preprocesado de datos, 4.2 — Variables categóricas ·

Errores frecuentes

Errores frecuentes en el preprocesado de variables categóricas con scikit-learn

Introducción

Cuando se trabaja con datos en machine learning, especialmente cuando estos incluyen variables categóricas, es esencial tener un buen entendimiento del preprocesamiento necesario para convertir estas variables a una forma que los modelos de aprendizaje automático puedan utilizar. En el caso de scikit-learn, hay varios transformadores disponibles como OneHotEncoder y OrdinalEncoder para manejar las variables categóricas. Sin embargo, incluso con la amplia gama de herramientas proporcionadas por scikit-learn, es común cometer errores durante este proceso. A continuación, exploraremos algunos de estos errores frecuentes, cómo evitarlos y ofreceremos una lista de verificación para asegurar un preprocesamiento correcto.

Explicación principal con ejemplos

Para ilustrar el preprocesado de variables categóricas en scikit-learn, primero importaremos los paquetes necesarios:

import pandas as pd
from sklearn.preprocessing import OneHotEncoder, OrdinalEncoder

Usando OneHotEncoder incorrectamente

Un error común es no entender cómo funciona el OneHotEncoder. Este transformador codifica las variables categóricas en una forma que se puede usar en modelos de aprendizaje automático. Sin embargo, si no se le proporcionan correctamente los datos, puedes terminar con un conjunto de características innecesariamente grandes o mal interpretadas.

# Ejemplo incorrecto usando OneHotEncoder
data = pd.DataFrame({'color': ['rojo', 'verde', 'azul']})
encoder = OneHotEncoder()
X_encoded = encoder.fit_transform(data['color'])

En este ejemplo, fit_transform se aplica solo a la columna 'color', lo que puede no ser lo deseado. En lugar de eso, deberíamos aplicar el transformador a todo el DataFrame:

# Ejemplo correcto usando OneHotEncoder
data = pd.DataFrame({'color': ['rojo', 'verde', 'azul']})
encoder = OneHotEncoder()
X_encoded = encoder.fit_transform(data)

Usando OrdinalEncoder incorrectamente

El OrdinalEncoder asume que el orden en el que aparecen las etiquetas categóricas en la variable tiene un significado, lo cual puede no siempre ser el caso. Al usar este transformador sin tomar en cuenta esta característica, podrías terminar con predicciones sesgadas o errores en tu modelo.

# Ejemplo incorrecto usando OrdinalEncoder
data = pd.DataFrame({'color': ['rojo', 'verde', 'azul']})
encoder = OrdinalEncoder()
X_encoded = encoder.fit_transform(data['color'])

En este ejemplo, OrdinalEncoder asigna números en orden alfabético a las etiquetas categóricas. Sin embargo, si la variable categórica no tiene una relación ordinal clara (por ejemplo, "rojo", "verde", "azul"), esto puede llevar a problemas.

No considerar el balanceo de los datos

A menudo, olvidamos que los transformadores como OneHotEncoder y OrdinalEncoder pueden alterar el balanceo natural de las etiquetas. Si tus variables categóricas están desbalanceadas (por ejemplo, 90% "rojo", 10% "verde" y 0% "azul"), aplicar un transformador podría cambiar esta distribución.

# Ejemplo incorrecto considerando el balanceo de datos
data = pd.DataFrame({'color': ['rojo', 'rojo', 'verde'] * 90, 'target': [1, 0, 0]})
encoder = OneHotEncoder()
X_encoded = encoder.fit_transform(data['color'])

En este ejemplo, OneHotEncoder transforma las etiquetas categóricas en una forma que se puede usar en modelos de aprendizaje automático. Sin embargo, si no consideramos el balanceo original de los datos, podríamos terminar con un modelo sesgado.

Errores típicos / trampas

  1. No entender la diferencia entre fit y transform: Asegúrate de que entiendes cuándo usar fit_transform, fit e transform. Usarlos incorrectamente puede llevar a resultados inesperados.
  1. Ignorar el balanceo de datos: Como se mencionó anteriormente, los transformadores pueden alterar la distribución de las etiquetas categóricas. Esto es especialmente problemático en problemas con datos desbalanceados.
  1. Usar transformadores sin considerar la relación ordinal: El OrdinalEncoder asume que el orden de las etiquetas tiene un significado. Si no es así, este transformador puede introducir sesgos en tu modelo.
  1. No validar los modelos después del preprocesamiento: Es importante asegurarte de que tus modelos funcionan correctamente después de aplicar cualquier transformador. No todos los transformadores mejoran el rendimiento del modelo y algunos pueden incluso empeorarlo.

Checklist accionable

  1. Entiende la naturaleza de las variables categóricas: Asegúrate de que entiendes si tus variables categóricas tienen una relación ordinal o no.
  1. Usa fit_transform con precaución: Asegúrate de aplicar correctamente el método fit_transform, y considera usar fit e transform separadamente para mejorar la legibilidad del código.
  1. Cuida el balanceo de los datos: Verifica que el balanceo natural de tus etiquetas categóricas no se altere después de aplicar un transformador.
  1. Valida tus modelos: Asegúrate de probar y validar tus modelos después de aplicar cualquier transformación en las variables categóricas.
  1. Documenta tu proceso: Mantén un registro claro del preprocesamiento que has aplicado a tus datos para asegurarte de que puedes replicar los resultados.

Siguientes pasos

  • Explora más opciones de transformadores: Aprende sobre otros transformadores disponibles en scikit-learn, como LabelEncoder y CategoricalEncoder.
  • Prueba diferentes estrategias de preprocesamiento: Intenta aplicar diferentes transformadores a tus datos para ver cómo afectan el rendimiento de tu modelo.
  • Entrena modelos más avanzados: Una vez que hayas dominado los conceptos básicos del preprocesamiento, sigue aprendiendo sobre técnicas de machine learning más avanzadas.

Con estos conocimientos y estrategias, estarás mejor preparado para manejar eficazmente el preprocesado de variables categóricas en tus proyectos de machine learning.

Contacto

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