Menu
CoddyTech

Die Ausreißer finden

Teil des Abschnitts Unüberwachtes Lernen der Machine Learning-Journey von Coddy. Lektion 34 von 51.

In diesem Kapitel spürst du ungewöhnliche Zeilen auf. Am Ende wirst du die merkwürdigen Minuten eines Servers einkreisen:

Eine Nacht mit Minuten eines Webservers, Anfragen pro Sekunde auf der einen und Latenz auf der anderen Achse: eine dicht ansteigende Punktwolke und vier vereinzelte Minuten, rot eingekreist, bei denen zwei Detektoren übereinstimmen

Eine Anomalie ist eine seltene Zeile, die sich vom Rest unterscheidet: ein Fehler, ein Betrug, ein Tippfehler. Jede neue Anomalie ist anders, daher kann sie niemand im Voraus kennzeichnen.

Beginne mit z-Werten. StandardScaler wandelt jede Spalte in z-Werte um, sodass eine Zeile alle Zeilen kennzeichnet, in denen ein Wert über 3 liegt:

z = StandardScaler().fit_transform(X)
odd = (np.abs(z) > 3).sum(axis=1) > 0

Die Dehnung eines Brückensensors steigt mit der Temperatur. Ein Messwert, der weit über den übrigen liegt, ist rot eingekreist und mit einem Dehnungs-z-Wert über 3 gekennzeichnet. Ein Messwert unterhalb des Trends bei 27 Grad ist orange eingekreist: übersehen

Eine Zeile kann jedoch in jeder Spalte gewöhnlich und nur in ihrer Kombination ungewöhnlich sein. Spalten-Z-Scores erkennen sie nicht.

challenge icon

Aufgabe

Mittel

Ein Supermarkt hat die Tagesdurchschnittswerte für seine 80 Gefriertruhen erfasst. Welche benötigen einen Techniker? Das Programm liest einen Grenzwert ein.

  1. Wandle jede Spalte von X in z-Werte um.
  2. Gib für jede Spalte aus, wie viele Gefriertruhen sie markiert: z-Wert weiter als der Grenzwert von 0 entfernt.
  3. Gib jede Gefriertruhe aus, die von mindestens einer Spalte markiert wird, und zwar in Tabellenreihenfolge.

Für ein anderes Geschäft und 3:

temp_c: 1 flagged
power_kw: 2 flagged
door_openings: 0 flagged
defrost_min: 0 flagged
Freezers to check:
  F05
  F13
  F51

Probier es selbst

import numpy as np
import pandas as pd
from sklearn.preprocessing import StandardScaler

# Eine Zeile pro Gefriertruhe: Tagesdurchschnittswerte
freezers = pd.read_csv("freezers.csv")
columns = ["temp_c", "power_kw", "door_openings", "defrost_min"]
X = freezers[columns]
cutoff = float(input())

# 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 Unüberwachtes Lernen

Übe selbstständig: Online-Python-Compiler