Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

Aprendizaje no supervisado, Unidad 8 — Detección de anomalías, 8.1 — Qué es una anomalía ·

Rareza vs error

Rareza vs error: Comprendiendo la detección de anomalías

Introducción

En el campo del aprendizaje no supervisado, una de las tareas más importantes es detectar anomalías en los datos. Las anomalías son puntos o patrones que se desvían significativamente de la normalidad y pueden proporcionar valiosas información sobre comportamientos inusuales o errores en nuestros conjuntos de datos. Sin embargo, diferenciar entre lo que es una rareza natural y un error puede ser desafiante.

Explicación principal

Definición contextual

Una anomalía, también conocida como outlier o ruido, se define como un dato que parece estar fuera del rango esperado de los datos normales. La rareza, por otro lado, es una condición que es infrecuente pero no necesariamente errónea.

Rareza vs error

  • Rareza: Un comportamiento o valor que ocurre con muy baja frecuencia en un conjunto de datos. Por ejemplo, si se está analizando el consumo eléctrico diario y una casa consume más energía durante la noche del 24 de diciembre debido a las luces de Navidad, esto sería raro pero no necesariamente incorrecto.
  • Error: Un dato que es claramente erróneo o inconsistentes con el resto de los datos. Por ejemplo, si un sensor registra una temperatura de 300 grados Celsius en una habitación normal, este es probablemente un error debido a fallos en el sensor.

Ejemplo con código

A continuación, se muestra cómo podríamos detectar anomalías usando la técnica de detección basada en densidad (DBSCAN) en Python. Este método nos permite identificar puntos que son rara vez cercanos a otros puntos.

import numpy as np
from sklearn.cluster import DBSCAN
import matplotlib.pyplot as plt

# Generamos un conjunto de datos con algunos outliers
np.random.seed(0)
X = np.concatenate([np.random.normal([2, 3], 1.5, (200, 2)),
                    np.random.normal([4, 6], 1.5, (200, 2))])

# Aplicamos DBSCAN para detectar clusters y outliers
db = DBSCAN(eps=0.3, min_samples=10).fit(X)
core_samples_mask = np.zeros_like(db.labels_, dtype=bool)
core_samples_mask[db.core_sample_indices_] = True
labels = db.labels_

# Número de clusters encontrados (excluyendo el ruido)
n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0)

# Visualizamos los resultados
unique_labels = set(labels)
colors = [plt.cm.Spectral(i / float(len(unique_labels))) for i in range(len(unique_labels))]
for k, col in zip(unique_labels, colors):
    class_member_mask = (labels == k)
    xy = X[class_member_mask & core_samples_mask]
    plt.plot(xy[:, 0], xy[:, 1], 'o', markerfacecolor=col, markeredgecolor='k', markersize=14)

    xy = X[class_member_mask & ~core_samples_mask]
    plt.plot(xy[:, 0], xy[:, 1], 'o', markerfacecolor=col, markeredgecolor='k', markersize=6)

plt.title('DBSCAN clustering\nNumber of clusters: %d' % n_clusters_)
plt.show()

Errores típicos / trampas

1. Confundir rareza con error

Es común confundir un comportamiento raro con un error. Por ejemplo, si se registra una temperatura extremadamente alta en el mediodía durante el verano, podríamos asumir que es un error debido a la hora del día y la temperatura ambiental. Sin embargo, podría ser una rareza natural de los patrones de consumo eléctrico o temperatura.

2. Ignorar el contexto

Ignorar el contexto de los datos puede llevar a interpretaciones incorrectas. Por ejemplo, si se analizan las transacciones bancarias y ciertas transacciones son extremadamente altas en un país donde no es común que la gente haga compras tan costosas, podrían ser raras pero no necesariamente erróneas.

3. Falta de validación externa

Dependiendo solo en los métodos internos para detectar anomalías sin verificar las conclusiones con datos o conocimientos externos puede llevar a errores. Por ejemplo, si un modelo predice que ciertos días son anómalos pero no se han documentado incidentes reales en esos días, podría ser una rareza natural y no necesariamente un error.

Checklist accionable

  1. Identifica el contexto: Comprende los datos y su origen para entender si un comportamiento raro es natural o erróneo.
  2. Verifica la rareza: Analiza las estadísticas históricas para determinar si el dato es realmente raro en comparación con la base de datos normal.
  3. Valida externamente: Consulta fuentes externas y expertos para confirmar si el dato es un error o una rareza natural.
  4. Ajusta tus modelos: Utiliza técnicas como DBSCAN para detectar anomalías basadas en densidad, pero ajusta los parámetros según sea necesario.
  5. Documenta todo: Mantén registros detallados de cada análisis y decisión tomada.

Cierre

Siguientes pasos

  • Aprende más sobre detección de anomalías usando otros algoritmos como Isolation Forest o One-Class SVM.
  • Integra la detección de anomalías en tu flujo de trabajo para mejorar la calidad del dato y evitar errores.
  • Investiga casos reales de anomalías detectadas en diferentes industrias para aprender sobre los desafíos comunes.

La detección de anomalías es una herramienta valiosa en el aprendizaje no supervisado, pero requiere un cuidadoso análisis y contexto. Conocer la diferencia entre rareza y error puede ayudarte a tomar decisiones informadas y mejorar la precisión de tus modelos.

Contacto

Indica tu objetivo (ChatGPT, RAG, agentes, automatización) y tu stack (web/backend).