Programa de Prácticas en Ingeniería de ML

Bloque 1: Manipulación Vectorizada y Análisis Exploratorio de Datos

Antes de construir un modelo es necesario conocer la estructura, la calidad y las limitaciones de los datos. Este bloque establece dos estándares de trabajo:

  1. Vectorización: toda manipulación de datos tabulares se expresa mediante operaciones vectorizadas, que delegan el cómputo en implementaciones compiladas. Frente a la iteración fila a fila, son órdenes de magnitud más eficientes y producen código más breve y auditable.
  2. Limpieza programática: la limpieza de datos es un script reproducible que transforma los datos originales en datos procesados. Los datos originales nunca se editan manualmente.

Principio Metodológico: Transformaciones Deterministas frente a Transformaciones Aprendidas

Una transformación determinista no depende de la distribución de los datos (corrección de tipos, normalización de etiquetas, eliminación de duplicados exactos). Una transformación aprendida calcula parámetros a partir de los datos (imputación por media o mediana, escalado, codificación de categorías).

En este bloque solo se aplican transformaciones deterministas. Las transformaciones aprendidas, si se calculasen sobre el conjunto completo, incorporarían información del futuro conjunto de prueba al entrenamiento: es la forma más habitual de Data Leakage. En este bloque se decide la estrategia de imputación; su aplicación se realiza tras la partición de los datos (Bloque 2) y se encapsula en un Pipeline (Bloque 4).

Prerrequisitos

Material de Referencia

  1. Procesamiento de datos tabulares: Complete Kaggle Learn: Pandas. El curso cubre selección, filtrado, agrupamiento y combinación de datos mediante operaciones vectorizadas.
  2. Visualización: Consulte la documentación de Plotly Express. Se utiliza esta API declarativa porque genera figuras interactivas que permiten inspeccionar valores individuales y relaciones multivariables sin código adicional.

Actividad Práctica

  1. Cree la rama feat/b01-eda desde main actualizada.
  2. Añada las entradas data/ y models/ al archivo .gitignore y confirme este cambio antes de incorporar ningún dato.
  3. Ubique el conjunto de datos proporcionado por su responsable de tutoría en data/raw/.
  4. Añada las dependencias del bloque con uv add plotly pyarrow y las dependencias de desarrollo para cuadernos con uv add --dev ipykernel nbformat.
  5. Realice el análisis exploratorio en el cuaderno B01_Manipulacion_y_EDA/eda.ipynb, que debe documentar como mínimo:
    • dimensiones del conjunto de datos, tipos de cada variable y conversiones de tipo necesarias;
    • porcentaje de valores ausentes por variable y patrón de ausencia;
    • número de registros duplicados;
    • cardinalidad de las variables categóricas;
    • distribución de la variable objetivo: grado de desequilibrio si es categórica; asimetría y valores extremos si es continua;
    • relación de las principales variables predictoras con la variable objetivo;
    • identificadores y variables candidatas a fuga del objetivo: variables cuyo valor no estaría disponible en el momento de realizar una predicción real.

Todas las visualizaciones se generan con Plotly Express.

  1. Implemente el script B01_Manipulacion_y_EDA/limpieza.py, ejecutable con uv run python -m B01_Manipulacion_y_EDA.limpieza, que:
    • lea los datos de data/raw/;
    • aplique exclusivamente transformaciones deterministas: corrección de tipos, normalización de etiquetas categóricas, eliminación de duplicados exactos y conversión de valores centinela (p. ej., -999, "N/A") a NaN;
    • escriba el resultado en data/processed/dataset_limpio.parquet.
  2. Restricción de vectorización: el código de los pasos 5 y 6 no puede contener bucles for sobre filas, iterrows(), itertuples() ni apply(axis=1) con funciones de Python. Utilice los métodos vectorizados de pandas y NumPy (indexación booleana con .loc, accesores .str y .dt, np.where, .map, groupby).
  3. No impute valores ausentes en este bloque. Documente en el Pull Request la estrategia de imputación propuesta para cada variable.
  4. Publique la rama y abra un Pull Request hacia main.

Contenido Obligatorio del Pull Request

Criterios de Aceptación

Transición al Bloque 2

El Bloque 2 parte de data/processed/dataset_limpio.parquet, de la estrategia de imputación y de la lista de exclusiones definidas aquí, y las aplica respetando la regla establecida en este bloque: ningún parámetro se calcula antes de separar el conjunto de prueba.