J'ai joint une photo de la série chronologique dont je parle. Le haut est la série originale, le bas est la série différenciée.
Chaque point de données est une lecture moyenne de 5 minutes à partir d'une jauge de contrainte. Cette jauge de contrainte est placée sur une machine. Les zones bruyantes correspondent aux zones où la machine est allumée, les zones propres le sont lorsque la machine est éteinte. Si vous regardez la zone entourée de rouge, il y a des étapes anormales dans la lecture que j'aimerais pouvoir détecter automatiquement.
Je suis complètement perplexe sur la façon dont je pourrais y arriver - des idées?
time-series
change-point
mohamedmoussa
la source
la source
Réponses:
Il semble que vous recherchiez des pointes dans des intervalles de calme relatif . "Relatif" signifie par rapport aux valeurs voisines typiques, ce qui suggère de lisser la série. Un lisse robuste est souhaitable précisément parce qu'il ne doit pas être influencé par quelques pointes locales. "Silencieux" signifie que la variation autour de cette douceur est faible. Encore une fois, une estimation robuste de la variation locale est souhaitable. Enfin, un «pic» serait un grand résidu en tant que multiple de la variation locale.
Pour mettre en œuvre cette recette , nous devons choisir (a) à quelle distance "proche" signifie, (b) une recette pour le lissage, et (c) une recette pour trouver la variation locale. Vous devrez peut-être expérimenter avec (a), alors faisons-en un paramètre facilement contrôlable. De bons choix facilement disponibles pour (b) et (c) sont respectivement Lowess et IQR . Voici une
R
implémentation:À titre d'exemple de son utilisation, considérons ces données simulées où deux pointes successives sont ajoutées à une période de silence (deux de suite devraient être plus difficiles à détecter qu'une seule pointe isolée):
Voici l'intrigue diagnostique:
Malgré tout le bruit dans les données d'origine, ce tracé détecte magnifiquement les pointes (relativement petites) au centre. Automatisez la détection en balayant les
f(x)
valeurs les plus grandes (supérieures à environ 5 en valeur absolue: expérimentez pour voir ce qui fonctionne le mieux avec les données d'échantillon).La détection parasite à l'instant 273 était une valeur aberrante locale aléatoire. Vous pouvez affiner le test pour exclure (la plupart) de telles valeurs parasites en modifiant
f
pour rechercher simultanément des valeurs élevées du diagnosticr/z
et des valeurs faibles de l'IQR en cours d'exécutionz
. Cependant, bien que le diagnostic ait une échelle et une interprétation universelles (sans unité), la signification d'un IQR «faible» dépend des unités des données et doit être déterminée par l'expérience.la source
Voici une suggestion de deux cents.
DénoterXt la série différenciée. DonnéΔ > 0 et un point t , définir
Car disonsΔ = 50 , la valeur de a ( Δ , t ) caractérise les zones off / on par des valeurs basses / hautes.
Une étape anormale est un pointt où |Xt|>αa(Δ,t) - vous aurez besoin de faire quelques réglages α,Δ pour détecter ce que vous voulez et éviter les faux positifs lorsque la machine s'allume. J'essaierais d'abord avecΔ=50 et α=4 .
Alternativement, vous pouvez regarder les pointst où a(δ,t)>αa(Δ,t) pour un δ≪Δ (par exemple δ=10 , Δ=100 ), cela peut aider au réglage fin (dans ce cas, vous prendriez une valeur plus petite pour α ).
la source