Estoy trabajando con una serie temporal de puntajes de anomalías (el fondo es la detección de anomalías en redes de computadoras). Cada minuto, obtengo un puntaje de anomalía que me dice cuán "inesperado" o anormal es el estado actual de la red. Cuanto más alto sea el puntaje, más anormal será el estado actual. Los puntajes cercanos a 5 son teóricamente posibles pero ocurren casi nunca.
Ahora quiero proponer un algoritmo o una fórmula que determine automáticamente un umbral para esta serie temporal de anomalías. Tan pronto como un puntaje de anomalía excede este umbral, se activa una alarma.
La distribución de frecuencias a continuación es un ejemplo para una serie temporal de anomalías durante 1 día. Sin embargo, es no seguro asumir que cada serie de tiempo anomalía se va a ver así. En este ejemplo especial, un umbral de anomalía como el cuantil .99 tendría sentido ya que los pocos puntajes de la derecha pueden considerarse anomalías.
Y la misma distribución de frecuencia que las series de tiempo (solo varía de 0 a 1 ya que no hay puntajes de anomalías más altos en la serie de tiempo):
Desafortunadamente, la distribución de frecuencia puede tener formas, donde el cuantil .99 no es útil . Un ejemplo está abajo. La cola derecha es muy baja, por lo que si se utiliza el cuantil .99 como umbral, esto podría dar lugar a muchos falsos positivos. Esta distribución de frecuencia no parece contener anomalías, por lo que el umbral debería estar fuera de la distribución en alrededor de 0.25.
En resumen, la diferencia entre estos dos ejemplos es que el primero parece exhibir anomalías mientras que el segundo no.
Desde mi punto de vista ingenuo, el algoritmo debería considerar estos dos casos:
- Si la distribución de frecuencia tiene una cola derecha grande (es decir, un par de puntajes anormales), el cuantil .99 puede ser un buen umbral.
- Si la distribución de frecuencia tiene una cola derecha muy corta (es decir, sin puntajes anormales), entonces el umbral debe estar fuera de la distribución.
/ edit: tampoco existe una verdad básica, es decir, conjuntos de datos etiquetados disponibles. Por lo tanto, el algoritmo es "ciego" frente a la naturaleza de los puntajes de anomalías.
Ahora no estoy seguro de cómo se pueden expresar estas observaciones en términos de un algoritmo o una fórmula. ¿Alguien tiene alguna sugerencia de cómo se podría resolver este problema? Espero que mis explicaciones sean suficientes ya que mi experiencia estadística es muy limitada.
¡Gracias por tu ayuda!
fuente
Respuestas:
Puede encontrar este documento de interés. Vea también una presentación más detallada de modelos similares en West & Harrison . También hay otros ejemplos de este tipo de monitoreo, muchos de los cuales son más recientes, pero este no es exactamente mi timonera :). Indudablemente, hay implementaciones adecuadas de estos modelos, pero no sé cuáles podrían ser de improviso ...
La idea básica es que tiene un modelo de conmutación donde algunas observaciones / secuencia de observaciones se atribuyen a estados anormales de la red, mientras que el resto se considera normal. Una mezcla como esta podría explicar la larga cola derecha en su primer diagrama. Un modelo dinámico también podría alertarlo sobre saltos anormales como a las 8:00 y 4:00 en tiempo real al asignar alta probabilidad a nuevas observaciones que pertenecen a un estado problemático. También podría extenderse fácilmente para incluir cosas como predictores, componentes periódicos (quizás su puntaje aumenta / disminuye un poco con la actividad) y ese tipo de cosas.
Editar: También debería agregar, este tipo de modelo está "sin supervisión" en el sentido de que las anomalías se detectan al mostrar un gran cambio medio o un aumento en la varianza. A medida que reúne datos, puede mejorar el modelo con distribuciones previas más informativas. Pero tal vez, una vez que tenga suficientes datos (¡y ejemplos de entrenamiento ganados con esfuerzo al lidiar con problemas de red!), Podría idear algunas reglas simples de monitoreo (umbrales, etc.)
fuente
¿Tiene algún ejemplo 'etiquetado' de lo que constituye una anomalía? es decir, valores asociados con una falla de la red, o algo así?
Una idea que podría considerar aplicar es una curva ROC, que es útil para elegir umbrales que cumplan un criterio específico, como maximizar los verdaderos positivos o minimizar los falsos negativos.
Por supuesto, para usar una curva ROC, debe etiquetar sus datos de alguna manera.
fuente
El gráfico de la "serie original" no tiene que exhibir ninguna estructura predefinida. Lo que es crítico es que el gráfico de los "residuos de una serie de modelos adecuados" necesita exhibir una estructura gaussiana. Esta "estructura gaussiana" generalmente se puede obtener mediante la incorporación de una o más de las siguientes "transformaciones" 1. un MODELO arima 2. Ajustes para cambios de nivel local o tendencias de tiempo local o pulsos estacionales o pulsos ordinarios 3. un análisis ponderado que explota la heterogeneidad de varianza probada 4. una posible transformación de potencia (registros, etc.) para tratar una heterogeneidad de varianza específica 5. la detección de puntos en el tiempo en los que el modelo / parámetros pueden haber cambiado.
La detección de intervención arrojará una declaración sobre la importancia estadística del evento más reciente que sugiere normalidad o una anomalía
fuente
En la respuesta del OP a mi respuesta anterior, ha publicado sus datos en la web. 60 lecturas por hora durante 24 horas durante 6 días . Como se trata de herramientas transversales de series temporales como DBSCAN, tienen una relevancia limitada ya que los datos tienen una dependencia temporal. Con datos como este, normalmente se busca la estructura dentro de la hora y dentro del día. Además de este tipo de estructura, se puede buscar la detección de anomalías que pueden ser de una sola vez (pulso) o de naturaleza sistemática (cambio de nivel) utilizando métodos que están bien documentados (consulte la literatura de Tsay, Tiao, Chen et. al.) Estos procedimientos arrojaron las siguientes "anomalías". Tenga en cuenta que un cambio de nivel es esencialmente sugestivo de "grupos" separados.
fuente
Después de que un amigo mío me indicó la dirección de los algoritmos de agrupamiento , me topé con DBSCAN que construye grupos en el espacio n-dimensional de acuerdo con dos parámetros predefinidos. La idea básica es la agrupación basada en la densidad, es decir, las regiones densas forman agrupaciones. Los valores atípicos se devuelven por separado mediante el algoritmo. Entonces, cuando se aplica a mi histograma unidimensional, DBSCAN puede decirme si mis puntajes de anomalía presentan valores atípicos. Nota: en DBSCAN, un valor atípico es solo un punto que no pertenece a ningún clúster. Durante las operaciones normales, espero que el algoritmo produzca solo un clúster (y no valores atípicos).
Después de experimentar un poco, descubrí que los parámetros funcionan bien. Esto significa que los puntos tienen que exhibir una distancia de al menos 0.1 al grupo "normal" para ser vistos como atípicos.ϵ≈0.1
Después de poder identificar valores atípicos, encontrar el umbral se reduce a reglas simples como:
De todos modos, ¡gracias por todas las respuestas útiles!
fuente