Menu
CoddyTech

Tratamiento de valores atípicos

Parte de la sección Estadística para ML del Journey de Machine Learning de Coddy. Lección 27 de 64.

Diez pisos usaron unos 10 m³ de agua cada uno, pero una fuga elevó el consumo de uno a 64. Puedes eliminarlo o limitarlo al límite más cercano:

El consumo de agua de 10 pisos en tres filas. Conservar: nueve puntos cerca de 10 y la fuga en 64, media de 15.2. Eliminar: se elimina la fuga, media de 9.8. Limitar: la fuga se reduce hasta el límite en 14, media de 10.2

np.clip(a, low, high) limita un arreglo completo:

water = np.array([8, 11, 9, 10, 12, 9, 64, 10, 11, 8])
low, high = 6.0, 14.0  # los límites del IQR
dropped = water[(water >= low) & (water <= high)]
capped = np.clip(water, low, high)
print(len(dropped), len(capped))
print(capped)

Esto imprime:

9 10
[ 8. 11.  9. 10. 12.  9. 14. 10. 11.  8.]

Un modelo perseguiría ese único valor plano, así que decide antes del entrenamiento. Corrige o elimina los errores tipográficos; conserva o limita los valores extremos reales. Nunca elimines datos sin decirlo: indica cuántos modificaste.

challenge icon

Desafío

Intermedio

Una aplicación de ciclismo registró las velocidades medias de 15 recorridos en speeds; dos parecen extrañas. El código inicial guardó los límites del IQR en low y high.

  1. Crea dropped, con las velocidades dentro de los límites (ambos incluidos), y capped.
  2. Imprime una línea para cada opción: conservar, descartar y limitar; indica los recorridos, su media y su .std(), redondeados a 2 decimales.
  3. Imprime cuántos recorridos modificó la limitación.

Para los 10 recorridos de otro ciclista:

Keep: 10 rides, mean 21.38, std 6.58
Drop: 9 rides, mean 19.2, std 0.77
Cap: 10 rides, mean 19.45, std 1.04
Capping changed 1 of 10 rides

Pruébalo tú mismo

import numpy as np


# Devuelve los límites inferior y superior del IQR de un arreglo
def iqr_fences(a):
    q1 = np.percentile(a, 25)
    q3 = np.percentile(a, 75)
    iqr = q3 - q1
    return q1 - 1.5 * iqr, q3 + 1.5 * iqr


speeds = np.array([24.5, 22.8, 26.1, 23.9, 3.1, 25.4, 21.7, 24.2, 27.3, 78.4, 23.1, 25.8, 22.4, 24.9, 26.6])
low, high = iqr_fences(speeds)

# Escribe tu código a continuación
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Estadística para ML

Practica por tu cuenta: Compilador de Python online