In un'applicazione Web, ottengo un trigger ogni volta che si verifica un evento. Voglio rilevare picchi di frequenza "violenti", che probabilmente si traducono in comportamenti anormali.Rilevamento in tempo reale dei picchi di frequenza degli eventi
Mi vengono in mente due modi ingenui il conseguimento di tale:
soglia fissa - "Se più di 500 eventi si verificano all'interno di un minuto, sth probabilmente è sbagliato". Questo metodo non può gestire violazioni di soglia uniformi o traffico in costante aumento, a meno che l'applicazione non possa regolare la soglia periodicamente.
euristico relativo alla finestra - Dividere la finestra in N intervalli uguali (?). Mentre N> 0, calcola la frequenza degli eventi avvenuti in [now- (N * interval_length), ora]. Salvalo in un elenco. Diminuire N di 1. Ripetere. Rileva i valori anomali dell'elenco. Se c'è un valore erratico più grande della frequenza media di [ormai window_length, ora], sth è probabilmente sbagliato."
mi piacerebbe sapere se v'è invece una soluzione comune/standard per questo problema o . se si può pensare a qualcosa di più efficiente o elegante
Grazie in anticipo
EDIT -. Un altro suggerimento
Un mio amico ha suggerito il rilevamento di comportamento aberrante con Holt-Winters previsione. Potete trovare ulteriori informazioni su questa metodologia nel link qui sotto:
http://www.hpl.hp.com/news/events/csc/2005/jake_slides.pdf
http://www.usenix.org/events/lisa00/full_papers/brutlag/brutlag_html/
Tx per rispondere =) Alcune domande qui .. a) Più l'evento è recente, più peso ottiene, giusto? b) Che cosa significa 'a'? Non potrei semplicemente regolare T in modo da evitare le moltiplicazioni "n"? – sawidis
Buone osservazioni. Avevo dimenticato l'indice a 'α_i'. Nel caso in cui desideri un peso speciale. Potrebbe essere 'a_i = 1' per ogni' i'. Se intendi spostare T a destra e aggiungere il nuovo valore di x_n, hai ragione. –
E sì, più recente ==> più importante. –