FuncionalidadesCasos de UsoBlogReferencia APIPor Qué CorePlexMLPrecios
Empezar Gratis
← Volver al Blog
Tutoriales10 min read

Preparación de Datos con IA usando el Dataset Builder

Equipo CorePlexML·

Introducción

La preparación de datos es la fase que más tiempo consume en cualquier proyecto de machine learning. Las encuestas de la industria reportan consistentemente que los científicos de datos dedican entre el 60% y el 80% de su tiempo a limpiar, transformar e ingeniar features antes de que se entrene un solo modelo. El trabajo es tedioso, propenso a errores y a menudo se repite entre proyectos con solo variaciones menores.

El Dataset Builder de CorePlexML reimagina este proceso como una conversación. En lugar de navegar por un asistente rígido paso a paso o escribir scripts ad-hoc de pandas, describes lo que necesitas en lenguaje natural y el Builder genera, ejecuta y valida el código de transformación por ti. El LLM subyacente comprende los patrones de preparación de datos y traduce tu intención en Python ejecutable. Cada script generado se muestra para total transparencia.

Este tutorial recorre un flujo de trabajo completo de preparación de datos usando un dataset de churn de clientes como ejemplo.

Cómo Funciona el Dataset Builder

El Dataset Builder es un agente conversacional multi-paso impulsado por un LLM. Cuando inicias una nueva sesión, el Builder perfila tus datos y te guía a través de un pipeline estructurado: perfilado, limpieza, gestión de columnas, ingeniería de features y exportación. En cada paso, el Builder formula preguntas específicas sobre tus datos y preferencias, genera un script de transformación en Python basado en tus respuestas, lo ejecuta y te muestra los resultados.

La decisión arquitectónica clave es que el Builder utiliza preguntas predefinidas en cada paso en lugar de consultas generadas por el LLM de forma abierta. Esto mantiene la conversación enfocada y predecible. Sin embargo, tus respuestas son interpretadas por el LLM mediante clasificación semántica de intención, lo que te permite responder de forma natural en lugar de seleccionar opciones rígidas.

El pipeline en sí es determinista. El LLM guía la conversación, pero cada transformación se ejecuta como un script estándar de pandas. Puedes revisar, modificar o rechazar cualquier código generado antes de que toque tus datos.

Recorrido Paso a Paso

Trabajemos con la preparación de un dataset de churn de clientes. El CSV sin procesar tiene 7,043 filas con columnas que incluyen customerID, gender, SeniorCitizen, tenure, MonthlyCharges, TotalCharges y Churn.

Paso 1: Carga y Perfilado

Tras cargar el CSV, el Builder perfila automáticamente cada columna. Verás un resumen como el siguiente:

  • 7,043 filas, 21 columnas detectadas
  • Tipos de columna: 16 categóricas, 4 numéricas, 1 identificador
  • Valores faltantes: TotalCharges tiene 11 vacíos (0.16%)
  • Conteos de valores únicos: customerID es único (probablemente un identificador), gender tiene 2 valores, Contract tiene 3

El paso de perfilado se ejecuta sin ninguna intervención de tu parte. Establece el contexto para las decisiones de limpieza que vienen a continuación. Presta atención a los conteos de valores faltantes y a la inferencia de tipos de columna, ya que estos determinarán los próximos pasos.

Paso 2: Limpieza

El Builder te consulta sobre tus preferencias de limpieza. Para nuestro dataset de churn, la conversación podría desarrollarse así:

Builder: "Encontré 11 valores faltantes en TotalCharges (0.16%). ¿Cómo te gustaría manejar los valores faltantes? Las opciones incluyen imputación por media, mediana, moda o eliminación de filas con valores faltantes."

Tú: "Usa la mediana para TotalCharges ya que es una columna monetaria y podría tener valores atípicos."

El Builder genera un script que convierte TotalCharges a numérico (los valores vacíos causaban que se leyera como cadena de texto), imputa los 11 valores faltantes con la mediana de la columna y valida que queden cero valores faltantes. El script ejecutado se muestra en un bloque con estilo de terminal para que puedas verificar exactamente qué ocurrió.

