Menu
CoddyTech

Individuare gli elementi anomali

Fa parte della sezione Apprendimento non supervisionato del percorso Machine Learning di Coddy. Lezione 34 di 51.

Questo capitolo va a caccia di righe anomale. Alla fine, individuerai i minuti insoliti di un server:

Una notte di minuti di un server web, con le richieste al secondo sull’asse orizzontale e la latenza su quello verticale: una nuvola compatta in crescita e quattro minuti isolati cerchiati in rosso, in cui due rilevatori concordano

Un’anomalia è una riga rara e diversa dalle altre: un guasto, una frode, un errore di battitura. Ogni nuova anomalia è diversa, quindi nessuno può etichettarle in anticipo.

Inizia con gli z-score. StandardScaler trasforma ogni colonna in z-score, così una riga individua quelle con qualsiasi valore superiore a 3:

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

La deformazione di un sensore su un ponte aumenta con la temperatura. Una lettura molto superiore alle altre è cerchiata in rosso, segnalata perché lo z della deformazione supera 3. Una lettura sotto l’andamento a 27 gradi è cerchiata in arancione: mancata

Ma una riga può essere ordinaria in ogni colonna e risultare anomala solo nella sua combinazione di valori. Gli z-score delle colonne non la rilevano.

challenge icon

Sfida

Medio

Un supermercato ha registrato le medie giornaliere dei suoi 80 congelatori. Quali hanno bisogno di un tecnico? Il programma legge una soglia.

  1. Trasforma ogni colonna di X in punteggi z.
  2. Per ogni colonna, stampa quanti congelatori segnala: punteggio z distante da 0 più della soglia.
  3. Stampa ogni congelatore segnalato da una qualsiasi colonna, nell'ordine della tabella.

Per un altro negozio e 3:

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

Provalo tu

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

# Una riga per ogni banco freezer: le medie giornaliere
freezers = pd.read_csv("freezers.csv")
columns = ["temp_c", "power_kw", "door_openings", "defrost_min"]
X = freezers[columns]
cutoff = float(input())

# Scrivi il tuo codice qui sotto
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Apprendimento non supervisionato

Esercitati da solo: Compilatore Python online