Menu
CoddyTech

Local Outlier Factor

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

Alguns pontos atípicos se escondem dentro do intervalo dos dados. O fator de valores atípicos locais, LOF, compara o quão densamente ocupado é o local de cada ponto com os locais de seus vizinhos:

Carros em uma garagem de estacionamento, horário de chegada no eixo horizontal e horas estacionados no vertical: passageiros a caminho do trabalho agrupados perto das 8:00 e de 9 horas, clientes de lojas espalhados ao longo do dia por algumas horas, e um carro às 8:18 estacionado por 6.6 horas circulado em vermelho, sinalizado pelo LOF

Às vezes, os compradores ficam 6 horas. Mas os vizinhos deste carro são pessoas que se deslocam diariamente, bem agrupadas, e ele fica longe da aglomeração delas:

from sklearn.neighbors import LocalOutlierFactor
lof = LocalOutlierFactor(n_neighbors=20, contamination=0.02)
flags = lof.fit_predict(X)

As mesmas respostas de antes: -1 anômalo, 1 normal. n_neighbors define o quão local é a comparação.

challenge icon

Desafio

Médio

Uma empresa de telefonia procura contas diferentes das de seus vizinhos. O código inicial padroniza os dados e sinaliza contas com uma floresta de isolamento; o programa lê k.

  1. Sinalize contas com LOF: n_neighbors=k, contamination=0.03.
  2. Imprima a contagem de cada detector e quantas contas ambos sinalizam.
  3. Liste as contas sinalizadas apenas pelo LOF, na ordem da tabela, como abaixo.

Para uma empresa menor e 10:

Isolation forest: 5 accounts
LOF: 5 accounts
Both: 4 accounts
Only LOF:
  A118: 960 minutes, 6.2 GB

Experimente você mesmo

import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import IsolationForest
from sklearn.neighbors import LocalOutlierFactor

# Uma linha por conta telefônica: minutos de chamadas e dados móveis de um mês
accounts = pd.read_csv("accounts.csv")
X = StandardScaler().fit_transform(accounts[["call_minutes", "data_gb"]])
k = int(input())

# Do Isolation Forest: -1 para as contas que o algoritmo considera atípicas
forest_flags = IsolationForest(contamination=0.03, random_state=0).fit_predict(X)

# 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