fundo
Estou trabalhando no Network Operations Center, monitoramos os sistemas de computadores e seu desempenho. Uma das principais métricas a serem monitoradas é o número de visitantes \ clientes atualmente conectados aos nossos servidores. Para torná-lo visível, nós (equipe de operações) coletamos métricas como dados de séries temporais e desenhamos gráficos. O Grafite nos permite fazer isso, ele possui uma API bastante rica que eu uso para criar um sistema de alerta para notificar nossa equipe se quedas repentinas (principalmente) e outras alterações ocorrerem. Por enquanto, eu configurei um limite estático com base no valor médio, mas não funciona muito bem (há muitos falsos positivos) devido à carga diferente durante o dia e a semana (fator de sazonalidade).
Parece algo como isto:
Os dados reais (um exemplo para uma métrica, intervalo de 15 minutos; o primeiro número é um número de usuários, o segundo registro de data e hora):
[{"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]]}]
O que estou tentando realizar
Criei um script Python que recebe pontos de dados recentes, os compara com a média histórica e alerta se houver uma mudança ou queda repentina. Devido à sazonalidade, o limite "estático" não funciona bem e o script gera alertas de falsos positivos. Quero melhorar um algoritmo de alerta para ser mais preciso e fazê-lo funcionar sem ajustar constantemente o limite de alerta.
Que conselhos eu preciso e coisas que descobri
Ao pesquisar no Google, percebi que estava procurando algoritmos de aprendizado de máquina para detecção de anomalias (não supervisionados). Uma investigação mais aprofundada mostrou que existem muitos deles e é muito difícil entender qual deles é aplicável no meu caso. Devido ao meu conhecimento limitado de matemática, não consigo ler trabalhos acadêmicos sofisticados e estou procurando algo simples para um iniciante no campo.
Eu gosto de Python e estou familiarizado com R, por isso ficarei feliz em ver exemplos para essas linguagens. Por favor, recomende um bom livro ou artigo que me ajude a resolver meu problema. Obrigado pelo seu tempo e com licença para uma descrição tão longa
Links Úteis
Perguntas semelhantes:
- Detecção de séries temporais e anomalias
- Detecção de anomalia de séries temporais com Python
- Anomalias de séries temporais
- Algoritmos para detecção de anomalias de séries temporais
- Aplicação de wavelets a algoritmos de detecção de anomalias baseados em séries temporais
- Qual algoritmo devo usar?
Fontes externas:
auto.arima
função do excelente forecast
pacote de R (consulte jstatsoft.org/v27/i03/paper ). Você pode ajustar os níveis de confiança ajustando o level
parâmetro, por exemplo data.model <- auto.arima(data.zoo, ic = c("bic")); data.prediction.warningLimits <- forecast(data.model, h=1, level=0.99)
.