Phase 02 - Lesson 16
Detección de anomalías
This lesson includes a graded coding exercise that runs in your browser, unlocked with lifetime access.
Normal es fácil de definir. Anormal es todo aquello que no encaja.
Tipo: Construcción Idioma: Python Requisitos previos: Fase 2, Lecciones 01-09 Tiempo: ~75 minutos
Objetivos de aprendizaje
- Implementar métodos de detección de anomalías Z-score, IQR y Isolation Forest desde cero
- Distinguir entre anomalías puntuales, contextuales y colectivas y seleccionar el método de detección adecuado para cada una.
- Explicar por qué la detección de anomalías se enmarca como un modelado de datos normales en lugar de una clasificación de anomalías.
- Compare la detección de anomalías no supervisada con la clasificación supervisada y evalúe el equilibrio entre la cobertura de anomalías novedosas y la precisión.
El problema
La tarjeta de crédito se utiliza en Nueva York a las 14:00 horas y en Tokio a las 14:05 horas. Un sensor de fábrica lee 150 grados cuando el rango normal es 80-120. Un servidor envía 50.000 solicitudes por segundo cuando el promedio diario es 200.
Éstas son anomalías. Encontrarlos es importante. El fraude cuesta miles de millones. Las fallas en los equipos cuestan tiempo de inactividad. Las intrusiones en la red cuestan datos.
El desafío: rara vez se han etiquetado ejemplos de anomalías. El fraude representa el 0,1% de las transacciones. Las fallas en los equipos ocurren varias veces al año. No se puede entrenar un clasificador estándar porque no hay casi nada en la clase de "anomalía" de qué aprender. Incluso si tiene algunas etiquetas, las anomalías que ha visto no son los únicos tipos que encontrará. El esquema de fraude del mañana es diferente al de hoy.
La detección de anomalías invierte el problema. En lugar de aprender lo que es anormal, aprende lo que es normal. Todo lo que se desvíe de lo normal es sospechoso. Esto funciona sin etiquetas, se adapta a nuevos tipos de anomalías y escala a conjuntos de datos masivos.
El concepto
Tipos de anomalías
No todas las anomalías son iguales:
- Anomalías de puntos. Un único punto de datos que es inusual independientemente del contexto. Una lectura de temperatura de 500 grados. Una transacción de $50,000 de una cuenta que normalmente gasta $50.
- Anomalías contextuales. Un dato que es inusual dado su contexto. Una temperatura de 90 grados es normal en verano, anómala en invierno. Mismo valor, diferente contexto.
- Anomalías colectivas. Una secuencia de puntos de datos que es inusual como grupo, aunque cada punto individual pueda ser normal. Cinco errores de inicio de sesión son normales. Cincuenta seguidos es un ataque de fuerza bruta.
La mayoría de los métodos detectan anomalías puntuales. Las anomalías contextuales necesitan características de tiempo o ubicación. Las anomalías colectivas necesitan métodos que tengan en cuenta la secuencia.
flowchart TD
A[Anomaly Types] --> B[Point Anomaly]
A --> C[Contextual Anomaly]
A --> D[Collective Anomaly]
B --> B1["Single unusual value<br/>Temperature: 500F"]
C --> C1["Unusual in context<br/>90F in January"]
D --> D1["Unusual sequence<br/>50 failed logins"]
style B fill:#fdd,stroke:#333
style C fill:#ffd,stroke:#333
style D fill:#fdf,stroke:#333
El encuadre no supervisado
En la clasificación estándar, tienes etiquetas para ambas clases. En la detección de anomalías, normalmente se presenta una de tres situaciones:
- Totalmente sin supervisión. Sin etiquetas. Usted ajusta el detector a todos los datos y espera que las anomalías sean lo suficientemente raras como para no corromper el modelo "normal".
- Semisupervisado. Tiene un conjunto de datos limpio de datos normales únicamente. Encajas en este conjunto limpio y anotas todo lo demás. Esta es la configuración más sólida cuando es posible.
- Débilmente supervisado. Tienes algunas anomalías etiquetadas. Úselos para evaluación, no para entrenamiento. Entrene sin supervisión y luego mida la precisión/recuperación en el subconjunto etiquetado.
La idea clave: la detección de anomalías es fundamentalmente diferente de la clasificación. Está modelando la distribución de datos normales, no el límite de decisión entre dos clases.
Supervisado versus no supervisado: la compensación
Si tiene anomalías etiquetadas, ¿debería utilizarlas para entrenamiento (clasificación supervisada) o solo para evaluación (detección no supervisada)?
Supervisado (tratar como clasificación):
- Detecta los tipos exactos de anomalías que has visto antes
- Mayor precisión en tipos de anomalías conocidas
- Omite por completo los nuevos tipos de anomalías
- Requiere reentrenamiento cuando surgen nuevos tipos de anomalías
- Necesita suficientes ejemplos de anomalías (a menudo muy pocos)
Sin supervisión (modelo normal, desviaciones de bandera):
- Detecta cualquier desviación de lo normal, incluidos los tipos novedosos.
- No requiere anomalías etiquetadas
- Mayor tasa de falsos positivos (no todo lo inusual es malo)
- Más robusto al cambio de distribución
En la práctica, los mejores sistemas combinan ambos: detección no supervisada para una amplia cobertura, modelos supervisados para tipos de anomalías conocidos de alta prioridad y revisión humana para casos ambiguos.
Método de puntuación Z
El enfoque más simple. Calcule la media y la desviación estándar de cada característica. Marque cualquier punto que esté a más de k desviaciones estándar de la media.
z_score = (x - mean) / std
anomaly if |z_score| > threshold
El umbral predeterminado es 3,0 (el 99,7 % de los datos normales se encuentran dentro de 3 desviaciones estándar para una distribución gaussiana).
Fortalezas: Sencillo. Rápido. Interpretable ("este valor es 4,5 desviaciones estándar de lo normal").
Debilidades: Asume que los datos se distribuyen normalmente. Sensible a valores atípicos en los datos de entrenamiento (los valores atípicos cambian la media e inflan el estándar, lo que los hace más difíciles de detectar). Falla en distribuciones multimodales.
Cuando funciona bien: Monitoreo de función única donde los datos tienen aproximadamente forma de campana. Tiempos de respuesta del servidor, tolerancias de fabricación, lecturas de sensores con líneas base estables.
Cuando falla: Datos de múltiples clústeres (dos ubicaciones de oficinas con diferentes temperaturas de referencia), datos sesgados (montos de transacciones donde
Método RIQ
Más robusto que el puntaje Z. Utiliza el rango intercuartílico en lugar de la media y la desviación estándar.
Q1 = 25th percentile
Q3 = 75th percentile
IQR = Q3 - Q1
lower_bound = Q1 - factor * IQR
upper_bound = Q3 + factor * IQR
anomaly if x < lower_bound or x > upper_bound
El factor predeterminado es 1,5.
Fortalezas: Robusto frente a valores atípicos (los percentiles no se ven afectados por los valores extremos). Funciona en distribuciones sesgadas. Sin supuesto de normalidad.
Debilidades: Solo univariante (se aplica por función de forma independiente). No se pueden detectar anomalías que son inusuales sólo cuando las características se consideran en conjunto (un punto puede ser normal en cada característica individualmente pero anómalo en el espacio articular).
Nota práctica: El factor 1,5 en IQR corresponde a los bigotes en un diagrama de caja. Los puntos fuera de los bigotes son valores atípicos potenciales. Usar 3.0 en lugar de 1.5 hace que el detector sea más conservador (menos indicadores, menos falsos positivos). El factor correcto depende de su tolerancia a las falsas alarmas.
Isolation Forest
La idea clave: las anomalías son pocas y diferentes. En una partición aleatoria de los datos, las anomalías son más fáciles de aislar: necesitan menos divisiones aleatorias para separarlas del resto.
flowchart TD
A[All Data Points] --> B{Random Feature + Random Split}
B --> C[Left Partition]
B --> D[Right Partition]
C --> E{Random Feature + Random Split}
E --> F[Normal Point - deep in tree]
E --> G[More splits needed...]
D --> H["Anomaly - isolated quickly (short path)"]
style H fill:#fdd,stroke:#333
style F fill:#dfd,stroke:#333
Cómo funciona:
- Construye muchos árboles al azar (un bosque aislado)
- En cada nodo, elija una característica aleatoria y un valor de división aleatorio entre el mínimo y el máximo de la característica.
- Sigue dividiendo hasta que cada punto esté aislado (en su propia hoja)
- Las anomalías tienen longitudes de camino promedio más cortas en todos los árboles.
Por qué funciona: Los puntos normales viven en regiones densas. Se necesitan muchas divisiones aleatorias para aislar uno de sus vecinos. Las anomalías viven en regiones dispersas. Una o dos divisiones aleatorias son suficientes para aislarlos.
La puntuación de anomalía se basa en la longitud de ruta promedio en todos los árboles, normalizada por la longitud de ruta esperada de un árbol de búsqueda binario aleatorio:
score(x) = 2^(-average_path_length(x) / c(n))
Donde c(n) es la longitud de ruta esperada para n muestras. Una puntuación cercana a 1 significa anomalía. Una puntuación cercana a 0,5 significa normal. Una puntuación cercana a 0 significa muy normal (en lo profundo de grupos densos).
Fortalezas: Sin supuestos de distribución. Funciona en grandes dimensiones. Se escala bien (sublineal en el tamaño de la muestra porque cada árbol usa una submuestra). Maneja tipos de características mixtas.
Debilidades: Tiene problemas con anomalías en regiones densas (efecto de enmascaramiento). La división aleatoria es menos efectiva cuando muchas características son irrelevantes.
Hiperparámetros clave:
n_estimators: Número de árboles. 100 suele ser suficiente. Más árboles dan puntuaciones más estables pero un cálculo más lento.max_samples: Número de muestras por árbol. 256 es el valor predeterminado en el artículo original. Los valores más pequeños hacen que los árboles individuales sean menos precisos pero aumentan la diversidad. El submuestreo es lo que hace que Isolation Forest sea rápido: cada árbol ve una pequeña fracción de los datos.contamination: Fracción esperada de anomalías. Se utiliza sólo para establecer el umbral. No afecta las puntuaciones en sí.
Local Outlier Factor (LOF)
LOF compara la densidad local alrededor de un punto con la densidad alrededor de sus vecinos. Un punto en una región dispersa rodeada de regiones densas es anómalo.
Cómo funciona:
- Para cada punto, encuentre sus k vecinos más cercanos.
- Calcule la densidad de accesibilidad local (qué tan denso es el vecindario)
- Compare la densidad de cada punto con las densidades de sus vecinos.
- Si un punto tiene una densidad mucho menor que sus vecinos, es un valor atípico
Puntuación LOF:
- LOF cercano a 1,0 significa densidad similar a la de los vecinos (normal)
- LOF superior a 1,0 significa menor densidad que los vecinos (potencialmente anómalo)
- LOF mucho mayor que 1,0 (p. ej., 2,0+) significa una densidad significativamente menor (probable anomalía)
La parte "local" es crítica. Considere un conjunto de datos con dos grupos: un grupo denso de 1000 puntos y un grupo disperso de 50 puntos. Un punto en el borde del cúmulo disperso no es inusual a nivel mundial: tiene 50 vecinos. Pero es localmente inusual si sus vecinos inmediatos son más densos que él. LOF capta este matiz que los métodos globales pasan por alto.
Fortalezas: Detecta anomalías locales (puntos que son inusuales en su vecindario, incluso si no son inusuales a nivel global). Funciona en clusters de diferentes densidades.
Debilidades: Lento en conjuntos de datos grandes (O(n^2) para implementación ingenua). Sensible a la elección de k. No funciona bien en dimensiones muy altas (la maldición de la dimensionalidad afecta los cálculos de distancia).
Comparación
| Método | Supuestos | Velocidad | Maneja atenuaciones altas | Detecta anomalías locales |
|---|---|---|---|---|
| Puntuación Z | Distribución normal | Muy rápido | Sí (por función) | No |
| RIQ | Ninguno (por función) | Muy rápido | Sí (por función) | No |
| Isolation Forest | Ninguno | Rápido | Sí | Parcialmente |
| LOF | La distancia es significativa | Lento | Mal | Sí |
Desafíos de la evaluación
Evaluar detectores de anomalías es más difícil que evaluar clasificadores:
- Desequilibrio de clases extremo. Con un 0,1% de anomalías, predecir "normal" para todo proporciona una precisión del 99,9%. La precisión es inútil.
- AUROC es engañoso. Con un gran desequilibrio, AUROC puede verse bien incluso cuando el modelo pasa por alto la mayoría de las anomalías en umbrales prácticos.
- Mejores métricas: Precision@k (de los k elementos principales marcados, cuántos son anomalías reales), AUPRC (área bajo la curva de recuperación de precisión) y recuperación con una tasa fija de falsos positivos.
flowchart LR
A[Raw Data] --> B[Train on Normal Data Only]
B --> C[Score All Test Data]
C --> D[Rank by Anomaly Score]
D --> E[Evaluate Top-K Flagged Items]
E --> F[Precision at K / AUPRC]
style A fill:#f9f,stroke:#333
style F fill:#9f9,stroke:#333
Detección de anomalías Pipeline
En la práctica, la detección de anomalías sigue este flujo de trabajo:
- Recopilar datos de referencia. Idealmente, un período en el que sepa que no hay (o hay muy pocas) anomalías.
- Ingeniería de características. Funciones sin procesar más funciones derivadas (estadísticas continuas, funciones de tiempo, proporciones).
- Entrene el detector. Ajuste a los datos de referencia. El modelo aprende cómo es lo "normal".
- Puntuación de datos nuevos. Cada nueva observación obtiene una puntuación de anomalía.
- Selección de umbral. Elija el límite de puntuación. Se trata de una decisión empresarial: un umbral más alto significa menos falsas alarmas pero más anomalías omitidas.
- Alerta e investiga. Los puntos marcados pasan a revisión humana o respuesta automática.
- Recopilación de comentarios. Registre si los elementos marcados fueron verdaderas anomalías o falsas alarmas. Utilice estos datos para evaluar el detector y ajustar el umbral con el tiempo.
El oleoducto nunca está "terminado". Las distribuciones de datos cambian, surgen nuevos tipos de anomalías y es necesario ajustar los umbrales. Trate la detección de anomalías como un sistema vivo, no como un modelo único.
Constrúyelo
El código en code/anomaly_detection.py implementa Z-score, IQR y Isolation Forest desde cero.
Detector de puntuación Z
def zscore_detect(X, threshold=3.0):
mean = X.mean(axis=0)
std = X.std(axis=0)
std[std == 0] = 1.0
z = np.abs((X - mean) / std)
return z.max(axis=1) > threshold
Sencillo y vectorizado. Marca un punto si alguna característica excede el umbral.
Detector IQR
def iqr_detect(X, factor=1.5):
q1 = np.percentile(X, 25, axis=0)
q3 = np.percentile(X, 75, axis=0)
iqr = q3 - q1
iqr[iqr == 0] = 1.0
lower = q1 - factor * iqr
upper = q3 + factor * iqr
outside = (X < lower) | (X > upper)
return outside.any(axis=1)
Isolation Forest desde cero
La implementación desde cero crea árboles de aislamiento que dividen aleatoriamente el espacio de funciones:
class IsolationTree:
def __init__(self, max_depth):
self.max_depth = max_depth
def fit(self, X, depth=0):
n, p = X.shape
if depth >= self.max_depth or n <= 1:
self.is_leaf = True
self.size = n
return self
self.is_leaf = False
self.feature = np.random.randint(p)
x_min = X[:, self.feature].min()
x_max = X[:, self.feature].max()
if x_min == x_max:
self.is_leaf = True
self.size = n
return self
self.threshold = np.random.uniform(x_min, x_max)
left_mask = X[:, self.feature] < self.threshold
self.left = IsolationTree(self.max_depth).fit(X[left_mask], depth + 1)
self.right = IsolationTree(self.max_depth).fit(X[~left_mask], depth + 1)
return self
La longitud del camino para aislar un punto determina su puntuación de anomalía. Los caminos más cortos significan más anómalos.
La clase IsolationForest envuelve varios árboles:
class IsolationForest:
def __init__(self, n_estimators=100, max_samples=256, seed=42):
self.n_estimators = n_estimators
self.max_samples = max_samples
def fit(self, X):
sample_size = min(self.max_samples, X.shape[0])
max_depth = int(np.ceil(np.log2(sample_size)))
for _ in range(self.n_estimators):
idx = rng.choice(X.shape[0], size=sample_size, replace=False)
tree = IsolationTree(max_depth=max_depth)
tree.fit(X[idx])
self.trees.append(tree)
def anomaly_score(self, X):
avg_path = average path length across all trees
scores = 2.0 ** (-avg_path / c(max_samples))
return scores
El factor de normalización c(n) es la longitud de ruta esperada de una búsqueda fallida en un árbol de búsqueda binario con n elementos. Es igual a 2 * H(n-1) - 2*(n-1)/n donde H es el número armónico. Esta normalización garantiza que las puntuaciones sean comparables entre conjuntos de datos de diferentes tamaños.
Escenarios de demostración
El código genera múltiples escenarios de prueba:
- Clúster único con valores atípicos. Un grupo gaussiano 2D con anomalías inyectadas lejos del centro. Todos los métodos deberían funcionar aquí.
- Datos multimodales. Tres conglomerados de diferentes tamaños y densidades. Los puntos entre grupos son anómalos. La puntuación Z tiene problemas porque los rangos por función son amplios.
- Datos de alta dimensión. 50 características, pero las anomalías difieren solo en 5 de ellas. Prueba si los métodos pueden encontrar anomalías en un subconjunto de características.
Cada demostración compara todos los métodos usando precisión, recuperación, F1 y Precision@k.
Úsalo
Con sklearn (usando implementaciones de biblioteca, no desde cero):
from sklearn.ensemble import IsolationForest
from sklearn.neighbors import LocalOutlierFactor
iso = IsolationForest(n_estimators=100, contamination=0.05, random_state=42)
iso.fit(X_train)
predictions = iso.predict(X_test)
lof = LocalOutlierFactor(n_neighbors=20, contamination=0.05, novelty=True)
lof.fit(X_train)
predictions = lof.predict(X_test)
La nota contamination establece la fracción esperada de anomalías. Configurarlo correctamente es importante: demasiado bajo no detecta anomalías, demasiado alto crea falsas alarmas.
El código en anomaly_detection.py compara implementaciones desde cero con sklearn con los mismos datos.
Parámetro de contaminación de sklearn
El parámetro contamination en sklearn determina el umbral para convertir puntuaciones de anomalías continuas en predicciones binarias. No cambia las puntuaciones subyacentes.
iso_5 = IsolationForest(contamination=0.05)
iso_10 = IsolationForest(contamination=0.10)
Ambos producen las mismas puntuaciones de anomalía. Pero iso_5 marca el 5% superior mientras que iso_10 marca el 10% superior. Si no conoce la verdadera tasa de anomalía (normalmente no la conoce), establezca la contaminación en "auto" y trabaje directamente con las puntuaciones sin procesar. Establezca su propio umbral basándose en la compensación de costos entre falsos positivos y falsos negativos.
Una clase SVM
Otro detector de anomalías no supervisado que vale la pena conocer. One-Class SVM ajusta un límite alrededor de datos normales en un espacio de características de alta dimensión (usando el truco del kernel).
from sklearn.svm import OneClassSVM
oc_svm = OneClassSVM(kernel="rbf", gamma="auto", nu=0.05)
oc_svm.fit(X_train)
predictions = oc_svm.predict(X_test)
El parámetro nu se aproxima a la fracción de anomalías. One-Class SVM funciona bien en conjuntos de datos pequeños y medianos, pero no se escala a datos muy grandes (la matriz del núcleo crece cuadráticamente).
Enfoque del codificador automático (vista previa)
Los codificadores automáticos son redes neuronales que aprenden a comprimir y reconstruir datos. Entrene con datos normales. En el momento de la prueba, las anomalías tienen un alto error de reconstrucción porque la red aprendió a reconstruir solo patrones normales.
Esto se trata en la Fase 3 (Aprendizaje profundo), pero el principio es el mismo: modelar lo que es normal, señalar lo que se desvía.
Detección de anomalías de conjunto
Así como los métodos de conjunto mejoran la clasificación (Lección 11), la combinación de múltiples detectores de anomalías mejora la detección. El enfoque más simple:
- Ejecute varios detectores (puntuación Z, IQR, Isolation Forest, LOF)
- Normalice las puntuaciones de cada detector a [0, 1]
- Promediar las puntuaciones normalizadas
- Marcar puntos por encima del umbral en la puntuación media
Esto reduce los falsos positivos porque diferentes métodos tienen diferentes modos de falla. Es casi seguro que un punto señalado por los cuatro métodos es anómalo. Un punto señalado por sólo uno podría ser una peculiaridad de ese método.
Conjuntos más sofisticados ponderan cada detector según su confiabilidad estimada (medida en un conjunto de validación con anomalías conocidas, si están disponibles).
Consideraciones de producción
- Deriva del umbral. A medida que cambia la distribución de los datos, un umbral fijo queda obsoleto. Supervise la distribución de las puntuaciones de anomalías y ajústelas periódicamente.
- Fatiga de alertas. Demasiadas falsas alarmas y los operadores dejan de prestar atención. Comience con un umbral alto (menos alertas y más confiables) y bájelo a medida que aumenta la confianza.
- Enfoque de conjunto. En producción, combine varios detectores. Marcar un punto sólo si varios métodos coinciden en que es anómalo. Esto reduce significativamente los falsos positivos.
- Ingeniería de características. Las funciones sin procesar rara vez son suficientes. Agregue estadísticas continuas, proporciones, tiempo transcurrido desde el último evento y características específicas del dominio. Un buen conjunto de funciones importa más que la elección del detector.
- Ciclo de retroalimentación. Cuando los operadores investigan elementos marcados y los confirman o descartan, envían esto al sistema. Acumule datos etiquetados a lo largo del tiempo para evaluar y mejorar el detector.
Envíalo
Esta lección produce:
outputs/skill-anomaly-detector.md-- una habilidad de decisión para elegir el detector correctocode/anomaly_detection.py-- Puntuación Z, IQR y Isolation Forest desde cero, con comparación de sklearn
Elegir un umbral
La puntuación de anomalía es continua. Necesitas un umbral para tomar decisiones binarias. Esta es una decisión comercial, no técnica.
Considere dos escenarios:
- Detección de fraude. Pasar por alto el fraude resulta caro (devoluciones de cargo, confianza del cliente). Las falsas alarmas le cuestan a un analista humano 5 minutos investigar. Establezca un umbral bajo para detectar más fraudes y aceptar más falsas alarmas.
- Mantenimiento de equipos. Una falsa alarma significa un apagado innecesario que cuesta $50,000. Una falla perdida significa una reparación de $500,000. Establezca el umbral para equilibrar estos costos.
En ambos casos, el umbral óptimo depende de la relación de costes entre falsos positivos y falsos negativos. Trace la precisión y la recuperación en diferentes umbrales, superponga la función de costo y elija el punto de costo mínimo.
Escalado a producción
Para la detección de anomalías en tiempo real en producción:
- Entrenamiento por lotes, puntuación en línea. Entrene el modelo periódicamente (diariamente, semanalmente) con datos normales recientes. Califique cada nueva observación a medida que llegue.
- El cálculo de características debe coincidir. Si entrenó con estadísticas continuas durante 30 días, necesitará 30 días de historial para calcular características para una nueva observación. Almacene en buffer el historial requerido.
- Monitoreo de la distribución de puntuaciones. Realice un seguimiento de la distribución de las puntuaciones de anomalías a lo largo del tiempo. Si la puntuación mediana aumenta, los datos están cambiando o el modelo está obsoleto.
- Explicabilidad. Cuando señale una anomalía, diga por qué. Puntuación Z: "La característica X está 4,2 desviaciones estándar por encima de lo normal". Isolation Forest: "Este punto se aisló en 3,1 divisiones en promedio (los puntos normales toman 8,5)".
Ejercicios
Ajuste de umbral. Ejecute el detector de puntuación Z con umbrales de 1,0 a 5,0 en pasos de 0,5. Trazar precisión y recuperación en cada umbral. ¿Dónde está el punto óptimo para sus datos?
Anomalías multivariadas. Cree datos 2D donde cada característica individualmente parezca normal, pero la combinación sea anómala (por ejemplo, puntos alejados de la diagonal del grupo principal). Demuestre que la puntuación Z por función los omite pero Isolation Forest los detecta.
LOF desde cero. Implemente Local Outlier Factor utilizando k vecinos más cercanos. Compare con LocalOutlierFactor de sklearn con los mismos datos. Utilice k=10 y k=50: ¿cómo afecta la elección de k a los resultados?
Detección de anomalías de transmisión. Modifique el detector de puntuación Z para que funcione en una configuración de transmisión: actualice la media móvil y la varianza a medida que llegan nuevos puntos (algoritmo en línea de Welford). Compare con la puntuación Z por lotes con los mismos datos.
Evaluación del mundo real. Tome un conjunto de datos con anomalías conocidas (fraude con tarjetas de crédito de Kaggle, por ejemplo). Evalúe los cuatro métodos utilizando precision@100, precision@500 y AUPRC. ¿Qué método funciona mejor? ¿Por qué?
Términos clave
| Término | Lo que dice la gente | Lo que realmente significa |
|---|---|---|
| Anomalía | "Punto atípico e inusual" | Un dato que se desvía significativamente del patrón esperado de datos normales |
| Anomalía puntual | "Un único valor extraño" | Una observación individual que resulta inusual independientemente del contexto |
| Anomalía contextual | "Valor normal, contexto incorrecto" | Una observación que es inusual dado su contexto (tiempo, ubicación, etc.) pero que podría ser normal en otro contexto |
| Isolation Forest | "Divisiones aleatorias para encontrar valores atípicos" | Un conjunto de árboles aleatorios que aísla anomalías con menos divisiones que los puntos normales |
| Local Outlier Factor | "Compare la densidad con la de los vecinos" | Un método que señala puntos cuya densidad local es mucho menor que la densidad de sus vecinos |
| Puntuación Z | "Desviaciones estándar de la media" | (x - media) / std, midiendo qué tan lejos está un punto del centro en unidades de desviación estándar |
| RIQ | "Rango intercuartil" | T3 - T1, que mide la dispersión del 50% central de los datos, utilizado para una detección sólida de valores atípicos |
| Contaminación | "Fracción esperada de anomalías" | Un hiperparámetro que le dice al detector qué proporción de los datos debe marcar como anómalos |
| Precisión@k | "De las k banderas top, cuantas son reales" | Precisión calculada solo en los k puntos más sospechosos, útil para la detección de anomalías desequilibradas |
| AUPRC | "Área bajo la curva de recuperación de precisión" | Una métrica que resume el rendimiento de recuperación de precisión en todos los umbrales, mejor que AUROC para datos desequilibrados |
Lectura adicional
- Liu et al., Isolation Forest (2008) -- el artículo Isolation Forest original
- Breunig et al., LOF: Identificando valores atípicos locales basados en la densidad (2000) -- el documento LOF original
- scikit-learn Documentos de detección de valores atípicos - descripción general de todos los detectores de anomalías de sklearn
- Chandola et al., Detección de anomalías: una encuesta (2009) -- estudio exhaustivo de los métodos de detección de anomalías
- Goldstein y Uchida, Una evaluación comparativa de algoritmos de detección de anomalías no supervisados (2016) -- comparación empírica de 10 métodos en conjuntos de datos reales