2011-08-31 19 views
5

En una aplicación web, recibo un activador cada vez que ocurre un evento. Quiero detectar picos de frecuencia "violentos", que probablemente se traduzcan en un comportamiento anormal.Detección en tiempo real de picos de frecuencia de eventos

puedo pensar en dos formas ingenuas de lograr que:

  • umbral fijo - "Si hay más de 500 eventos se producen dentro de un minuto, algo probablemente es incorrecto". Este método no puede manejar infracciones de umbral sin problemas o aumentar constantemente el tráfico, a menos que la aplicación pueda ajustar el umbral periódicamente.

  • Heurística relacionada con ventanas: divida la ventana en N intervalos iguales (?). Mientras N> 0, calcule la frecuencia de los eventos ocurridos en [ahora- (N * interval_length), ahora]. Guárdelo en una lista. Disminuya N por 1. Repita. Detecta los valores atípicos de la lista. Si hay un valor atípico mayor que la frecuencia media de [ahora window_length, ahora], algo es probablemente equivocado."

Me gustaría saber si hay lugar a una solución común/estándar para este problema o . si se puede pensar en algo más eficiente o elegante

gracias de antemano

EDITAR -. Otra sugerencia

Un amigo mío sugirió detección de comportamientos aberrantes con Holt-Winters previsión. Puede encontrar más información acerca de esta metodología en los enlaces siguientes:

http://www.hpl.hp.com/news/events/csc/2005/jake_slides.pdf

http://www.usenix.org/events/lisa00/full_papers/brutlag/brutlag_html/

Respuesta

1

no soy experto. Lo que haría:

Digamos que solo conserva los últimos resultados n y x_n es la última muestra (diferencia de tiempo del evento anterior).

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

Si la diferencia T - T_{previous}, donde T_{previous} es el valor previo de T, supera un límite, hacer algo.

Si sus valores de x_i son binarios, puede hacer trucos con las operaciones shift y or, si la velocidad es una cuestión.

+0

Tx por responder =) Algunas preguntas aquí ... a) Cuanto más reciente sea el evento, más peso tendrá, ¿no? b) ¿Qué significa 'a'? ¿No podría simplemente ajustar T para evitar las 'n' multiplicaciones? – sawidis

+0

Buenas observaciones. Había olvidado el índice en 'α_i'. En caso de que quieras un peso especial. Podría ser 'a_i = 1' para cada' i'. Si quiere desplazar T a la derecha y agregar el nuevo valor de x_n, tiene razón. –

+1

Y sí, más reciente ==> más importante. –

0

acaba de obtener un promedio simple sobre los valores de los minutos últimos X (mantener los valores)

comparar cada nuevo valor de entrada con el promedio:

  • si la diferencia es más de Y% entonces su un valor atípico, alerta.
  • Si es menor, agréguelo al promedio y elimine el primero, estilo fifo.

Si crees que se puede engañar con un "tráfico en constante aumento", haz que X sea lo suficientemente grande.

+1

Creo que nos preocupan más las señales que son más frecuentes ahora que las señales inmediatamente anteriores, que las que ocurrieron antes de "un tiempo". Donde 'un rato' es la longitud de la ventana. –

0

Puede calcular un estimador de medias flotantes ponderado exponencialmente y compararlo con su valor anterior. Es probable que lo que está intentando detectar sea un aumento abrupto, pero combinado con un cierto umbral mínimo (por ejemplo, 0 a 1 no es significativo).

Pero supongamos que la media flotante actual salta de 100 a 200, que probablemente sea el tipo de eventos que desea detectar.

Cuestiones relacionadas