Skip to main content

Documentation 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.

En el dataset Palmer Penguins, variables como bill_length_mm presentan valores extremos que pueden distorsionar el entrenamiento de modelos sensibles a la escala. Con solo 344 filas, eliminar las filas con outliers reduce significativamente el volumen de datos disponible y puede romper el balance de clases. La estrategia elegida en este módulo es el capping (también llamado winsorizing): los valores que superan los límites estadísticos se sustituyen por el propio límite, en lugar de descartar la observación. Así se mantiene toda la información del dataset mientras se neutraliza la influencia de los valores extremos.

El método IQR

El rango intercuartílico (IQR) es una medida robusta de dispersión que no se ve afectada por los extremos de la distribución. El procedimiento para detectar outliers es el siguiente:
  1. Calcular el primer cuartil Q1 (percentil 25) y el tercer cuartil Q3 (percentil 75).
  2. Obtener el IQR: IQR = Q3 - Q1.
  3. Definir los límites de aceptación:
    • lower_bound = Q1 − 1.5 × IQR
    • upper_bound = Q3 + 1.5 × IQR
  4. Cualquier valor por debajo de lower_bound o por encima de upper_bound se considera un outlier.
Este criterio (conocido como la regla de Tukey) es el mismo que utiliza el diagrama de caja (boxplot) para dibujar sus bigotes y marcar los puntos atípicos.

Función cap_outliers

La función está definida en app/logic/outliers.py y aplica el método IQR sobre una única columna del dataframe:
import pandas as pd

def cap_outliers(df, col):
    Q1 = df[col].quantile(0.25)
    Q3 = df[col].quantile(0.75)
    IQR = Q3 - Q1
    lower = Q1 - 1.5 * IQR
    upper = Q3 + 1.5 * IQR

    df[col] = df[col].clip(lower, upper)
    return df, lower, upper
Firma: cap_outliers(df, col) → tuple[pd.DataFrame, float, float]
ParámetroTipoDescripción
dfpd.DataFrameEl dataframe que contiene la columna a procesar
colstrNombre de la columna numérica sobre la que aplicar el capping
Valores de retorno:
PosiciónTipoDescripción
[0]pd.DataFrameEl dataframe con la columna col modificada (valores extremos reemplazados)
[1]floatLímite inferior calculado (Q1 − 1.5 × IQR)
[2]floatLímite superior calculado (Q3 + 1.5 × IQR)

Uso

from app.logic.outliers import cap_outliers
import seaborn as sns

df = sns.load_dataset('penguins')
df, lower, upper = cap_outliers(df, 'bill_length_mm')
print(f"Límites: [{lower:.2f}, {upper:.2f}]")
Salida esperada:
Límites: [27.35, 58.65]
Todos los valores de bill_length_mm que estén por debajo de 27.35 o por encima de 58.65 quedan sustituidos por esos límites. El número de filas del dataframe no cambia.

Winsorizing vs. eliminación

El método clip() de pandas sustituye los valores extremos por el valor del límite correspondiente, en lugar de eliminar la fila. La diferencia práctica es importante:
Estrategia¿Se pierden filas?Efecto en la distribución
Eliminación (dropna / filtros)Sí — la fila desapareceReduce N, puede sesgar clases
Winsorizing / capping (clip)No — la fila se conservaLos extremos se “comprimen” al límite
Para un dataset pequeño como Palmer Penguins (344 filas), preservar cada observación es crítico. Perder incluso 5–10 filas puede alterar el balance entre Chinstrap (68 ejemplares) y las otras especies, afectando al entrenamiento y a la evaluación del modelo.
En la aplicación Streamlit, la Sección 2 (Outliers) muestra un gráfico de caja (boxplot) de bill_length_mm antes y después de aplicar cap_outliers, lo que permite visualizar directamente el efecto del capping sobre la distribución de la variable.
Aplica cap_outliers a cada columna numérica de forma independiente. En este módulo, únicamente se capea bill_length_mm porque es la única columna en la que se detectan outliers estadísticos con el criterio IQR. Las demás variables numéricas (bill_depth_mm, flipper_length_mm, body_mass_g) se encuentran dentro de los límites esperados y no requieren tratamiento.

Build docs developers (and LLMs) love