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/
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
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. –
Y sí, más reciente ==> más importante. –