Menu
CoddyTech

Repérer les éléments atypiques

Fait partie de la section Apprentissage non supervisé du Journey Machine Learning de Coddy. Leçon 34 sur 51.

Ce chapitre part à la recherche de lignes inhabituelles. À la fin, tu entoureras les minutes étranges d’un serveur :

Une nuit de données minute par minute d’un serveur web, avec les requêtes par seconde en abscisse et la latence en ordonnée : un nuage resserré qui monte, et quatre minutes isolées entourées en rouge, là où deux détecteurs sont d’accord

Une anomalie est une ligne rare qui diffère des autres : une panne, une fraude, une faute de frappe. Chaque nouvelle anomalie est différente, donc personne ne peut les étiqueter à l’avance.

Commencez par les scores z. StandardScaler transforme chaque colonne en scores z ; une seule ligne signale les lignes comportant une valeur supérieure à 3 en valeur absolue :

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

La déformation d’un capteur de pont augmente avec la température. Une mesure très supérieure aux autres est entourée en rouge et signalée car son score z de déformation dépasse 3. Une mesure sous la tendance à 27 degrés est entourée en orange : non détectée

Mais une ligne peut être ordinaire dans chaque colonne et ne sembler étrange que par leur combinaison. Les scores z par colonne ne la détectent pas.

challenge icon

Défi

Moyen

Un supermarché a enregistré les moyennes d’une journée pour ses 80 meubles congélateurs. Lesquels ont besoin d’un technicien ? Le programme lit un seuil.

  1. Transformez chaque colonne de X en scores z.
  2. Pour chaque colonne, affichez le nombre de congélateurs qu’elle signale : le score z est à une distance de 0 supérieure au seuil.
  3. Affichez chaque congélateur signalé par au moins une colonne, dans l’ordre du tableau.

Pour un autre magasin et 3 :

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

Essayez vous-même

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

# Une ligne par vitrine réfrigérée : les moyennes sur une journée
freezers = pd.read_csv("freezers.csv")
columns = ["temp_c", "power_kw", "door_openings", "defrost_min"]
X = freezers[columns]
cutoff = float(input())

# É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 Apprentissage non supervisé

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