2011-08-31 8 views
5

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/

risposta

1

Io non sono un esperto. Cosa farei:

Diciamo che mantieni solo gli ultimi risultati n e x_n è l'ultimo esempio (differenza di tempo rispetto all'evento precedente).

α_n x_n + α_{n-1}/2 x_{n-1} + ... + α_{1} 2^{-n} x_1 = T 

Se la differenza T - T_{previous}, dove T_{previous} è il valore precedente di T, superare un limite, fare qualcosa.

Se i valori di x_i sono binari, è possibile bei trucchi con shift e or operazioni, se la velocità è una questione.

+0

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

+0

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. –

+1

E sì, più recente ==> più importante. –

0

solo ottenere una semplice media sui valori delle ultime X minuti (mantenere i valori)

confronta ciascun nuovo valore in ingresso alla media:

  • se la differenza è superiore Y% quindi il suo un outlier, allerta.
  • Se inferiore, aggiungere questo alla media e rimuovere il primo, stile fifo.

Se pensi che possa essere ingannato con "traffico in costante aumento", rendi X sufficientemente grande.

+1

Penso che ci preoccupiamo di più dei segnali che sono più frequenti ora dei segnali immediatamente precedenti, rispetto a quelli che sono accaduti prima di "un po '". Dove 'un po 'è la lunghezza della finestra. –

0

È possibile calcolare uno stimatore di media mobile con ponderazione esponenziale e confrontarlo con il suo valore precedente. Un aumento improvviso è probabilmente quello che stai cercando di rilevare, ma combinato con una certa soglia minima (quindi, ad esempio, da 0 a 1 non è significativo).

Ma diciamo che l'attuale media mobile salta da 100 a 200, che probabilmente è il tipo di eventi che si desidera rilevare.