2014-07-10 10 views
0

Je voudrais détecter une anomalie en utilisant une moyenne mobile pondérée exponentielle.Détection d'anomalies utilisant une moyenne mobile pondérée exponentielle

Pour une instance de temps t, je vais avoir la valeur du point de données (DP).
La constante EWMA sera de 0,85 (en supposant).
Pour exemple,

Time(t) DataPoint(t) EMA(t-1) EMA(t) 
1  120    0   102  
.  .    .   . 
.  .    .   . 
.  .    .   . 
.  .    .   . 
.  .    .   .  
10  300    150  277.5 

Je ne veux pas prendre la série de points de données dans le calcul.

À tout moment par exemple dire 10, je veux savoir si le point de données 300 (dans ce cas) est une anomalie ou non. J'ai également l'EMA (9) = 150 et EMA (10) = 277,5 pour le calcul (si nécessaire)

Y at-il une logique pour le calculer?

Merci d'avance!


Mise à jour:

Je pensais que la logique ci-dessous, mais pas sûr que cela fonctionnerait sûr

ABS (DP-EMA (nouveau))> 3 * SD {EMA (ancienne), EMA (nouveau)}

(ou)

ABS (DP-EMA (nouveau))> 3 * EMWSD {EMA (ancienne), EMA (nouveau)}

DP - Point de données
EMA - Exponentielle moyenne mobile pondérée

Répondre

0

Il serait difficile de dire que le DP est ou non une anomalie parce que vous ne savez pas comment développé votre EMA(t-1) est. c'est-à-dire que s'il y a beaucoup de points de données qui l'ont fait alors ce sera un meilleur marqueur que s'il n'y a qu'un seul autre point de données.

Une approche que vous pourriez prendre est d'avoir un seuil de changement. Fondamentalement, si le EMA change plus d'un pourcentage, vous le considérez comme une anomalie. Cela souffre cependant si vos chiffres sont tous très élevés et les différences sont vraiment minimes.

Ce dont vous avez vraiment besoin, c'est d'un écart-type pour détecter les anomalies. Vous pourriez également envisager de suivre cela et de l'utiliser pour mieux déterminer si vous avez une anomalie.

Si vous avez des informations sur les données avec lesquelles vous allez travailler, mettez à jour votre question pour obtenir une aide plus ciblée.

MISE À JOUR:

En réponse aux données que vous avez ajouté Je suppose que vous voulez 300 comme une anomalie (vos autres valeurs étaient 120 et 150). La méthode que j'ai suggérée ci-dessus fonctionnera cependant si le nombre après 300 est plus normal, disons 170 qui serait probablement aussi signalé comme anomalie. À mon humble avis, le poids que vous mettez sur les nouvelles valeurs est excessif.Je ferais l'inverse:

new = .85 * ancienne + .15 * newDP

plutôt que ce que vous avez des

new = .15 * vieux + .85 * newDP

Si vous changez à ce que je suggère, vous obtiendrez des résultats équitables. En fonction de votre objectif global, des résultats équitables peuvent suffire.

+0

Merci pour la réponse, j'ai mis à jour la question avec quelques exemples de données .. Toutes les suggestions maintenant? – Aravind

+0

OK mis à jour ma réponse. Vous auriez dû demander cela avant, mais y a-t-il une raison pour laquelle vous ne pouvez pas conserver un enregistrement? – wckd

+0

Raisons pour lesquelles je n'ai pas gardé d'enregistrement 1. Je dois prendre en compte les anciennes valeurs du début de la série chronologique, 2. Je ne veux pas de modèle basé sur une fenêtre. 3.Also Je ne veux pas chercher toute la série de données pour chaque instance de temps pour le calcul Je me demandais si la logique suivante serait en fait fonctionner, mais pas sûr Anomaly est vrai si: ABS (DP-EMA (nouveau))> 3 * SD {EMA (ancien), EMA (nouveau)} (ou) ABS (DP-EMA (nouveau))> 3 * EMWSD {EMA (ancien), EMA (nouveau)} DP - Point de données EMA - Moyenne mobile pondérée exponentielle – Aravind

Questions connexes