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.
Respuestas:
Creo que un enfoque similar al control estadístico de procesos , con gráficos de control, etc., podría ser útil aquí.
fuente
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/
fuente
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.
fuente