model_drift_detection
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.
When to use
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.
Instructions
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.
Notes
- El drift puede ser causado por cambios en la demografía de usuarios, condiciones de captura (iluminación, dispositivos nuevos) o degradación real del modelo. Siempre investigar la causa raíz antes de reentrenar.
- Mantener los datasets de baseline versionados y asociados a cada versión de modelo desplegada para permitir comparaciones históricas precisas.
- Las métricas de drift deben ser anonimizadas y no contener embeddings biométricos en cumplimiento con GDPR/LOPD.
1---2name: model-drift-detection3description: Detectar degradación progresiva de modelos ML en producción monitorizando scores y métricas biométricas4---56# model_drift_detection78Skill 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.910## When to use1112Usar 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.1314## Instructions15161. Configurar la recolección de scores de inferencia en cada módulo del pipeline, almacenando distribuciones en ventanas temporales:17 ```python18 from evidently.metrics import DataDriftPreset19 from evidently.report import Report2021 drift_report = Report(metrics=[DataDriftPreset()])22 drift_report.run(reference_data=baseline_df, current_data=production_df)23 ```24252. Definir los baselines de referencia para cada modelo tras el despliegue inicial:26 ```python27 BASELINE_CONFIG = {28 "face_match_arcface": {"mean_score": 0.92, "std_score": 0.05, "far": 0.001, "frr": 0.03},29 "liveness_antispoofing": {"mean_score": 0.95, "std_score": 0.03, "spoofing_detection_rate": 0.99},30 "ocr_paddleocr": {"mean_confidence": 0.88, "mrz_checksum_pass_rate": 0.97}31 }32 ```33343. Implementar test estadístico de Kolmogorov-Smirnov para comparar distribuciones actuales contra baseline:35 ```python36 from scipy.stats import ks_2samp3738 stat, p_value = ks_2samp(baseline_scores, current_scores)39 if p_value < 0.05:40 trigger_drift_alert(model_name, stat, p_value)41 ```42434. Configurar ventanas de monitorización: ventana corta (1 hora) para detección rápida y ventana larga (7 días) para tendencias graduales.44455. Monitorizar FAR y FRR en tiempo real comparando contra los objetivos del sistema (FAR < 0.1%, FRR < 5%):46 ```python47 current_far = false_accepts / total_impostor_attempts48 current_frr = false_rejects / total_genuine_attempts49 if current_far > 0.001 or current_frr > 0.05:50 trigger_threshold_alert(model_name, current_far, current_frr)51 ```52536. Configurar alertas escalonadas: WARNING cuando el drift supera 1 sigma, CRITICAL cuando supera 2 sigma respecto al baseline.54557. Generar reportes automáticos semanales con la evolución de métricas por modelo y recomendaciones de acción:56 ```python57 drift_report.save_html("reports/drift_weekly_{date}.html")58 ```59608. Integrar con el motor de decisión para ajustar umbrales automáticamente en modo conservador cuando se detecta drift moderado.6162## Notes6364- El drift puede ser causado por cambios en la demografía de usuarios, condiciones de captura (iluminación, dispositivos nuevos) o degradación real del modelo. Siempre investigar la causa raíz antes de reentrenar.65- Mantener los datasets de baseline versionados y asociados a cada versión de modelo desplegada para permitir comparaciones históricas precisas.66- Las métricas de drift deben ser anonimizadas y no contener embeddings biométricos en cumplimiento con GDPR/LOPD.