Módulo 6: Embedding Operations

Outlier Detection

Detectar anomalías

def detect_outliers(embeddings, threshold=2.0):
    """Detectar outliers usando distancia al centroid"""
    centroid = np.mean(embeddings, axis=0)
    
    # Distancias al centroid
    distances = [np.linalg.norm(emb - centroid) for emb in embeddings]
    
    # Outliers = distancia > mean + threshold*std
    mean_dist = np.mean(distances)
    std_dist = np.std(distances)
    outlier_threshold = mean_dist + threshold * std_dist
    
    outliers = []
    for i, dist in enumerate(distances):
        if dist > outlier_threshold:
            outliers.append(i)
    
    return outliers

# Ejemplo
outlier_indices = detect_outliers(doc_embeddings, threshold=2.0)
print(f"Outliers: {len(outlier_indices)} documentos")

Isolation Forest

from sklearn.ensemble import IsolationForest

# Más robusto que distancia simple
clf = IsolationForest(contamination=0.1, random_state=42)
predictions = clf.fit_predict(embeddings)

# -1 = outlier, 1 = normal
outliers = np.where(predictions == -1)[0]
print(f"Outliers: {len(outliers)}")

Applications

Data quality:

# Detectar documentos mal clasificados
category_embs = [get_emb(doc) for doc in category_docs]
outliers = detect_outliers(category_embs)

# Revisar manualmente outliers (posible mislabel)
for idx in outliers:
    print(f"Potential mislabel: {category_docs[idx]}")

Spam detection:

# Emails legítimos tienen embeddings similares
# Spam = outlier
legitimate_embs = [...]
new_email_emb = get_emb(new_email)

# ¿Es outlier?
is_spam = is_outlier(new_email_emb, legitimate_embs)

Resumen

  • Outlier: Embedding muy diferente del resto
  • Detection: Distancia al centroid > threshold
  • Isolation Forest: Más robusto
  • Use case: Data quality, spam detection

Módulo 6 - Cápsula 07