J'essaie de déterminer une méthode pour comparer une série chronologique particulière à environ 10 000+ séries chronologiques de référence par programme, et de présélectionner ces séries chronologiques de référence qui peuvent être intéressantes.
La méthode que j'utilisais était la corrélation de Pearson . Pour chacune des séries chronologiques de référence, je calculais leurs coefficients de corrélation, puis triais la liste complète des séries chronologiques de référence par ordre décroissant en fonction du coefficient de corrélation. J'analyserais ensuite visuellement les N premières séries temporelles qui ont les coefficients de corrélation les plus élevés, qui devraient être les meilleures correspondances avec la série temporelle donnée.
Le problème est que je n'obtenais pas de résultats fiables. Assez souvent, la série dans la gamme N supérieure ne ressemblait pas visuellement à quelque chose comme la série temporelle donnée. Enfin, lorsque j'ai lu l'article complet ci-dessous, j'ai compris pourquoi: on ne peut pas utiliser la corrélation seule pour déterminer si deux séries temporelles sont similaires.
Maintenant, c'est un problème avec tous les algorithmes de correspondance qui calculent une sorte de distance entre deux séries temporelles. Par exemple, les deux groupes de séries chronologiques ci-dessous peuvent avoir la même distance, mais l'un est évidemment mieux adapté que l'autre.
A => [1, 2, 3, 4, 5, 6, 7, 8, 9]
B1 => [1, 2, 3, 4, 5, 6, 7, 8, 12]
distance = sqrt(0+0+0+0+0+0+0+0+9) = 3
B2 => [0, 3, 2, 5, 4, 7, 6, 9, 8]
distance = sqrt(1+1+1+1+1+1+1+1+1) = 3
Donc ma question est, y a-t-il une formule mathématique (comme la corrélation) qui peut mieux me convenir dans ce genre de situations? Celui qui ne souffre pas des problèmes mentionnés ici?
N'hésitez pas à demander des éclaircissements supplémentaires ou à améliorer le texte de la question si nécessaire. Merci! =)
ÉDITER:
@woodchips, @krystian:
La ligne du haut montre les dix dernières barres de USDCHF-Daily se terminant à la date indiquée. La deuxième ligne donne les 3 premiers résultats de la méthode A utilisée pour la corrélation (une explication suivra). La dernière ligne montre les 3 premiers résultats de la méthode B. J'ai utilisé les prix Haut-Bas-Clôture pour la corrélation. Les dernières images de chaque ligne sont ce que je considérerais comme un "bon match", la raison étant que les tournants de la série sont plus importants pour moi. C'est une coïncidence que les dernières lignes aient la corrélation maximale. Mais vous pouvez voir dans la dernière ligne que la deuxième image est une similitude très faible. Pourtant, il parvient à se faufiler dans le top 3. C'est ce qui me dérange. En raison de ce comportement, je suis obligé d'accéder visuellement à chaque corrélation et de l'accepter / la rejeter. Le quatuor d'Anscombe souligne également que la corrélation doit être inspectée visuellement. C'est pourquoi je voulais m'éloigner de la corrélation et explorer d'autres concepts mathématiques qui évaluent la similitude des séries.
La méthode A ajoute les données HLC dans une longue série et les corrèle avec la série donnée. La méthode B corrèle les données H avec les données H de référence, L avec L, C avec C, puis multiplie les trois valeurs pour calculer la corrélation nette . Évidemment, cela réduit la corrélation globale, mais je pense que cela tend à affiner les corrélations résultantes.
Mes excuses pour avoir répondu si tard. J'essayais de rassembler des données et une corrélation de code et de faire des graphiques pour l'explication. Cette image montre l'un des rares événements où les corrélations sont assez précises. Je créerai et partagerai des graphiques lorsque les correspondances résultantes sont également très trompeuses même si les valeurs de corrélation sont assez élevées.
@adambowen: vous êtes sur place. En fait, j'ai implémenté deux algorithmes différents: la corrélation et la déformation temporelle dynamique pour accéder à la similitude des séries. Pour DTW, je dois utiliser MSE comme vous l'avez dit. Pour la corrélation, je peux utiliser à la fois MSE (auquel cas il est égal au coût de l'itinéraire diagonal de DTW, sans déformation) et la formule de corrélation de Pearson réelle. Les images ci-dessous résultent de l'utilisation de la formule de corrélation de Pearson. Je vais rechercher les termes que vous avez mentionnés dans votre message et je vous ferai un compte rendu bientôt. En réalité, je n'ai pas deux séries chronologiques distinctes. Ce n'est qu'une série chronologique de plus de 10 000 points et plus. J'utilise une fenêtre coulissante de largeur N pour autocorréler la série chronologique afin de localiser les événements lorsque la série s'est comportée de la même manière qu'aujourd'hui. Si je peux trouver de bons matchs, Je pourrais peut-être prévoir le mouvement de la série chronologique actuelle en fonction de son évolution après chacun des matches identifiés. Merci pour votre perspicacité.
la source
Réponses:
Les deux méthodes les plus courantes (d'après mon expérience) pour comparer les signaux sont la corrélation et l'erreur quadratique moyenne. Informellement, si vous imaginez votre signal comme un point dans un espace à N dimensions (cela a tendance à être plus facile si vous les imaginez comme des points 3D), alors la corrélation mesure si les points sont dans la même direction (à partir de "l'origine") et l'erreur quadratique moyenne mesure si les points sont au même endroit (indépendamment de l'origine tant que les deux signaux ont la même origine). Ce qui fonctionne mieux dépend quelque peu des types de signal et de bruit dans votre système.
Le MSE semble être à peu près équivalent à votre exemple:
notez cependant que ce n'est pas vraiment une corrélation de Pearson, ce qui serait plutôt
étant donné le signal signifie x_mean et y_mean. Ceci est assez proche de la corrélation pure:
Cependant, je pense que la corrélation de Pearson sera plus robuste lorsque les signaux ont une forte composante continue (car la moyenne est soustraite) et sont normalisés, donc une mise à l'échelle dans l'un des signaux n'entraînera pas une augmentation proportionnelle de la corrélation.
Enfin, si l'exemple particulier de votre question pose problème, vous pouvez également considérer l'erreur absolue moyenne (norme L1):
Je suis conscient que les trois approches sont utilisées dans diverses applications de traitement du signal et de l'image, sans en savoir plus sur votre application particulière, je ne pourrais pas dire ce qui fonctionnerait le mieux. Je noterais que le MAE et le MSE sont moins sensibles à la façon exacte dont les données leur sont présentées, mais si l'erreur moyenne n'est pas vraiment la métrique qui vous intéresse, ils ne vous donneront pas les résultats que vous recherchez pour. Les approches de corrélation peuvent être meilleures si vous êtes plus intéressé par la «direction» de votre signal que par les valeurs réelles impliquées, mais il est plus sensible à la façon dont les données sont présentées et nécessite presque certainement un centrage et une normalisation pour donner les résultats que vous attendre.
Vous pouvez rechercher la corrélation de phase , corrélation croisée , corrélation Normalisé et filtres adaptés . La plupart d'entre eux sont utilisés pour faire correspondre certains sous-signaux dans un signal plus grand avec un décalage temporel inconnu, mais dans votre cas, vous pouvez simplement utiliser la valeur qu'ils donnent pour un décalage temporel nul si vous savez qu'il n'y a pas de décalage entre les deux signaux.
la source
Je ne sais pas si c'est la bonne façon de procéder. Mais la mise à l'échelle de vos données serait-elle utile? Essayez d'amener les valeurs entre 0 et 1. Je suppose que cela devrait fonctionner.
la source