Detectar degradación progresiva de modelos ML en producción monitorizando scores y métricas biométricas
Skill para detectar y alertar sobre la degradación progresiva de los modelos ML desplegados en el pipeline de verificación KYC. Monitoriza la distribución de scores de similitud facial, tasas FAR/FRR y métricas de liveness para identificar drift estadístico. Cuando los umbrales se desvían de los baselines establecidos, genera alertas y recomienda reentrenamiento o recalibración.
Usar esta skill cuando el model_server_agent necesite configurar o gestionar el sistema de monitorización de drift en los modelos de producción. Aplica cuando se observan cambios en la distribución de scores de face_match, liveness o antifraud, o cuando se necesita establecer baselines tras un nuevo despliegue de modelo.
Configurar la recolección de scores de inferencia en cada módulo del pipeline, almacenando distribuciones en ventanas temporales:
from evidently.metrics import DataDriftPreset
from evidently.report import Report
drift_report = Report(metrics=[DataDriftPreset()])
drift_report.run(reference_data=baseline_df, current_data=production_df)
Definir los baselines de referencia para cada modelo tras el despliegue inicial:
BASELINE_CONFIG = {
"face_match_arcface": {"mean_score": 0.92, "std_score": 0.05, "far": 0.001, "frr": 0.03},
"liveness_antispoofing": {"mean_score": 0.95, "std_score": 0.03, "spoofing_detection_rate": 0.99},
"ocr_paddleocr": {"mean_confidence": 0.88, "mrz_checksum_pass_rate": 0.97}
}
Implementar test estadístico de Kolmogorov-Smirnov para comparar distribuciones actuales contra baseline:
from scipy.stats import ks_2samp
stat, p_value = ks_2samp(baseline_scores, current_scores)
if p_value < 0.05:
trigger_drift_alert(model_name, stat, p_value)
Configurar ventanas de monitorización: ventana corta (1 hora) para detección rápida y ventana larga (7 días) para tendencias graduales.
Monitorizar FAR y FRR en tiempo real comparando contra los objetivos del sistema (FAR < 0.1%, FRR < 5%):
current_far = false_accepts / total_impostor_attempts
current_frr = false_rejects / total_genuine_attempts
if current_far > 0.001 or current_frr > 0.05:
trigger_threshold_alert(model_name, current_far, current_frr)
Configurar alertas escalonadas: WARNING cuando el drift supera 1 sigma, CRITICAL cuando supera 2 sigma respecto al baseline.
Generar reportes automáticos semanales con la evolución de métricas por modelo y recomendaciones de acción:
drift_report.save_html("reports/drift_weekly_{date}.html")
Integrar con el motor de decisión para ajustar umbrales automáticamente en modo conservador cuando se detecta drift moderado.