Deteccao de Drift e Configuracao de Alertas em Producao
A Falha Silenciosa dos Modelos ML
Os modelos de machine learning se degradam em producao, e fazem isso de forma silenciosa. Diferente de um servico web que cai com um stack trace ou um banco de dados que fica sem espaco em disco, um modelo sofrendo drift continua retornando predicoes. Os codigos HTTP sao todos 200. A latencia esta dentro dos limites. Todos os health checks passam. Mas as predicoes se tornam progressivamente menos precisas a medida que a relacao entre os dados de entrada e o mundo real se desloca sob os pes do modelo.
Isso e o drift, e e a causa mais comum de falha de modelos ML em producao. A deteccao de drift e a configuracao de alertas sao as praticas que transformam uma falha silenciosa em um evento observavel e acionavel.
Tipos de Drift
Data Drift
O data drift, tambem chamado de covariate shift, ocorre quando a distribuicao das features de entrada muda entre o momento do treinamento e o da inferencia. A relacao aprendida pelo modelo pode continuar valida, mas o modelo agora opera sobre dados que parecem diferentes daqueles com os quais foi treinado.
Concept Drift
O concept drift ocorre quando a relacao entre as features de entrada e a variavel alvo muda. As features podem manter as mesmas distribuicoes, mas o mapeamento de features para resultados se deslocou. Isso e mais perigoso que o data drift porque as predicoes se tornam sistematicamente incorretas embora as entradas parecam normais.
Prediction Drift
O prediction drift foca na distribuicao das saidas do modelo. Se as predicoes do modelo se deslocam significativamente, isso pode indicar um problema subjacente mesmo que data drift ou concept drift especifico nao tenham sido identificados.
Indice de Estabilidade Populacional
O Indice de Estabilidade Populacional (PSI) e a metrica principal que o CorePlexML utiliza para deteccao de drift. O PSI mede quanto a distribuicao de uma feature mudou entre dois periodos comparando a frequencia de valores em bins.
Valores de PSI abaixo de 0.1 indicam que nao ha drift significativo. PSI entre 0.1 e 0.25 indica drift moderado que justifica investigacao. PSI superior a 0.25 indica drift significativo que provavelmente requer acao.
Configuracao do Monitoramento de Drift
from coreplexml import CorePlexClient
client = CorePlexClient(
base_url="https://api.coreplexml.io",
api_key="your-api-key"
)
drift_config = client.monitoring.configure_drift(
deployment_id="dep_fraud_v3",
config={
"evaluation_window_minutes": 60,
"reference_dataset_version_id": "dsv_train_2025q4",
"features_to_monitor": "all",
"psi_bins": 20,
"thresholds": {
"feature_psi_warning": 0.1,
"feature_psi_critical": 0.25,
"overall_drift_warning": 0.15,
"overall_drift_critical": 0.30
},
"prediction_drift": {
"enabled": True,
"window_size_hours": 24,
"comparison_window_size_hours": 168
}
}
)
O Sistema de Alertas
O CorePlexML suporta seis metricas configuraveis:
- drift_psi: Dispara quando o PSI geral ou de alguma feature individual supera um limiar
- accuracy_degradation: Dispara quando a precisao cai abaixo de um nivel definido
- error_rate: Dispara quando a porcentagem de solicitacoes falhadas supera um limiar
- latency_p99: Dispara quando o tempo de resposta no percentil 99 supera um limite
- model_staleness: Dispara quando o modelo nao foi re-treinado dentro de um periodo definido
- prediction_anomaly: Dispara quando a distribuicao de predicoes se desvia significativamente
Criacao de Canais de Alerta
slack_channel = client.alerts.create_channel(
project_id="proj_abc123",
name="ML Team Slack",
channel_type="slack",
config={
"webhook_url": "https://hooks.slack.com/services/T00/B00/xxxxx",
"channel_name": "#ml-alerts",
"mention_on_critical": "@ml-oncall"
}
)
email_channel = client.alerts.create_channel(
project_id="proj_abc123",
name="ML Team Email",
channel_type="email",
config={
"recipients": [
"ml-team@company.com",
"data-engineering@company.com"
],
"subject_prefix": "[CorePlexML Alert]"
}
)
Criacao de Regras de Alerta
drift_alert = client.alerts.create_rule(
deployment_id="dep_fraud_v3",
name="Fraud model drift warning",
metric="drift_psi",
condition="greater_than",
threshold=0.15,
severity="warning",
channels=[slack_channel.id],
evaluation_window_minutes=60,
cooldown_minutes=240,
description="Overall PSI drift score exceeds warning threshold"
)
drift_critical = client.alerts.create_rule(
deployment_id="dep_fraud_v3",
name="Fraud model drift critical",
metric="drift_psi",
condition="greater_than",
threshold=0.30,
severity="critical",
channels=[slack_channel.id, email_channel.id],
evaluation_window_minutes=30,
cooldown_minutes=60,
description="Overall PSI drift score exceeds critical threshold"
)
Politicas de Re-treinamento Automatico
Re-treinamento Programado
scheduled_policy = client.retraining.create_policy(
deployment_id="dep_fraud_v3",
name="Weekly fraud model refresh",
trigger="schedule",
schedule_config={
"frequency": "weekly",
"day_of_week": "sunday",
"hour_utc": 3,
"timezone": "UTC"
},
training_config={
"max_runtime_secs": 900,
"max_models": 30,
"stopping_metric": "AUC",
"balance_classes": True
},
auto_promote=True,
promotion_strategy="canary"
)
Re-treinamento por Drift
drift_policy = client.retraining.create_policy(
deployment_id="dep_fraud_v3",
name="Drift-triggered fraud retrain",
trigger="drift",
drift_config={
"metric": "drift_psi",
"threshold": 0.25,
"sustained_minutes": 120
},
training_config={
"max_runtime_secs": 600,
"max_models": 20,
"stopping_metric": "AUC"
},
auto_promote=False,
max_retrains_per_week=3
)
Re-treinamento por Desempenho
performance_policy = client.retraining.create_policy(
deployment_id="dep_fraud_v3",
name="Performance-triggered fraud retrain",
trigger="performance",
performance_config={
"metric": "auc",
"threshold": 0.88,
"evaluation_window_days": 7,
"min_samples": 10000
},
training_config={
"max_runtime_secs": 600,
"max_models": 20,
"stopping_metric": "AUC"
},
auto_promote=True,
promotion_strategy="canary"
)
O Fluxo de Trabalho End-to-End
Quando todos os componentes estao configurados, o sistema de monitoramento e re-treinamento opera como um ciclo fechado:
- O sistema de monitoramento avalia as distribuicoes de features e predicoes em intervalos configurados.
- Quando o drift supera um limiar, um alerta e disparado pelos canais configurados.
- Se existe uma politica de re-treinamento configurada, um trabalho de re-treinamento e enfileirado automaticamente.
- O trabalho treina um novo modelo com os dados mais recentes disponiveis.
- O passo de validacao compara o candidato contra o modelo de producao atual.
- Se o candidato atende o limiar de melhoria, e implantado via rollout canary.
- O registro de modelos grava a cadeia completa para fins de auditoria.
Melhores Praticas
Combine multiplos gatilhos de re-treinamento. O re-treinamento programado garante frescor basico, o re-treinamento por drift responde a mudancas ambientais, e o re-treinamento por desempenho captura degradacao de qualquer causa.
Defina limiares de auto-promote conservadores. Uma melhoria minima de 0% significa que o novo modelo so precisa igualar o atual. Um limiar de 1% ou superior fornece um sinal mais forte.
Monitore os monitores. Revise suas metricas de drift e historico de alertas regularmente. Se recebe alarmes falsos frequentes, seus limiares podem ser muito sensiveis.
Use janelas de supressao com criterio. As janelas de supressao sao necessarias para periodos de manutencao, mas devem ser curtas e bem documentadas.
Documente suas rotas de escalonamento. Quando um alerta critico dispara as 3 da manha, o engenheiro de plantao precisa saber exatamente o que fazer.
A deteccao de drift e os alertas nao sao opcionais para ML em producao. Sao a camada de observabilidade que transforma um modelo implantado de uma caixa preta em um sistema gerenciado.