Codificación básica para preprocesamiento de datos en Python puro
Introducción
En la preparación de los datos para machine learning (ML), una etapa crucial es el preprocesamiento. Este proceso implica transformar y limpiar los datos brutos antes de aplicar modelos ML. El preprocesamiento puede implicar cualquier cosa, desde manejar valores faltantes hasta codificar variables categóricas. En este artículo, exploraremos la codificación básica de variables categóricas en Python puro.
Explicación principal con ejemplos
La codificación de variables categóricas es un paso fundamental para que los modelos ML puedan trabajar con datos no numéricos. Hay varios métodos comunes para codificar variables categóricas, incluyendo one-hot encoding, dummy variable encoding y label encoding.
Ejemplo: One-Hot Encoding
One-hot encoding convierte cada categoría en una nueva columna binaria (0 o 1), donde solo una de las columnas tiene un valor 1 para cada observación. Este método evita el problema del "dummy variable trap" y es especialmente útil cuando los datos categóricos no tienen orden.
import pandas as pd
# Crear un DataFrame de ejemplo con una columna categórica
df = pd.DataFrame({'color': ['rojo', 'azul', 'verde']})
# Codificar usando one-hot encoding en Python puro
def one_hot_encoding(df, column_name):
unique_values = df[column_name].unique()
for value in unique_values:
df[value] = (df[column_name] == value).astype(int)
del df[column_name]
return df
one_hot_encoded_df = one_hot_encoding(df, 'color')
print(one_hot_encoded_df)
Ejemplo: Label Encoding
Label encoding asigna un valor numérico a cada categoría. Es útil cuando las relaciones entre las categorías tienen algún orden o ponderación. Sin embargo, debe usarse con precaución para evitar el "dummy variable trap".
def label_encoding(df, column_name):
unique_values = df[column_name].unique()
value_mapping = {value: idx for idx, value in enumerate(unique_values)}
df[column_name] = df[column_name].map(value_mapping)
return df
label_encoded_df = label_encoding(df, 'color')
print(label_encoded_df)
Errores típicos / trampas
Trampa 1: Olvidar la codificación inversa
Es común codificar los datos para entrenar un modelo y luego olvidarse de decodificarlos al hacer predicciones o interpretaciones. Si no se recupera la codificación, podrás perder información valiosa.
# Ejemplo de error en el proceso de codificación inversa
encoded_df = label_encoding(df, 'color')
decoded_df = encoded_df.copy()
decoded_df['color'] = decoded_df.apply(lambda row: list(unique_values)[row['color']], axis=1)
Trampa 2: Ignorar la consistencia en la codificación
Si no se mantiene consistente el mapeo de valores numéricos a categorías, podrás obtener resultados erróneos o inconsistentes. Es importante documentar y mantener un registro del mapeo usado.
# Ejemplo de inconsistencia en la codificación
mapping1 = {'rojo': 0, 'azul': 1, 'verde': 2}
mapping2 = {'rojo': 0, 'azul': 2, 'verde': 1}
df_encoded_1 = label_encoding(df, 'color', mapping1)
df_encoded_2 = label_encoding(df, 'color', mapping2)
Trampa 3: No manejar los valores no vistos
Durante el preprocesamiento de datos en producción, es común que se encuentren valores que no estaban presentes durante la fase de entrenamiento. Es importante diseñar un sistema para manejar estos casos de manera adecuada.
# Ejemplo de error al manejar valores no vistos
new_row = pd.DataFrame({'color': ['naranja']})
df_encoded = label_encoding(df, 'color')
try:
new_row['color'] = df_encoded['color'].map({**{value: idx for idx, value in enumerate(unique_values)}, **{'naranja': -1}})
except KeyError as e:
print(f"Error: {e}. Manejar valor no vistado.")
Checklist accionable
- Codifica consistentemente: Utiliza el mismo mapeo de valores numéricos a categorías en todo tu proceso.
- Mantén un registro de codificación: Documenta cómo se han transformado las variables categóricas y cómo se decodificarán para interpretaciones o predicciones.
- Maneja los valores no vistos: Define una estrategia para manejar nuevos valores que puedan surgir durante el procesamiento de datos en producción.
- Valida la codificación inversa: Revisa constantemente si la codificación inversa se realiza correctamente y documenta cualquier cambio.
- Utiliza librerías especializadas: Considera usar bibliotecas como
pandasoscikit-learnpara simplificar y asegurar el preprocesamiento.
Siguientes pasos
- Explora más técnicas de codificación: Aprende sobre otras formas de codificación, como ordinal encoding.
- Implementa en proyectos reales: Aplica las técnicas aprendidas a un proyecto real para mejorar tu entendimiento y habilidades prácticas.
- Asegúrate del rendimiento: Evalúa el impacto que tiene la codificación en el rendimiento del modelo ML.
Siguiendo estos pasos, podrás preparar tus datos de manera efectiva y asegurar que estén listos para ser utilizados en modelos de machine learning.