Si existen duplicados, el Builder pregunta si deseas eliminarlos basándose en todas las columnas o en un subconjunto. Para nuestro dataset, no se encuentran duplicados exactos, por lo que este sub-paso se omite automáticamente.

Paso 3: Eliminación de Columnas

No todas las columnas pertenecen a un dataset de entrenamiento. El Builder analiza las características de cada columna y pregunta cuáles deseas eliminar.

Builder: "Identifiqué las siguientes columnas que podrían no ser útiles para el modelado: customerID (identificador único, 7043 valores distintos). ¿Te gustaría eliminar alguna columna?"

Tú: "Elimina customerID. Es solo un identificador de fila sin valor predictivo."

El Builder también señala columnas con varianza muy baja o valores casi constantes. Si una columna tiene el 99.9% del mismo valor, aporta prácticamente ninguna información al modelo y puede eliminarse de forma segura. Tú tomas la decisión final sobre cada sugerencia.

Este paso es crítico para evitar fuga de datos (data leakage). Si una columna contiene información que no estaría disponible en el momento de la predicción — como una etiqueta posterior al evento o un agregado derivado — incluirla producirá métricas artificialmente infladas durante el entrenamiento que colapsarán en producción.

Paso 4: Ingeniería de Features

Aquí es donde el Builder aporta mayor valor. La ingeniería de features transforma columnas sin procesar en representaciones de las que los algoritmos de ML pueden aprender de manera más efectiva.

Builder: "Veo varias columnas categóricas. ¿Te gustaría codificarlas? Las opciones incluyen one-hot encoding (crea columnas binarias para cada categoría) o label encoding (mapea categorías a enteros)."

Tú: "Aplica one-hot encoding a las categóricas de baja cardinalidad como gender, Partner, Dependents y Contract. Usa label encoding para InternetService ya que tiene naturaleza ordinal."

El Builder genera un script que aplica pd.get_dummies() para los objetivos de one-hot y LabelEncoder para los ordinales. Para nuestro dataset de churn, la codificación one-hot de Contract (Month-to-month, One year, Two year) produce tres columnas binarias: Contract_Month-to-month, Contract_One year y Contract_Two year.

El escalado es otra transformación habitual. El Builder preguntará si deseas aplicar escalado estándar (media cero, varianza unitaria) o escalado min-max (rango 0-1) a las columnas numéricas como tenure, MonthlyCharges y TotalCharges. El escalado estándar es generalmente preferible para modelos basados en árboles, mientras que min-max funciona mejor para redes neuronales y algoritmos basados en distancia.

Si tu dataset contiene columnas de fecha, el Builder puede extraer features temporales: año, mes, día de la semana, hora y features de tiempo transcurrido. Por ejemplo, una columna signup_date puede transformarse en signup_month, signup_day_of_week y days_since_signup.

Paso 5: Revisión y Exportación

Tras todas las transformaciones, el Builder presenta un resumen de todo lo que cambió:

  • Filas: 7,043 (sin cambios)
  • Columnas: 21 originales, 32 después de la codificación, 31 después de eliminar customerID
  • Valores faltantes: 0
  • Transformaciones aplicadas: imputación por mediana, one-hot encoding (6 columnas), label encoding (1 columna), escalado estándar (3 columnas)

Puedes previsualizar las primeras filas del dataset transformado. Si todo se ve correcto, exporta el resultado como una nueva versión del dataset. Los datos originales nunca se modifican. CorePlexML almacena cada versión con trazabilidad completa, de modo que siempre puedes rastrear hasta la carga original.

# The Builder generates and executes scripts like this:
import pandas as pd
from sklearn.preprocessing import StandardScaler, LabelEncoder

# Convert TotalCharges to numeric, coerce errors to NaN
df["TotalCharges"] = pd.to_numeric(df["TotalCharges"], errors="coerce")

# Impute missing values with median
df["TotalCharges"].fillna(df["TotalCharges"].median(), inplace=True)

# Drop identifier column
df.drop(columns=["customerID"], inplace=True)

# One-hot encode categorical columns
df = pd.get_dummies(df, columns=["gender", "Partner", "Dependents",
                                  "PhoneService", "Contract",
                                  "PaymentMethod"])

# Label encode ordinal column
le = LabelEncoder()
df["InternetService"] = le.fit_transform(df["InternetService"])

