Menu
CoddyTech

Encontrando os Diferentões

Parte da seção Aprendizado não supervisionado do Journey de Machine Learning da Coddy. Lição 34 de 51.

Este capítulo procura linhas estranhas. Ao final dele, você vai circular os minutos incomuns de um servidor:

Uma noite de minutos de servidor web, com solicitações por segundo no eixo horizontal e latência no eixo vertical: uma nuvem compacta ascendente e quatro minutos isolados circulados em vermelho, nos quais dois detectores concordam

Uma anomalia é uma linha rara, diferente das demais: uma falha, uma fraude, um erro de digitação. Cada nova anomalia é diferente, então ninguém consegue rotulá-las antecipadamente.

Comece com escores z. StandardScaler transforma cada coluna em escores z, então uma linha sinaliza as linhas com qualquer valor acima de 3:

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

A deformação de um sensor de ponte aumentando com a temperatura. Uma leitura muito acima das demais está circulada em vermelho, sinalizada com escore z da deformação acima de 3. Uma leitura abaixo da tendência a 27 graus está circulada em laranja: não detectada

Mas uma linha pode ser comum em cada coluna e ser incomum apenas na combinação delas. Os escores z das colunas não a detectam.

challenge icon

Desafio

Médio

Um supermercado registrou as médias de um dia para seus 80 freezers. Quais precisam de um técnico? O programa lê um limite.

  1. Transforme cada coluna de X em escores z.
  2. Para cada coluna, imprima quantos freezers ela sinaliza: escore z a uma distância de 0 maior que o limite.
  3. Imprima todos os freezers sinalizados por qualquer coluna, na ordem da tabela.

Para outra loja e 3:

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

Experimente você mesmo

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

# Uma linha por freezer: médias de um dia
freezers = pd.read_csv("freezers.csv")
columns = ["temp_c", "power_kw", "door_openings", "defrost_min"]
X = freezers[columns]
cutoff = float(input())

# Escreva seu código abaixo
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Aprendizado não supervisionado

Pratique por conta própria: Compilador de Python online