La etapa final del pipeline de preprocesamiento prepara los datos en el formato exacto que requieren los algoritmos de scikit-learn y XGBoost. Antes de entrenar cualquier modelo es necesario completar tres pasos: separar las features de la variable objetivo, construir elDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/HelenDiMo/pildora-bootcamp-preprocesamiento/llms.txt
Use this file to discover all available pages before exploring further.
ColumnTransformer que imputa nulos y codifica variables categóricas, y dividir el dataset en conjuntos de entrenamiento y test preservando la proporción de clases. Las tres funciones de app/logic/preprocessing.py encapsulan estas responsabilidades de forma modular y reproducible.
Función encoding
encoding separa el dataframe en la matriz de features X y el vector objetivo y, y define explícitamente las listas de columnas numéricas y categóricas que el preprocesador necesita conocer:
encoding(df) → tuple[pd.DataFrame, pd.Series, list, list]
| Parámetro | Tipo | Descripción |
|---|---|---|
df | pd.DataFrame | Dataframe con las 8 columnas (incluyendo bill_ratio) |
| Variable | Tipo | Descripción |
|---|---|---|
X | pd.DataFrame | 7 columnas de features (5 numéricas + 2 categóricas) |
y | pd.Series | Variable objetivo: species (Adelie / Chinstrap / Gentoo) |
num_cols | list[str] | Lista de nombres de columnas numéricas |
cat_cols | list[str] | Lista de nombres de columnas categóricas |
Función split_train_test
split_train_test divide los datos en conjuntos de entrenamiento y test usando los parámetros canónicos del módulo:
split_train_test(X, y) → tuple[pd.DataFrame, pd.DataFrame, pd.Series, pd.Series]
Los parámetros clave de train_test_split son:
test_size=0.2: el 20 % de los datos (≈69 filas) se reservan para test; el 80 % (≈275 filas) se usan para entrenamiento.random_state=42: fija la semilla aleatoria para garantizar reproducibilidad — la misma división en cada ejecución.stratify=y: asegura que la proporción de cada clase (Adelie, Chinstrap, Gentoo) sea idéntica en train y en test. Sin este parámetro, una división aleatoria podría sobrerrepresentar o infrarrepresentar a Chinstrap (la clase minoritaria con solo 68 ejemplares).
Función build_preprocessor
build_preprocessor construye el ColumnTransformer de scikit-learn que agrupa las transformaciones de las columnas numéricas y categóricas en un único objeto:
build_preprocessor(num_cols, cat_cols) → ColumnTransformer
El ColumnTransformer aplica dos sub-pipelines en paralelo:
Pipeline numérico ('num')
SimpleImputer(strategy='median') sustituye los valores nulos de las 5 columnas numéricas con la mediana de cada columna calculada sobre el conjunto de entrenamiento. La mediana es preferible a la media porque es robusta frente a outliers: en columnas como bill_length_mm, un valor extremo no desplazará el valor de imputación.
Pipeline categórico ('cat')
Se ejecutan dos pasos en secuencia:
SimpleImputer(strategy='most_frequent'): rellena los 11 nulos de la columnasexcon el valor más frecuente (la moda) calculado sobre el conjunto de entrenamiento.OneHotEncoder(handle_unknown='ignore'): codificaisland(3 categorías → 3 columnas binarias) ysex(2 categorías → 2 columnas binarias) como variables dummy. El parámetrohandle_unknown='ignore'hace que las categorías no vistas durante el entrenamiento se codifiquen como un vector de ceros en lugar de lanzar un error.
Uso conjunto
El flujo completo de las tres funciones se encadena de la siguiente forma:preprocessor resultante se integra como primer paso en un Pipeline de scikit-learn junto con el clasificador:
build_preprocessor devuelve un ColumnTransformer que todavía no ha sido ajustado. Las estadísticas de imputación (mediana de cada columna numérica, moda de sex) se calculan únicamente cuando se llama a pipeline.fit(X_train, y_train). El preprocesador aprende esos valores exclusivamente del conjunto de entrenamiento para evitar data leakage desde el test set.