Détection d'anomalies de séries temporelles avec Python

10

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.

Eric Miller
la source
Je ne connais pas la manière python, mais cette question est pleine d'idées concernant les approches générales: stats.stackexchange.com/questions/26688/…
rapaio
pypi.org/project/anomaly-detection Ceci est construit dans la bibliothèque pour la détection d'anomalies en python qui est similaire à la détection d'anomalies Twitter. Depuis Twitter, le code de détection d'anomalie est en langage R. Votre problème est une anomalie contextuelle. Modèle Auto.arima aussi
saravanan saminathan

Réponses:

1

Je pense qu'une approche similaire au contrôle statistique des processus , avec des cartes de contrôle, etc. pourrait être utile ici.

babelproofreader
la source
Je vais lire ça. Cette méthode convient-elle aux séries chronologiques contenant de petites quantités de données (c.-à-d. 24 mois)?
Eric Miller
fini de lire la majeure partie. Selon cette méthode, je devrais calculer le 3e écart-type pour la série chronologique et tracer une ligne sur ces limites. Si une valeur dépasse jamais ces limites, signalez-la. C'est une méthode que j'avais envisagée.
Eric Miller
1

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/

Germán Alfaro
la source
0

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.

Kevin Pei
la source
Il y a une tendance à la hausse pour la plupart des clients. Je ne suis pas sûr que vous puissiez appeler les données au hasard.
Eric Miller
2
Alors non dans ce cas. Je crois que la méthode en dessous de moi et la vôtre fonctionnerait bien dans cette situation. J'ai fait quelque chose de similaire à cela auparavant: prendre une moyenne mobile de la période X mobile, soustraire la valeur métrique actuelle de la moyenne mobile. Trouvez les limites de l'écart-type (ou utilisez une entrée subjective si vous savez dans ce scénario) de ces résidus et tout ce qui est au-dessus ou en dessous de ces limites peut être considéré comme une anomalie. Cette méthode fonctionnerait bien si un client constate soudainement une augmentation du score.
Kevin Pei