Tengo un script de Python que crea una lista de listas de tiempo de actividad del servidor y datos de rendimiento, donde cada sublista (o 'fila') contiene las estadísticas de un clúster en particular. Por ejemplo, bien formateado se parece a esto:
------- ------------- ------------ ---------- -------------------
Cluster %Availability Requests/Sec Errors/Sec %Memory_Utilization
------- ------------- ------------ ---------- -------------------
ams-a 98.099 1012 678 91
bos-a 98.099 1111 12 91
bos-b 55.123 1513 576 22
lax-a 99.110 988 10 89
pdx-a 98.123 1121 11 90
ord-b 75.005 1301 123 100
sjc-a 99.020 1000 10 88
...(so on)...
Entonces, en forma de lista, podría verse así:
[[ams-a,98.099,1012,678,91],[bos-a,98.099,1111,12,91],...]
Mi pregunta:
- ¿Cuál es la mejor manera de determinar los valores atípicos en cada columna? ¿O los valores atípicos no son necesariamente la mejor manera de atacar el problema de encontrar 'maldad'?
En los datos anteriores, definitivamente me gustaría saber sobre bos-b y ord-b, así como ams-a, ya que su tasa de error es muy alta, pero los otros pueden descartarse. Dependiendo de la columna, dado que más alto no es necesariamente peor ni más bajo, estoy tratando de encontrar la forma más eficiente de hacerlo. Parece que numpy se menciona mucho para este tipo de cosas, pero no estoy seguro de por dónde empezar (lamentablemente, soy más administrador de sistemas que estadístico ...). Cuando pregunté en Stack Overflow, alguien mencionó el uso de la función scoperpercentile de numpy y arrojó algo por encima del percentil 99. ¿Parece una buena idea?
(Publicación cruzada de stackoverflow, aquí: /programming/4606288 )
Una manera simple de encontrar servidores anómalos sería asumir que están distribuidos de manera idéntica, estimar los parámetros de la población y clasificarlos de acuerdo con sus probabilidades, ascendentes. Las probabilidades de columna se combinarían con su producto o su mínimo (o alguna otra norma T). Esto funciona bastante bien siempre que los valores atípicos sean raros. Para la detección de valores atípicos en sí, los parámetros de población estables generalmente se estiman de forma iterativa eliminando los valores atípicos descubiertos, pero eso no es vital siempre que inspeccione manualmente la lista y evite así los umbrales.
Para las probabilidades, puede probar Beta para las proporciones y Poisson para las tasas.
Como señaló David, la detección de valores atípicos no es lo mismo que el análisis de confiabilidad, que marcaría todos los servidores que exceden algún umbral. Además, algunas personas abordarían el problema a través de las funciones de pérdida, definiendo el dolor que siente cuando algún servidor tiene una disponibilidad del 50% o una tasa de error de 500, y luego los clasifica de acuerdo con ese dolor.
fuente
Identificar un punto de datos dado como un valor atípico implica que hay algún proceso o modelo de generación de datos del que se espera que provengan los datos. Parece que no está seguro de cuáles son esos modelos para las métricas y clústeres dados que le preocupan. Entonces, esto es lo que consideraría explorar: gráficos de control de procesos estadísticos .
La idea aquí sería recopilar el
-% Disponibilidad
- Solicitudes / Sec
- Errores / Sec
-% Memory_Utilization
métricas para cada uno de sus clústeres. Para cada métrica, cree un subconjunto de datos que solo incluya valores que sean "razonables" o estén bajo control. Cree los gráficos para cada métrica en función de estos datos bajo control. Luego puede comenzar a alimentar datos en vivo a su código de gráficos y evaluar visualmente si las métricas están bajo control o no.
Por supuesto, hacer esto visualmente para múltiples métricas en muchos grupos puede no ser factible, pero esta podría ser una buena manera de comenzar a aprender sobre la dinámica que enfrenta. Luego, puede crear un servicio de notificación para clústeres con métricas que se salgan de control. En este sentido, he jugado con el uso de redes neuronales para clasificar automáticamente los patrones de la tabla de control como OK frente a algún sabor específico de fuera de control (p. Ej.,% De tendencia de disponibilidad hacia abajo o comportamiento cíclico en errores / seg). Hacer esto le brinda las ventajas de los gráficos de control de procesos estadísticos (utilizados durante mucho tiempo en entornos de fabricación), pero alivia la carga de tener que pasar mucho tiempo mirando los gráficos, ya que puede entrenar una red neuronal para clasificar patrones según su interpretación experta.
En cuanto al código, existe el paquete spc en pypi pero no tengo ninguna experiencia al usarlo. Mi ejemplo de juguete del uso de redes neuronales (Bayes ingenuos también) se puede encontrar aquí .
fuente