Menu
CoddyTech

Local Outlier Factor

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

Algunos puntos extraños se esconden dentro del rango de los datos. El factor local de valores atípicos, LOF, compara lo concurrido que está el lugar de cada punto con los lugares de sus vecinos:

Autos en un estacionamiento, hora de llegada en el eje horizontal y horas estacionados: los trabajadores que viajan al trabajo se agrupan cerca de las 8:00 y permanecen 9 horas, los compradores se distribuyen a lo largo del día durante unas horas, y un auto que llegó a las 8:18 y permaneció estacionado 6.6 horas está rodeado en rojo, señalado por LOF

A veces, los compradores se quedan 6 horas. Pero los vecinos de este coche son personas que se desplazan al trabajo, muy agrupadas, y está lejos de su grupo:

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

Las mismas respuestas que antes: -1 atípico, 1 normal. n_neighbors determina qué tan local es la comparación.

challenge icon

Desafío

Intermedio

Una compañía telefónica busca cuentas diferentes a las de sus vecinas. El código inicial escala los datos y marca cuentas con un bosque de aislamiento; el programa lee k.

  1. Marca cuentas con LOF: n_neighbors=k, contamination=0.03.
  2. Imprime el recuento de cada detector y cuántas cuentas marcan ambos.
  3. Enumera las cuentas que solo marca LOF, en el orden de la tabla, como se muestra a continuación.

Para una compañía más pequeña y 10:

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

Pruébalo tú mismo

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

# Una fila por cuenta telefónica: minutos de llamadas y datos móviles de un mes
accounts = pd.read_csv("accounts.csv")
X = StandardScaler().fit_transform(accounts[["call_minutes", "data_gb"]])
k = int(input())

# De Isolation Forest: -1 para las cuentas que el bosque considera anómalas
forest_flags = IsolationForest(contamination=0.03, random_state=0).fit_predict(X)

# 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