web-dev-qa-db-fra.com

Comment détecter un changement / tendance significatif dans les données d'une série chronologique?

J'ai donc un tableau de disons 25 échantillons et je voudrais être en mesure de noter les tendances de savoir s'il diminue n ou augmente à partir de ces 25 intervalles de temps d'échantillonnage (en gros, le tableau de 25 échantillons est mon tampon qui est rempli tous les 1 ms par exemple) ).

Notez que c'est la tendance générale que je recherche, pas la dérivée individuelle (comme je l'aurais obtenue en utilisant la différence finie ou d'autres techniques de différenciation numérique).

Fondamentalement, je m'attends à ce que mes données soient bruyantes, il peut donc y avoir des hauts et des bas même après avoir effectué le filtrage, etc. Mais c'est la tendance générale à l'augmentation ou à la diminution des comportements que je recherche.

Je veux intégrer le comportement croissant/décroissant dans chaque ms pour déclencher un événement qui est plus un événement d'interface utilisateur (clignotant une LED) afin qu'il n'ait pas à très retarder le traitement tant que je peux détecter la tendance générale.

Merci d'avance!

26
as3rdaccount

Comme cela a déjà été souligné, vous ne recherchez pas le dérivé. Vous recherchez vraiment un algorithme de détection de "changement significatif" pour une série chronologique.

Vous voudrez certainement un filtre de lissage (et le filtre de moyenne mobile est très bien - voir réponse de Bjorn pour cette partie).

Mais en plus du filtre de lissage, vous aurez également besoin d'un critère de décision ou d'un sélecteur de seuil au-delà duquel vous déciderez si les changements filtrés sont significatifs.

Si les statistiques sous-jacentes de votre série chronologique sont stables (séries chronologiques stationnaires), vous pouvez utiliser un seuil statistique fixe , dans le sens des écarts-types par rapport à la moyenne. Par exemple, vous pouvez choisir 2 écarts-types si vous voulez un seuil "d'alarme" assez fort (pensez à n'alarmer que sur les 5% de retours les plus forts).

S'il n'y a rien dans le problème sous-jacent qui suggère que votre série chronologique est stable, c'est-à-dire si la série pourrait avoir une tendance, ou si le processus sous-jacent générant la série chronologique peut subir des changements fondamentaux pendant que vous le surveillez, alors vous '' ll faudra utiliser un seuil adaptatif dynamique, ou , dans le sens du signal sur bruit (mu/sigma). Vous pouvez alors choisir de détecter tous les éléments "significatifs" qui passent le test du signal au bruit.

28
Assad Ebrahim

Cela ne me semble pas comme si vous vouliez du tout dérivé. Il semble que vous souhaitiez un filtre passe-bas. Un filtre passe-bas supprime simplement les données qui changent rapidement et laisse en place les tendances les plus longues et les plus lentes. Le filtre passe-bas le plus intuitif est un filtre à moyenne mobile, où vous prenez la moyenne des n dernières entrées, où n est déterminé en fonction du bruit par rapport à la taille de la tendance que vous recherchez. Ceci est largement utilisé, des données audio au traitement d'images en passant par les données sur le chômage (le taux de chômage moyen mobile sur quatre semaines est largement cité).

Il est possible de développer des filtres plus efficaces/sélectifs en utilisant des techniques récursives, si vous le jugez nécessaire. Vous pouvez utiliser ce didacticiel pour créer un filtre passe-bas. Il est écrit pour l'audio, mais il fonctionnera sur la plupart des données. Il vous montre comment écrire un filtre en cloche, mais un filtre passe-bas est plus facile.

http://blog.bjornroche.com/2012/08/basic-audio-eqs.html

14
Bjorn Roche

Vous pouvez utiliser un filtre wiener si vous connaissez les statistiques du signal et l'utiliser comme un prédicteur à n pas en avant. Votre décision de tendance peut alors facilement être basée sur la prédiction du filtre wiener. Si le signal n'est pas stationnaire au sens large et que vous pensez que la prédiction ne peut pas être effectuée de manière linéaire (un processus non linéaire/non stationnaire), vous pouvez utiliser un filtre wiener adaptatif comme le LMS filtre.

2
YBE