1 · Manejo de valores faltantes
Los NaN no son ceros — son información ausente, y cómo los rellenas cambia lo que aprende tu modelo.
Los valores faltantes no son ceros — son información ausente, y cómo los rellenas cambia lo que aprende tu modelo.
Sin esto:
Sin un manejo explícito, los NaN se propagan por cada cómputo (NaN silenciosos en pérdidas, métricas rotas) y la mayoría de los modelos simplemente fallan.
Los datos del mundo real raramente están completos. Fallos de sensores, campos opcionales de encuestas, joins de bases de datos que no coinciden, usuarios que saltaron un paso del formulario — todos dejan valores faltantes atrás. En pandas aparecen como NaN (de NumPy), None (el null de Python) o pd.NA (el sentinel más reciente para enteros anulables).
Antes de ajustar cualquier modelo debes decidir qué hacer con esos huecos. Las cuatro estrategias generales son:
- Eliminar filas o columnas que tengan valores faltantes.
- Rellenar con una constante (por ejemplo 0, "Unknown", el string "Missing").
- Rellenar con un estadístico — media, mediana (numérico) o moda (categórico).
- Imputación basada en modelos — predecir el valor faltante a partir de otras features (KNN, iterativo/MICE).
Elegir la estrategia incorrecta es sorprendentemente fácil y sorprendentemente costoso. Esta lección te da el vocabulario y el código para tomar esa decisión de forma deliberada.
Python (in browser)
`df.isna().sum()` cuenta los valores faltantes en absoluto; `df.isna().mean() * 100` los expresa como porcentaje de filas — siempre ejecuta ambos al inicio de un EDA.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
Cada estrategia produce un resultado diferente. `fillna(median)` suele ser el valor predeterminado más seguro para features numéricas con < 20% de datos faltantes.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
`KNNImputer` encuentra las k filas más cercanas (ignorando la columna faltante) y promedia sus valores — mejor que la mediana cuando las features están correlacionadas.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
MCAR es seguro; MAR es manejable; MNAR requiere cuidado extra — siempre pregunta POR QUÉ faltan datos, no solo DÓNDE.
Si el 5% de cada una de 10 features falta aleatoriamente (de forma independiente), ¿qué fracción aproximada de filas tiene al menos un valor faltante?
- Detecta los faltantes con `df.isna().sum()` (conteo) y `df.isna().mean() * 100` (porcentaje) — siempre audita antes de imputar.
- Tres patrones: **MCAR** (seguro eliminar/imputar), **MAR** (imputar con condicionamiento), **MNAR** (el peligroso — la ausencia se correlaciona con el valor faltante en sí).
- Cuatro estrategias: eliminar, rellenar constante, rellenar estadístico (mediana para numérico, moda para categórico), basado en modelo (KNN/iterativo). `KNNImputer` es consciente del contexto pero más lento.
- Para features categóricas, considera crear una categoría centinela `'Missing'` en lugar de imputar — la ausencia en sí puede ser una señal.
Toda pipeline de ML comienza con una auditoría `df.isna().sum()`. Las instancias de `Pipeline` de sklearn necesitan un paso `Imputer` antes de cualquier scaler/estimador. Los modelos de árbol (XGBoost, LightGBM) manejan NaN de forma nativa — la mayoría de los demás modelos no.
Si lo quitas: Tu `model.fit(X, y)` falla con 'Input contains NaN' — el modo de fallo que todo ingeniero de ML junior encuentra en la primera semana.