Menu
CoddyTech

Umgang mit Ausreißern

Teil des Abschnitts Statistik für ML der Machine Learning-Journey von Coddy. Lektion 27 von 64.

Zehn Wohnungen verbrauchten jeweils etwa 10 m³ Wasser, aber ein Leck ließ den Verbrauch einer Wohnung auf 64 steigen. Du kannst den Wert weglassen oder ihn auf den nächsten Grenzwert begrenzen:

Der Wasserverbrauch von 10 Wohnungen, dargestellt in drei Zeilen. Behalten: neun Punkte nahe 10 und das Leck bei 64, Mittelwert 15.2. Weglassen: Das Leck wurde entfernt, Mittelwert 9.8. Begrenzen: Das Leck wurde auf den Grenzwert bei 14 zurückgesetzt, Mittelwert 10.2

np.clip(a, low, high) begrenzt ein ganzes Array:

water = np.array([8, 11, 9, 10, 12, 9, 64, 10, 11, 8])
low, high = 6.0, 14.0  # die IQR-Grenzen
dropped = water[(water >= low) & (water <= high)]
capped = np.clip(water, low, high)
print(len(dropped), len(capped))
print(capped)

Dies gibt Folgendes aus:

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

Ein Modell würde diesem einzelnen Flat-Wert hinterherjagen, also entscheide vor dem Training. Korrigiere Tippfehler oder entferne sie; behalte echte Extremwerte bei oder begrenze sie. Lösche niemals stillschweigend: Gib an, wie viele du geändert hast.

challenge icon

Aufgabe

Mittel

Eine Fahrrad-App hat die Durchschnittsgeschwindigkeiten von 15 Fahrten in speeds erfasst; zwei sehen ungewöhnlich aus. Im Startercode wurden die IQR-Grenzen in low und high gespeichert.

  1. Erstelle dropped mit den Geschwindigkeiten innerhalb der Grenzen (beide eingeschlossen) und capped.
  2. Gib jeweils eine Zeile für „beibehalten“, „verwerfen“ und „begrenzen“ aus: die Fahrten, ihren Mittelwert und ihre .std(), auf 2 Dezimalstellen gerundet.
  3. Gib aus, wie viele Fahrten durch das Begrenzen geändert wurden.

Für 10 Fahrten eines anderen Radfahrers:

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

Probier es selbst

import numpy as np


# Gibt die untere und obere IQR-Grenze eines Arrays zurück
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)

# Schreibe deinen Code unten
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Statistik für ML

Übe selbstständig: Online-Python-Compiler