sfondo
Sto lavorando in Network Operations Center, monitoriamo i sistemi informatici e le loro prestazioni. Una delle metriche chiave da monitorare è un numero di visitatori / clienti attualmente connessi ai nostri server. Per renderlo visibile, noi (team Ops) raccogliamo metriche come dati di serie temporali e tracciamo grafici. La grafite ci consente di farlo, ha un'API piuttosto ricca che utilizzo per creare un sistema di allerta per avvisare il nostro team in caso di cadute improvvise (principalmente) e altri cambiamenti. Per ora ho impostato una soglia statica basata sul valore medio ma non funziona molto bene (ci sono molti falsi positivi) a causa del diverso carico durante il giorno e la settimana (fattore di stagionalità).
Sembra qualcosa del genere:
I dati effettivi (un esempio per una metrica, intervallo di tempo di 15 minuti; il primo numero è un numero di utenti, il secondo - timestamp):
[{"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]]}]
Quello che sto cercando di realizzare
Ho creato uno script Python che riceve i punti dati recenti, li confronta con la media storica e avvisa se si verifica un cambiamento o una caduta improvvisi. A causa della stagionalità, la soglia "statica" non funziona bene e lo script genera avvisi di falsi positivi. Voglio migliorare un algoritmo di avviso per essere più precisi e farlo funzionare senza regolare costantemente la soglia di avviso.
Che consiglio ho bisogno e cose che ho scoperto
Cercando su google ho pensato che stavo cercando algoritmi di machine learning per il rilevamento di anomalie (senza supervisione). Ulteriori indagini hanno dimostrato che ce ne sono tonnellate ed è molto difficile capire quale sia applicabile nel mio caso. A causa delle mie conoscenze matematiche limitate, non riesco a leggere documenti accademici sofisticati e sto cercando qualcosa di semplice per un principiante nel campo.
Mi piace Python e ho familiarità con R un po ', quindi sarò felice di vedere esempi per queste lingue. Consiglia un buon libro o un articolo che mi aiuterà a risolvere il mio problema. Grazie per il tuo tempo e mi scusi per una descrizione così lunga
Link utili
Domande simili:
- Rilevazione di serie temporali e anomalie
- Rilevazione di anomalie di serie storiche con Python
- Anomalie delle serie storiche
- Algoritmi per il rilevamento di anomalie di serie storiche
- Applicazione di wavelet agli algoritmi di rilevazione delle anomalie basati su serie temporali
- Quale algoritmo dovrei usare?
Risorse esterne:
auto.arima
funzione dell'eccellente forecast
pacchetto di R (vedi jstatsoft.org/v27/i03/paper ). È possibile ottimizzare i livelli di confidenza regolando il level
parametro, ad es data.model <- auto.arima(data.zoo, ic = c("bic")); data.prediction.warningLimits <- forecast(data.model, h=1, level=0.99)
.