Comment prédire une série chronologique à partir d'une autre série chronologique, si elles sont liées

14

J'essaie de résoudre ce problème depuis plus d'un an sans grand progrès. Cela fait partie d'un projet de recherche que je fais, mais je vais l'illustrer avec un exemple d'histoire que j'ai inventé, car le domaine réel du problème est un peu déroutant (eye-tracking).

Vous êtes un avion qui suit un navire ennemi qui traverse l'océan, vous avez donc collecté une série de coordonnées (x, y, temps) du navire. Vous savez qu'un sous-marin caché voyage avec le navire pour le protéger, mais bien qu'il y ait une corrélation entre leurs positions, le sous-marin s'éloigne souvent du navire, donc bien qu'il soit souvent près de lui, il peut également être de l'autre côté de la monde de temps en temps. Vous voulez prédire le chemin du sous-marin, mais malheureusement il vous est caché.

Mais un mois en avril, vous remarquez que le sous-marin oublie de se cacher, vous avez donc une série de coordonnées pour le sous-marin et le navire tout au long de 1 000 voyages. En utilisant ces données, vous aimeriez construire un modèle pour prédire le chemin du sous-marin caché étant donné uniquement les mouvements du navire. La ligne de base naïve serait de dire "position du sous-marin suppose =" position actuelle du navire "mais d'après les données d'avril où le sous-marin était visible, vous remarquez que le sous-marin a tendance à être un peu en avant du navire, donc" position du sous-marin " guess = position du navire en 1 minute "est une estimation encore meilleure. En outre, les données d'avril montrent que lorsque le navire fait une pause dans l'eau pendant une période prolongée, le sous-marin est susceptible de patrouiller loin dans les eaux côtières. Il existe d'autres modèles bien sûr.

Comment construiriez-vous ce modèle, compte tenu des données d'avril comme données d'entraînement, pour prédire le chemin du sous-marin? Ma solution actuelle est une régression linéaire ad hoc où les facteurs sont le "temps de trajet", "la coordonnée x du navire", "le navire a été inactif pendant 1 jour", etc. . Mais j'aimerais vraiment un moyen de générer ces facteurs automatiquement à partir des données d'avril. De plus, un modèle qui utilise la séquence ou le temps serait bien, car la régression linéaire ne fonctionne pas et je pense que c'est pertinent.

Merci d'avoir lu tout cela et je serais heureux de clarifier quoi que ce soit.

Cargaison et sous-marin
la source
5
Une façon qui peut faciliter la construction de votre modèle consiste à utiliser des coordonnées polaires au lieu de coordonnées cartésiennes. Si vous définissez l'origine égale au navire ennemi et que le navire est toujours orienté vers le nord, vous pouvez dire quelque chose comme la position du sous-marin au moment est ( r ( t j ) , θ ( t j ) ) avec r étant la distance et θ étant l'angle. Maintenant, nous attendons | θ | être petit car le sous-marin est généralement devant le navire, et r doit être petit mais pas proche de zéro (sinon le sous-marin s'écrase sur le navire). Vous avez aussitj(r(tj),θ(tj))rθ|θ|r grossir pour les navires qui font une pause. r
Probabilislogic
2
J'allais suggérer quelque chose de similaire à probabilislogic - vous avez besoin d'une variable qui est la distance entre le navire et le sous-marin. La bonne chose à propos des coordonnées polaires est que ces informations, ainsi que la directionnalité, sont également incluses. Vous pouvez alors essayer une régression linéaire sur cette nouvelle variable.
apprenant
Merci pour les suggestions. Une chose pour laquelle je me bats avec les coordonnées polaires est que si j'essaie de prédire la variable d'angle, elle "boucle" donc 0 == 360, ce qui n'a pas de sens d'un point de vue de prédiction. Avez-vous des suggestions pour y faire face?
Cargoship And Submarine
@probabilityislogic Après y avoir réfléchi un peu plus, serait-il judicieux d'utiliser des coordonnées polaires mais d'utiliser le sin (thêta) au lieu de thêta comme variable à prévoir? Bien qu'alors il se comporterait plus comme un delta_y.
Cargoship And Submarine
En ce qui concerne l'utilisation des coordonnées polaires, vous voudrez peut-être en savoir plus sur les statistiques directionnelles .
regularfish

Réponses:

3

Voici une approche qui n'utilise aucune information «contextuelle», c'est-à-dire qu'elle ne prend pas en compte le fait qu'un «sous-marin suit un navire». D'un autre côté, il est facile de commencer par:

Désigner par

xsub(t),ysub(t)

xship(t),yship(t)

les coordonnées du sous-marin et du navire au temps , et définir la "série de distance" part

xdist(t)=xship(t)xsub(t)

ydist(t)=yship(t)ysub(t)

Ma suggestion est que vous prédisiez chacun de ces éléments séparément (vous pouvez les lier ensemble plus tard).

x

alors

Xjest(t)=100±dixwjeggle(t)

wiggle

xywiggleμσxdist

xdist(t)=μ+σWx(t)

Wx(t)xdist

Une autre stratégie que les gens utilisent (qui, je pense, fonctionnera pour vous) est de diviser leur série en

Polynomial base + Cyclic pattern + Bounded randomness

Dans le cas d'un sous-marin et d'un navire, la partie polynomiale serait probablement constante et la partie cyclique une somme de sinus et cosinus (des vagues de l'océan ...). Cela peut ne pas être le cas pour l'eye-tracking.

Il existe des outils qui peuvent comprendre cela pour vous. Voici deux que je connais:

  1. DTREG (licence d'évaluation de 30 jours)
  2. Algorithme de série temporelle Microsoft qui fait partie de leur produit SQL Server. J'utilise actuellement leur édition d'évaluation de 180 jours, elle est facile à utiliser.

Voici une capture d'écran de l'outil SQL Server (la partie en pointillé est la prédiction):

entrez la description de l'image ici

Un algorithme qu'ils utilisent s'appelle ARIMA. Voulant apprendre comment cela fonctionne, j'ai fait quelques recherches sur Google et j'ai trouvé ce livre: First Course on Time Series (et ne vous inquiétez pas, vous n'avez pas besoin d'avoir SAS pour suivre. Je ne sais pas.). C'est très lisible.

Vous n'avez pas besoin de savoir comment ARIMA fonctionne pour utiliser ces outils, mais je pense que c'est toujours plus facile si vous avez du contexte, car il y a des "paramètres de modèle" à définir, etc.

Rohit Chatterjee
la source