Antecedentes
Estoy trabajando en el Centro de operaciones de red, supervisamos los sistemas informáticos y su rendimiento. Una de las métricas clave para monitorear es una cantidad de visitantes \ clientes actualmente conectados a nuestros servidores. Para hacerlo visible, nosotros (el equipo de Ops) recopilamos métricas como datos de series temporales y dibujamos gráficos. Graphite nos permite hacerlo, tiene una API bastante rica que utilizo para construir un sistema de alerta para notificar a nuestro equipo si se producen caídas repentinas (en su mayoría) y otros cambios. Por ahora he establecido un umbral estático basado en el valor promedio pero no funciona muy bien (hay muchos falsos positivos) debido a la carga diferente durante el día y la semana (factor de estacionalidad).
Se parece a esto:
Los datos reales (un ejemplo para una métrica, rango de tiempo de 15 minutos; el primer número es un número de usuarios, el segundo sello de tiempo):
[{"target": "metric_name", "datapoints": [[175562.0, 1431803460], [176125.0, 1431803520], [176125.0, 1431803580], [175710.0, 1431803640], [175710.0, 1431803700], [175733.0, 1431803760], [175733.0, 1431803820], [175839.0, 1431803880], [175839.0, 1431803940], [175245.0, 1431804000], [175217.0, 1431804060], [175629.0, 1431804120], [175104.0, 1431804180], [175104.0, 1431804240], [175505.0, 1431804300]]}]
Lo que estoy tratando de lograr
Creé un script de Python que recibe puntos de datos recientes, los compara con el promedio histórico y alerta si hay un cambio o caída repentina. Debido a la estacionalidad, el umbral "estático" no funciona bien y el script genera alertas de falsos positivos. Quiero mejorar un algoritmo de alerta para ser más preciso y hacerlo funcionar sin ajustar constantemente el umbral de alerta.
Que consejo necesito y cosas que descubrí
Al buscar en Google, me di cuenta de que estoy buscando algoritmos de aprendizaje automático para la detección de anomalías (no supervisados). La investigación adicional mostró que hay toneladas de ellos y es muy difícil entender cuál es aplicable en mi caso. Debido a mi conocimiento matemático limitado, no puedo leer documentos académicos sofisticados y estoy buscando algo simple para un principiante en el campo.
Me gusta Python y estoy un poco familiarizado con R, por lo que me alegrará ver ejemplos de estos lenguajes. Recomiende un buen libro o artículo que me ayude a resolver mi problema. Gracias por su tiempo y disculpe por una descripción tan larga.
Enlaces útiles
Preguntas similares:
- Series temporales y detección de anomalías
- Detección de anomalías de series temporales con Python
- Anomalías de series de tiempo
- Algoritmos para la detección de anomalías en series temporales
- Aplicación de wavelets a algoritmos de detección de anomalías basados en series temporales.
- ¿Qué algoritmo debo usar?
Recursos externos:
auto.arima
función del excelente forecast
paquete de R (ver jstatsoft.org/v27/i03/paper ). Puede ajustar los niveles de confianza ajustando el level
parámetro, por ejemplo data.model <- auto.arima(data.zoo, ic = c("bic")); data.prediction.warningLimits <- forecast(data.model, h=1, level=0.99)
.