# Standard scale numeric columns
scaler = StandardScaler()
df[["tenure", "MonthlyCharges", "TotalCharges"]] = scaler.fit_transform(
    df[["tenure", "MonthlyCharges", "TotalCharges"]]
)

Integración SDK

También puedes manejar el Dataset Builder de forma programática a través del SDK.

from coreplexml import CorePlexMLClient

client = CorePlexMLClient(
    base_url="https://api.coreplexml.io",
    api_key="sk_your_api_key"
)

# Start a builder session
session = client.builder.create_session(
    dataset_version_id="dv_abc123"
)

# Send a message to the builder
response = client.builder.chat(
    session_id=session["session_id"],
    message="Impute missing values with median for all numeric columns"
)
print(response["reply"])
print(response["script"])  # The generated Python code

# Advance through steps
response = client.builder.chat(
    session_id=session["session_id"],
    message="Drop customerID column"
)

# Export the result
export = client.builder.export(session_id=session["session_id"])
print(f"New version: {export['dataset_version_id']}")

Patrones Comunes de Limpieza

Valores Faltantes Numéricos

Para columnas numéricas, la imputación por mediana es la opción más segura por defecto. Es robusta ante valores atípicos, a diferencia de la imputación por media que puede distorsionarse por valores extremos. Si la columna tiene un dominio conocido (por ejemplo, la edad no puede ser negativa), considera agregar un paso de validación posterior a la imputación.

Valores Faltantes Categóricos

La imputación por moda (reemplazo con la categoría más frecuente) funciona bien para columnas de baja cardinalidad. Para mayor cardinalidad, considera crear una categoría explícita "Unknown". Esto preserva la señal de que el valor estaba ausente, lo cual por sí mismo puede ser predictivo.

Categóricas de Alta Cardinalidad

Las columnas con cientos o miles de valores únicos (como códigos postales o SKUs de productos) no deberían codificarse con one-hot directamente. El Builder puede aplicar frequency encoding (reemplaza cada categoría con su frecuencia en el dataset) o target encoding (reemplaza con la media de la variable objetivo para esa categoría). Ambas opciones producen una sola columna numérica en lugar de cientos de columnas binarias dispersas.

Extracción de Features de Fechas

Las columnas de fecha contienen información temporal rica comprimida en un solo valor. El Builder extrae múltiples features: año, mes, día de la semana y tiempo transcurrido desde una fecha de referencia. Una columna como last_purchase_date podría generar days_since_last_purchase, que es mucho más útil para un modelo que la cadena de fecha sin procesar.

Consejos para Mejores Resultados

Sé específico con tus instrucciones. En lugar de decir "limpia los datos", di "imputa los valores faltantes de la columna Age con la mediana y elimina las filas donde Income sea negativo". Cuanto más precisa sea tu solicitud, más exacto será el script generado.

Revisa los scripts generados. El Builder muestra cada línea de código que ejecuta. Tómate un momento para verificar la lógica. Si un script hace algo inesperado, puedes rechazarlo y reformular tu instrucción.

Usa "force" para casos extremos. Si una transformación reduce tu dataset a cero filas (por ejemplo, un filtro excesivamente agresivo), el Builder bloqueará la operación y pedirá confirmación. Si genuinamente deseas continuar, escribe "force" para anular la protección.

Itera en pasos pequeños. En lugar de describir todas las transformaciones en un solo mensaje, trabaja cada paso de forma individual. Esto te da la oportunidad de inspeccionar resultados intermedios y detectar problemas de forma temprana. El formato conversacional está diseñado para este flujo de trabajo iterativo.

Verifica el conteo de columnas después de la codificación. El one-hot encoding puede incrementar dramáticamente el número de columnas. Un dataset con 20 columnas originales podría expandirse a más de 100 después de codificar todas las categóricas. Monitorea los conteos de columnas y considera codificaciones alternativas para features de alta cardinalidad.

El Dataset Builder transforma horas de trabajo manual de preparación de datos en minutos de conversación guiada. Combinado con el sistema de versionado de CorePlexML, cada transformación queda registrada, es reproducible y auditable, brindándote trazabilidad completa desde la carga del archivo sin procesar hasta el conjunto de features listo para ML.