2 · Detección y manejo de outliers
Un outlier rompe la distribución asumida — consérvalo, elimínalo o transfórmalo, pero nunca lo ignores.
Un outlier es un valor que rompe la distribución asumida — consérvalo, elimínalo o transfórmalo, pero nunca lo ignores.
Sin esto:
Sin manejo de outliers, tu media no tiene sentido, tu desviación estándar explota y tu modelo ajusta ruido en lugar de señal.
Un outlier es un punto de datos que se encuentra lejos del grueso de la distribución. Puede ser un evento genuinamente raro (el salario de un CEO en un dataset de empleados), un error de ingreso de datos (edad = 999) o un problema de medición. La pregunta clave no es "¿es extremo este valor?" sino "¿por qué es extremo — y qué debo hacer al respecto?"
Tres métodos de detección dominan en la práctica:
- Z-score: ¿cuántas desviaciones estándar desde la media? Marcar
|z| > 3. Funciona bien cuando los datos son aproximadamente normales. - Regla IQR: definir límites en Q1 − 1.5·IQR y Q3 + 1.5·IQR. Más robusto que el z-score para datos sesgados.
- Z-score modificado (MAD): reemplaza la media con la mediana y la std con la Desviación Absoluta de la Mediana. Aún más robusto para distribuciones muy sesgadas o muestras pequeñas.
Y tres respuestas:
- Eliminar — si estás seguro de que es un error de ingreso de datos.
- Recortar / Winsorizar — fijar valores extremos en un percentil (por ejemplo, 5–95). Preserva el conteo de filas.
- Transformar — aplicar logaritmo o raíz cuadrada para comprimir la cola derecha. Funciona cuando la columna tiene sesgo positivo.
Python (in browser)
El z-score marca outliers relativos a la media ± 3 std. Aquí el salario del CEO obtiene z ≈ 2.4 — el método z-score apenas lo detecta porque el outlier también infla el std.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
La regla IQR es resistente al outlier mismo porque se basa en cuartiles (basados en rango), no en la media.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
El boxplot muestra la caja IQR y los bigotes; el scatter te permite ver exactamente qué observaciones son extremas.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
Winsorizar preserva cada fila mientras limita la influencia de los extremos — el std cae drásticamente cuando el salario de $1M se recorta.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Regla práctica: primero transforma (si hay sesgo), luego winsoriza los extremos residuales, luego considera la eliminación solo para errores confirmados.
Una columna tiene skew=3 y el z-score marca el 10% de las filas como outliers. ¿Qué deberías sospechar?
Momentos de una distribución — media (1er momento), varianza (2do), asimetría (3ro). La fórmula de la asimetría explica por qué los datos con sesgo fuerte rompen la detección de outliers basada en z-score.
- Usa **z-score** (|z| > 3) para datos aproximadamente normales; **regla IQR** para datos sesgados o muestras pequeñas. Ambos marcan extremos — el z-score es distorsionado por el outlier mismo.
- Tres respuestas: **eliminar** (errores confirmados), **winsorizar** (recortar al percentil — preserva filas), **transformar** (log/sqrt para columnas sesgadas).
- Los modelos de árbol toleran los outliers; los modelos lineales y basados en distancia son severamente afectados — elige tu estrategia de outliers en función del modelo posterior.
- Usa `np.log1p` para columnas que incluyen ceros; `PowerTransformer(method='yeo-johnson')` para cualquier columna de valor real con distribución sesgada.
La detección de anomalías (Isolation Forest, LOF) explícitamente busca outliers. La regresión robusta usa la pérdida de Huber para reducir la influencia de los outliers. El preprocesamiento en sklearn frecuentemente combina `RobustScaler` (usa mediana + IQR) para escalado resistente a outliers.
Si lo quitas: Un único salario mal ingresado de 1.000.000 en un dataset de cien filas inundará la media y arruinará una regresión lineal.