Detección de anomalías de series temporales con Python

9

Necesito implementar la detección de anomalías en varios conjuntos de datos de series temporales. Nunca he hecho esto antes y esperaba algún consejo. Me siento muy cómodo con Python, por lo que preferiría que se implementara la solución (la mayor parte de mi código es Python para otras partes de mi trabajo).

Descripción de los datos: son datos de series temporales mensuales que apenas comienzan a recopilarse en los últimos 2 años más o menos (es decir, solo 24-36 períodos de tiempo). Esencialmente, hay varias métricas que se monitorean mensualmente para varios clientes.

time_period    client    metric    score
01-2013        client1   metric1   100
02-2013        client1   metric1   119
01-2013        client2   metric1   50
02-2013        client2   metric2   500
...

Esto es lo que estoy pensando: extraer datos en un marco de datos (pandas), luego calcular un promedio móvil de 6 meses para cada par de cliente / métrica. Si el valor del período de tiempo actual supera algún umbral basado en el promedio de 6 meses, levante la bandera. El problema parece bastante simple. Solo quiero asegurarme de que estoy adoptando un enfoque sólido.

Cualquier consejo para desarrollar esta idea un poco sería muy apreciado. Sé que la pregunta es un poco abstracta, y me disculpo por eso.

Eric Miller
fuente
No conozco la forma de Python, pero esta pregunta está llena de ideas sobre los enfoques generales: stats.stackexchange.com/questions/26688/…
rapaio
pypi.org/project/anomaly-detection Está construido en la biblioteca para la detección de anomalías en python, que es similar a la detección de anomalías en twitter. Dado que el código de detección de anomalías de Twitter está en lenguaje R. Su problema es la anomalía contextual. Auto.arima model también
saravanan saminathan

Respuestas:

1

Creo que un enfoque similar al control estadístico de procesos , con gráficos de control, etc., podría ser útil aquí.

lector de babelproof
fuente
Leeré esto ¿Es este método bueno para series temporales con pequeñas cantidades de datos (es decir, 24 meses)?
Eric Miller
Terminé de leer la mayor parte. De acuerdo con este método, debo calcular la tercera desviación estándar para la serie de tiempo y graficar una línea en estos límites. Si un valor excede estos límites, márquelo. Este es un método que había considerado.
Eric Miller
1

Hay muchas opciones para la detección de anomalías, desde una desviación estándar utilizando la función de desviación estándar de Pandas, hasta un método bayesiano y muchos métodos de aprendizaje automático entre ellos: agrupación, SVM, proceso gaussiano, redes neuronales.

Eche un vistazo a este tutorial: https://www.datascience.com/blog/python-anomaly-detection

Desde una perspectiva bayesiana, recomiendo Facebook Prophet. Ofrece resultados muy avanzados sin la necesidad de ser un experto en series temporales. Tiene las opciones para trabajar en meses, días, etc., y los "intervalos de incertidumbre" ayudan con las anomalías.

Finalmente, recomiendo este blog de Uber sobre el uso de redes neuronales (LSTM) para la detección de anomalías, tiene información muy útil: https://eng.uber.com/neural-networks/

Germán Alfaro
fuente
0

Si está dispuesto a asumir que su conjunto de datos se distribuye normalmente, puede estimar los cuantiles de esta distribución y ver si está fuera, por ejemplo, el cuantil del 95%, 80%, etc. No estoy muy familiarizado con las bibliotecas de Python, pero estoy seguro de que ya hay funciones integradas para ello.

Kevin Pei
fuente
Hay una tendencia al alza para la mayoría de los clientes. No estoy seguro de que pueda llamar a los datos al azar.
Eric Miller
2
Entonces no en este caso. Creo que el método debajo de mí y el suyo funcionaría bien en esta situación. Hice algo similar a esto antes: tomar un promedio móvil variable del período X, restar el valor métrico actual del promedio móvil. Encuentre los límites de la desviación estándar (o use una entrada subjetiva si sabe en este escenario) de estos residuos y cualquier cosa por encima o por debajo de estos límites puede considerarse una anomalía. Este método funcionaría bien si un cliente de repente ve un aumento en la puntuación.
Kevin Pei