Je dois implémenter la détection d'anomalies sur plusieurs ensembles de données chronologiques. Je n'avais jamais fait cela auparavant et j'espérais quelques conseils. Je suis très à l'aise avec python, donc je préférerais que la solution y soit implémentée (la plupart de mon code est en python pour d'autres parties de mon travail).
Description des données: il s'agit de données mensuelles de séries chronologiques qui commencent à peine à être collectées au cours des 2 dernières années (c'est-à-dire seulement 24 à 36 périodes). Essentiellement, plusieurs mesures sont surveillées mensuellement pour plusieurs clients.
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
...
Voici ce que je pense: extraire les données dans un cadre de données (pandas), puis calculer une moyenne mobile sur 6 mois pour chaque paire client / métrique. Si la valeur de la période actuelle dépasse un certain seuil basé sur la moyenne de 6 mois, relevez l'indicateur. Le problème semble assez simple. Je veux juste m'assurer que j'adopte une approche solide.
Tout conseil pour étoffer un peu cette idée serait grandement apprécié. Je sais que la question est un peu abstraite et je m'en excuse.
la source
Réponses:
Je pense qu'une approche similaire au contrôle statistique des processus , avec des cartes de contrôle, etc. pourrait être utile ici.
la source
Il existe de nombreuses options pour la détection d'anomalies, depuis un écart-type utilisant la fonction de déviation std de Pandas, jusqu'à une méthode bayésienne et de nombreuses méthodes d'apprentissage automatique entre les deux: clustering, SVM, Gaussian Process, Neural networks.
Jetez un œil à ce tutoriel: https://www.datascience.com/blog/python-anomaly-detection
Du point de vue bayésien, je recommande Facebook Prophet. Il donne des résultats très avancés sans avoir besoin d'être un expert en séries temporelles. Il a les options pour travailler sur des mois, des jours, etc., et des "intervalles d'incertitude" pour aider avec les anomalies.
Enfin, je recommande ce blog Uber sur l'utilisation des réseaux neuronaux (LSTM) pour la détection d'anomalies, il a des informations très utiles: https://eng.uber.com/neural-networks/
la source
Si vous êtes prêt à supposer que votre ensemble de données est normalement distribué, alors vous pouvez estimer les quantiles de cette distribution et voir si elle tombe en dehors, par exemple 95%, 80%, etc. quantile. Je ne suis pas trop familier avec les bibliothèques Python mais je suis sûr qu'il existe déjà des fonctions conçues pour cela.
la source