Question:
Correction des valeurs aberrantes dans une moyenne mobile
Edward Z. Yang
2009-04-12 12:24:17 UTC
view on stackexchange narkive permalink

Nous avons un démon qui lit les données de certains capteurs, et parmi les choses qu'il calcule (en plus de simplement rapporter l'état), il y a le temps moyen nécessaire aux capteurs pour passer d'une valeur à une autre. Il conserve une moyenne de 64 points de données et suppose que le temps d'exécution est assez constant.

Malheureusement, comme le montre le graphique ci-dessous, les données d'entrée ne sont pas les plus parfaites:

(Chaque ligne représente un ensemble de données différent; l'axe des x ne signifie vraiment rien d'autre qu'un vague axe de temps historique).

Ma solution évidente pour traiter avec cela serait de créer un histogramme des données, puis de choisir le mode. Cependant, je me demandais s'il y avait d'autres méthodes qui donneraient de meilleures performances ou seraient plus adaptées à un fonctionnement avec une moyenne mobile. Certaines recherches rapides sur Wikipédia suggèrent que des algorithmes de détection des valeurs aberrantes peuvent également convenir. La simplicité est un plus, puisque le démon est écrit en C.

Edit : J'ai scopé Wikipédia et suis venu avec ces différentes techniques:

  • Critère de Chauvenet: en utilisant la moyenne et l'écart type, calculez la probabilité qu'un point de données particulier se produise, puis excluez-le si la probabilité est réellement que mauvaise est inférieure à 50%. Bien que cela semble bien adapté pour corriger une moyenne mobile à la volée, je ne suis pas tout à fait convaincu de son efficacité: il semble qu'avec de grands ensembles de données, il ne voudrait pas supprimer les points de données.

  • Test de Grubbs: une autre méthode qui utilise la différence entre la moyenne et l'écart-type, et a une expression pour le cas où l'hypothèse de "pas de valeurs aberrantes" est rejetée

  • Distance de Cook: mesure l'influence d'un point de données sur une régression des moindres carrés; notre application la rejetterait probablement si elle dépassait 1

  • Moyenne tronquée: ignorez le bas et le haut de gamme, puis prenez la moyenne comme normale

Quelqu'un a-t-il une expérience spécifique et peut-il commenter ces techniques statistiques?

Aussi, quelques commentaires sur la situation physique: nous mesurons le temps moyen jusqu'à l'achèvement d'une machine à laver mécanique, donc son temps d'exécution devrait être assez constant. Je ne sais pas s'il a réellement une distribution normale.

Edit 2 : Une autre question intéressante: quand le démon est en train de bootstrap, comme dans, il n'a pas de données précédentes à analyser, comment doit-il traiter les données entrantes? Ne faites tout simplement pas d'élagage des valeurs aberrantes?

Edit 3 : Encore une chose ... si le matériel change de telle sorte que les temps d'exécution deviennent différents, cela vaut-il la peine de faire le algorithme suffisamment robuste pour ne pas abandonner ces nouveaux runtimes, devrais-je juste me rappeler de vider le cache quand cela se produit?

During bootstrapping provide 64 data points to seed the running average.
Mais que seraient ces 64 points de données? Il n'est peut-être pas bon de supposer a priori que la machine fonctionnerait en temps X.
Grubbs' test is superior to the other methods because it is computationally cheaper to determine regression coefficients than to sort and rank data.
The system has to know that it is being calibrated and bootstrapping itself. Typical techniques are to seed the first values with the initial value plus or minus ten percent. When the second value arrives the seeded values are the first and second values interleaved.
Interesting! I agree that I probably want to avoid sorting data, which would make implementing a truncated mean difficult.
If a known event is going to change the distribution it is essential to recalibrate. In a mass spectrometer the device becomes more accurate as it adjusts itself to the compound being analyzed. This is a well known method to increase accuracy while supporting a large variety of inputs.
Sept réponses:
SPWorley
2009-04-12 12:57:36 UTC
view on stackexchange narkive permalink

Si cet exemple de graphique que vous avez est typique, alors n'importe lequel des critères que vous listez fonctionnera. La plupart de ces méthodes statistiques sont pour éviter les erreurs au niveau flou de "est-ce vraiment une erreur?" Mais votre problème semble extrêmement simple ... vos erreurs ne sont pas seulement quelques écarts types par rapport à la norme, elles sont plus de 20. C'est une bonne nouvelle pour vous.

Alors, utilisez l'heuristique la plus simple. Acceptez toujours les 5 premiers points environ afin d'éviter qu'un pic de démarrage ne ruine votre calcul. Maintenez l'écart moyen et standard. Si votre point de données tombe de 5 écarts-types en dehors de la norme, supprimez-le et répétez le point de données précédent en tant que remplissage.

Si vous connaissez à l'avance votre comportement de données typique, vous n'aurez peut-être même pas besoin de calculer la moyenne et écart type, vous pouvez fixer des limites absolues de «rejet». C'est en fait mieux, car une erreur initiale ne fera pas exploser votre détecteur.

Excellent! Une chose cependant; bien que nous connaissions le comportement typique, il est possible que le matériel soit éteint, donc j'estime qu'un programme adaptable serait préférable.
Même s'il doit être adaptable, mettez-y quand même des limites EXTRÊMES. Si un problème matériel vous donne 1e280 comme valeur, ou NaN ou + Inf, vous voudrez peut-être les filtrer malgré tout.
ojblass
2009-04-12 12:35:41 UTC
view on stackexchange narkive permalink

La définition de ce qui constitue une valeur anormale doit s'adapter aux données elles-mêmes. La méthode classique pour ce faire consiste à calculer le score z de chacun des points de données et à rejeter toutes les valeurs supérieures à 3 scores z de la moyenne. Le score z peut être trouvé en prenant la différence entre le point de données et la moyenne et en divisant par l'écart type.

How well would this method work for the pathological blue line case?
The pathological blue line case has a high standard deviation. It would take a significant outlying value to get rejected.
vak
2009-06-24 17:16:27 UTC
view on stackexchange narkive permalink

Je calculerais une médiane courante (alternative robuste à la moyenne) et une folle course (alternative robuste à sd), supprimerais tout ce qui est à plus de 5 fous de la médiane http://epp.eurostat.ec. europa.eu/portal/page/portal/research_methodology/documents/S4P1_MIRROROUTLIERDETECTION_LIAPIS.pdf

fredxi
2013-07-26 17:23:19 UTC
view on stackexchange narkive permalink

Une autre solution consiste à utiliser la moyenne harmonique.

Votre cas est très similaire à l'exemple présenté dans

http://economistatlarge.com/finance/applied -finances / différences-arithmétique-géométriques-harmoniques-moyennes

Mec, harmonique signifie FTW!Les gens devraient vraiment jeter un coup d'œil à celui-ci!
ozan
2009-04-12 12:53:28 UTC
view on stackexchange narkive permalink

Vous devez avoir une idée de la variation ou de la distribution attendue, si vous voulez pouvoir exclure certaines instances de variation (supérieures) comme étant erronées. Par exemple, si vous pouvez approximer la distribution du résultat «temps moyen» à une distribution normale (gaussienne), vous pouvez alors faire ce qu'Ojblass a suggéré et exclure les résultats qui présentent une variation supérieure à un multiple de l'écart type ( qui peut être calculé à la volée avec votre moyenne mobile). Si vous souhaitez exclure les résultats qui ont 99,75% (environ) de chances d'être erronés, excluez ceux qui varient de plus de 3 écarts-types par rapport à la moyenne. Si vous voulez seulement 95% de certitude, excluez ceux qui varient de plus de 2 écarts-types et ainsi de suite.

Je suis sûr qu'un peu de googler pour "écart-type" ou "distribution gaussienne" vous aidera . Bien entendu, cela suppose que vous vous attendez à une distribution normale des résultats. Tu ne devrais pas. Dans ce cas, la première étape serait de deviner à quelle distribution vous vous attendez.

1800 INFORMATION
2009-04-12 12:26:45 UTC
view on stackexchange narkive permalink

Peut-être qu'une bonne méthode serait d'ignorer les résultats qui dépassent une certaine valeur définie en dehors de la moyenne courante actuelle?

Oui, mais comment dire ce qu'est cette «valeur définie»?
Je pense que cela viendrait d'un examen des données basé sur les résultats réels
Je voudrais vraiment éviter de coder en dur quelque chose comme ça dans le programme
It could be a configuration parameter?
dmckee
2009-04-12 20:22:27 UTC
view on stackexchange narkive permalink

La réponse naïve (et probablement la meilleure) à la question d'amorçage est "Acceptez les N premières valeurs sans filtrage." Choisissez N pour qu'il soit aussi grand que possible tout en permettant au temps de configuration d'être "court" dans votre application. Dans ce cas, vous pourriez envisager d'utiliser la largeur de la fenêtre (64 échantillons) pour N.

Ensuite, j'irais avec une sorte de filtre basé sur la moyenne et le sigma.



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 2.0 sous laquelle il est distribué.
Continuer la lecture sur narkive:
Loading...