Menu
CoddyTech

Traiter les valeurs aberrantes

Fait partie de la section Statistiques pour le ML du Journey Machine Learning de Coddy. Leçon 27 sur 64.

Dix appartements ont utilisé environ 10 m³ d’eau chacun, mais une fuite a fait monter la consommation de l’un d’eux à 64. Tu peux l’exclure ou la plafonner à la valeur limite la plus proche :

La consommation d’eau de 10 appartements représentée sur trois rangées. Conserver : neuf points près de 10 et la fuite à 64, moyenne de 15,2. Exclure : la fuite supprimée, moyenne de 9,8. Plafonner : la fuite ramenée à la valeur limite de 14, moyenne de 10,2

np.clip(a, low, high) plafonne un tableau entier :

water = np.array([8, 11, 9, 10, 12, 9, 64, 10, 11, 8])
low, high = 6.0, 14.0  # les bornes de l’écart interquartile
dropped = water[(water >= low) & (water <= high)]
capped = np.clip(water, low, high)
print(len(dropped), len(capped))
print(capped)

Cela affiche :

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

Un modèle poursuivrait cette valeur aberrante unique, alors décidez avant l’entraînement. Corrigez ou supprimez les erreurs de frappe ; conservez ou plafonnez les valeurs extrêmes réelles. Ne supprimez jamais silencieusement : indiquez combien vous en avez modifié.

challenge icon

Défi

Moyen

Une application de cyclisme a enregistré les vitesses moyennes de 15 trajets dans speeds ; deux semblent anormales. Le code de départ a placé les bornes de l’IQR dans low et high.

  1. Construis dropped, qui contient les vitesses comprises entre les bornes (incluses), ainsi que capped.
  2. Affiche une ligne pour chacune des méthodes keep, drop et cap : le nombre de trajets, leur moyenne et leur .std(), arrondis à 2 décimales.
  3. Affiche le nombre de trajets modifiés par le plafonnement.

Pour les 10 trajets d’un autre cycliste :

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

Essayez vous-même

import numpy as np


# Renvoie les bornes IQR inférieure et supérieure d'un tableau
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)

# Écrivez votre code ci-dessous
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Statistiques pour le ML

Entraînez-vous par vous-même : Compilateur Python en ligne