🧹 Reflexión sobre UT2: Data Quality & Limpieza¶
¿De qué trató esta unidad y qué problemas buscaba resolver?¶
La UT2 se enfocó en un problema crítico que enfrentan todos los proyectos de datos reales: los datos nunca vienen perfectos. Hay valores faltantes, outliers, escalas inconsistentes, y lo más peligroso: sesgos ocultos que pueden hacer que un modelo aparentemente funcional sea completamente injusto o inválido.
El problema central de esta unidad fue: ¿cómo preparar datos de forma honesta y reproducible para que los modelos que construyamos sean confiables? Esto implica no solo "llenar huecos" con imputación, sino entender por qué faltan los datos, cómo afectan al análisis, y qué transformaciones aplicar sin introducir sesgos o fugas de información.
En mis palabras, esta unidad me enseñó que limpiar datos es una ciencia, no un arte. No se trata de aplicar .fillna(0) a todo y esperar lo mejor; se trata de tomar decisiones fundamentadas, documentarlas, y construir pipelines que sean reproducibles y auditables.
Conceptos y técnicas clave que incorporé¶
1. Clasificación de Missing Data: MCAR, MAR, MNAR¶
Uno de los conceptos más importantes fue entender que no todos los datos faltantes son iguales. La clasificación de Little & Rubin distingue tres tipos:
- MCAR (Missing Completely At Random): Los faltantes no dependen de nada. Ejemplo: un sensor que falla aleatoriamente.
- MAR (Missing At Random): Los faltantes dependen de otras variables observadas. Ejemplo:
Garage Areafalta porque no hay garage (Garage Type= None). - MNAR (Missing Not At Random): Los faltantes dependen del propio valor. Ejemplo: personas con altos ingresos que no reportan sus datos.
Ejemplo del portafolio: En el análisis de Ames Housing, creé missing sintético para simular cada tipo:
# MCAR: 10% aleatorio en Year Built
# MAR: Garage Area falta cuando Garage Type = None
# MNAR: SalePrice falta para precios > percentil 90
Esta clasificación guió mi estrategia de imputación: para MCAR usé mediana global, para MAR usé mediana por grupo (vecindario), y para MNAR creé un flag binario indicando que el dato estaba ausente (porque su ausencia es información en sí misma).
2. Data Leakage y Pipelines Honestos¶
El data leakage es quizás el error más peligroso en ML porque infla métricas falsamente y el modelo falla en producción. Ocurre cuando información del test "filtra" al train.
Ejemplo del portafolio: En la práctica de Feature Scaling, demostré tres formas de escalar datos:
| Método | ¿Hay leakage? | R² | MAE (USD) |
|---|---|---|---|
| Escalar todo y luego split | Sí ⚠️ | 0.1846 | 36,914 |
| Split → fit en train → transform | No ✅ | 0.1957 | 36,443 |
| Pipeline (Scaler→Modelo) | No ✅ | 0.1957 | 36,443 |
El método 1 "contamina" el scaler con información del test (medias, desvíos), produciendo métricas optimistas pero inválidas. La solución es usar Pipelines de scikit-learn que automatizan el orden correcto:
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import PowerTransformer
from sklearn.neighbors import KNeighborsRegressor
pipeline = Pipeline([
('transformer', PowerTransformer(method='yeo-johnson')),
('model', KNeighborsRegressor(n_neighbors=5))
])
Esto garantiza que el escalado se ajuste solo con train en cada fold de cross-validation.
3. Detección y mitigación de sesgo con Fairlearn¶
Más allá de la calidad técnica, esta unidad me introdujo a la responsabilidad ética en ML. Los modelos pueden perpetuar sesgos históricos si no los detectamos activamente.
Ejemplo del portafolio: En la práctica de sesgo, trabajé con dos casos:
Boston Housing (regresión): El dataset tiene una variable B que codifica indirectamente la proporción de población afroamericana. Aunque mejora la predicción (R² = 0.7112 con B), es éticamente problemática. No debe usarse en producción.
Titanic (clasificación): Detecté sesgos de género (+54.8% supervivencia mujeres) y clase (+41.3% 1ra vs 3ra). Apliqué mitigación con Fairlearn:
| Modelo | Accuracy | DPD (Demographic Parity Difference) |
|---|---|---|
| Baseline (RandomForest) | 0.673 | 0.113 |
| Mitigado (ExponentiatedGradient) | 0.617 | 0.035 |
Trade-off: Perdí 8.3% de accuracy para ganar 0.079 en equidad. ¿Vale la pena? Depende del dominio. En salud o finanzas, probablemente sí.
from fairlearn.reductions import ExponentiatedGradient, DemographicParity
constraint = DemographicParity()
mitigator = ExponentiatedGradient(model_baseline, constraint)
mitigator.fit(X_train, y_train, sensitive_features=sensitive_features_train)
¿Qué fue lo que más me costó y cómo lo destrabé?¶
Lo que más me costó fue entender cuándo usar cada tipo de scaler y por qué PowerTransformer es diferente a los escaladores lineales.
El problema¶
En Ames Housing, las distribuciones son muy asimétricas:
SalePrice: skew = 1.44, kurtosis = 6.18Lot Area: skew = 12.82, kurtosis = 265.02Misc Val: skew = 22.00, kurtosis = 566.20
Los scalers lineales (StandardScaler, MinMaxScaler, RobustScaler) no corrigen asimetría; solo ajustan rango/escala. Esto es un problema para modelos basados en distancia (KNN, SVM) que asumen distribuciones simétricas.
Cómo lo destrabé¶
-
Entendí la teoría:
PowerTransformer (Yeo-Johnson)aplica una transformación no lineal que "estira" la distribución para hacerla más simétrica. -
Visualicé el efecto: Comparé skew antes y después:
| Variable | Skew Original | Skew con PowerTransformer |
|---|---|---|
| SalePrice | 1.44 | 0.08 ✅ |
| Lot Area | 12.82 | 0.10 ✅ |
| Misc Val | 22.00 | 5.05 ⚠️ (masa en 0) |
- Identifiqué limitaciones:
Misc Valtiene masa en cero (muchos valores = 0), lo que hace que Yeo-Johnson no funcione bien. Para estas variables, necesito estrategias específicas (ej.: transformar solo valores > 0).
Lección clave: No existe un scaler "universal". La elección depende de la distribución de los datos y del algoritmo que usarás después.
Una tarea en detalle: Análisis de calidad de datos en Ames Housing¶
¿Qué hice?¶
En la práctica de Missing Data Detection, realicé un análisis completo de calidad de datos:
- Exploración inicial: 2930 registros, 82 columnas, 29 con valores faltantes.
- Clasificación de missing: Identifiqué patrones MCAR, MAR, MNAR.
- Detección de outliers: Comparé IQR vs Z-Score.
- Estrategias de imputación: Comparé simple (media/mediana/moda) vs smart (por grupo).
- Pipeline reproducible: Creé un
ColumnTransformermodular.
¿Qué aprendí?¶
-
Visualización de missing patterns: Ver el porcentaje de faltantes por columna reveló que
Pool QCtiene >95% missing (prácticamente inutilizable). -
IQR vs Z-Score: IQR detecta más outliers en distribuciones sesgadas porque no asume normalidad. En
Lot Area: IQR encontró 127 outliers, Z-Score solo 29. -
Imputación inteligente preserva estructura: Imputar
Year Builtcon mediana porNeighborhood+House Stylemantiene las relaciones entre variables mejor que la mediana global. -
Pipelines modulares son esenciales: El
ColumnTransformerme permitió aplicar transformaciones diferentes a numéricas y categóricas en un solo paso reproducible.
¿Qué mejoraría?¶
-
Imputación más sofisticada: Probar
KNNImputeroIterativeImputer(MICE) para capturar relaciones multivariadas. -
Variables con >90% missing: Evaluar si eliminarlas o crear features derivadas (ej.:
has_poolbinario en lugar dePool QC). -
Validación del impacto: Medir cómo cambian las métricas del modelo final con diferentes estrategias de imputación.
-
Documentación automática: Generar un "data quality report" con pandas-profiling o Great Expectations.
¿En qué tipo de proyecto real usaría esto?¶
1. Sector salud: Predicción de readmisión hospitalaria¶
Problema: Predecir si un paciente será readmitido en 30 días.
Aplicación UT2:
- Missing data: Datos de laboratorio (MNAR: no se pidieron porque el médico no lo consideró necesario), datos demográficos (MCAR: errores de entrada).
- Outliers: Valores de glucosa o presión arterial extremos pueden ser errores de medición o casos reales críticos.
- Sesgo: Modelos que predicen peor para minorías si los datos históricos tienen subrepresentación.
- Leakage: Usar diagnóstico del alta para predecir readmisión (información futura).
Estrategia: Pipeline con imputación por grupo (diagnóstico principal), flag de missing para MNAR, auditoría de equidad por edad/género/raza.
2. Fintech: Scoring crediticio¶
Problema: Evaluar riesgo de impago de créditos.
Aplicación UT2:
- Missing data: Historial crediticio (MNAR: personas sin historial son más riesgosas pero no por eso deben ser penalizadas).
- Sesgo histórico: Modelos entrenados con datos que reflejan discriminación pasada pueden perpetuarla.
- Leakage: Usar comportamiento de pago del crédito actual para predecir impago.
Estrategia: Imputación cuidadosa sin penalizar ausencia de historial, auditoría de Demographic Parity y Equalized Odds por género/etnia, pipelines con validación temporal (train en meses anteriores, test en meses posteriores).
3. Retail: Predicción de demanda¶
Problema: Predecir ventas para optimizar inventario.
Aplicación UT2:
- Missing data: Ventas = 0 porque no había stock (MNAR: la demanda existía pero no se registró).
- Outliers: Picos por promociones o eventos especiales (outliers legítimos que no deben eliminarse).
- Escalado: Variables con escalas muy diferentes (unidades vendidas vs precio vs temperatura).
Estrategia: Imputar demanda latente cuando hay stockout, mantener outliers de promociones con flag, RobustScaler para features con outliers legítimos.
4. Recursos Humanos: Predicción de rotación¶
Problema: Predecir qué empleados dejarán la empresa.
Aplicación UT2:
- Missing data: Encuestas de satisfacción no completadas (MNAR: empleados insatisfechos pueden evitar completarlas).
- Sesgo: Modelos que predicen mayor rotación para ciertos grupos demográficos pueden ser discriminatorios.
- Leakage: Usar fecha de renuncia o motivo de salida para predecir rotación.
Estrategia: Flag de no-respuesta en encuestas como feature, auditoría de equidad por género/edad/departamento, validación temporal estricta.
Conclusión¶
La UT2 me enseñó que la calidad de los datos determina la calidad del modelo. No importa qué tan sofisticado sea el algoritmo; si los datos están mal preparados, el modelo será inútil o peligroso.
Los tres pilares de esta unidad fueron:
- ✅ Entender el missing data: No todos los faltantes son iguales (MCAR/MAR/MNAR).
- ✅ Prevenir data leakage: Pipelines honestos con escalado solo en train.
- ✅ Auditar sesgos: Detectar y mitigar inequidades con herramientas como Fairlearn.
Estos conceptos no son opcionales; son obligatorios para cualquier proyecto de datos serio. Un modelo que parece funcionar bien pero tiene leakage o sesgo es peor que no tener modelo, porque genera confianza falsa en predicciones erróneas.
Ahora, cada vez que enfrento un dataset nuevo, mi checklist incluye:
- ✅ Explorar patrones de missing y clasificarlos
- ✅ Detectar outliers con IQR/Z-Score según distribución
- ✅ Elegir imputación según el tipo de missing
- ✅ Usar Pipeline para evitar leakage
- ✅ Auditar sesgos antes de desplegar
📚 Referencias¶
- Little, R. J. A., & Rubin, D. B. (2019). Statistical Analysis with Missing Data. Wiley.
- van Buuren, S. (2018). Flexible Imputation of Missing Data. CRC Press.
- Fairlearn Documentation: https://fairlearn.org/
- Scikit-learn: Preprocessing & Pipeline APIs
- Kaggle: Ames Housing Dataset