Menu
CoddyTech

Encontrar los casos atípicos

Parte de la sección Aprendizaje no supervisado del Journey de Machine Learning de Coddy. Lección 34 de 51.

Este capítulo busca filas extrañas. Al final, identificarás los minutos extraños de un servidor:

Una noche de minutos de un servidor web, con las solicitudes por segundo en el eje horizontal y la latencia en el vertical: una nube ascendente compacta y cuatro minutos aislados marcados con un círculo rojo, donde coinciden dos detectores

Una anomalía es una fila poco frecuente que difiere del resto: un fallo, un fraude, un error tipográfico. Cada una nueva es diferente, así que nadie puede etiquetarlas de antemano.

Empieza con puntuaciones z. StandardScaler convierte cada columna en puntuaciones z, así que una línea marca las filas con cualquier valor superior a 3:

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

La deformación de un sensor de puente aumenta con la temperatura. Una lectura muy por encima del resto está rodeada en rojo, marcada porque su puntuación z de deformación supera 3. Una lectura por debajo de la tendencia a 27 grados está rodeada en naranja: no detectada

Pero una fila puede ser normal en cada columna y ser atípica solo por su combinación. Las puntuaciones z de las columnas no la detectan.

challenge icon

Desafío

Intermedio

Un supermercado registró los promedios de un día para sus 80 congeladores. ¿Cuáles necesitan un técnico? El programa lee un umbral.

  1. Convierte cada columna de X en puntuaciones z.
  2. Para cada columna, imprime cuántos congeladores marca: puntuación z a más distancia de 0 que el umbral.
  3. Imprime cada congelador marcado por cualquier columna, en el orden de la tabla.

Para otra tienda y 3:

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

Pruébalo tú mismo

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

# Una fila por cada congelador: promedios de un día
freezers = pd.read_csv("freezers.csv")
columns = ["temp_c", "power_kw", "door_openings", "defrost_min"]
X = freezers[columns]
cutoff = float(input())

# Escribe tu código a continuación
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Aprendizaje no supervisado

Practica por tu cuenta: Compilador de Python online