Come prevedere una serie storica da un'altra serie temporale, se correlate


14

Ho cercato di risolvere questo problema per oltre un anno senza molti progressi. Fa parte di un progetto di ricerca che sto realizzando, ma lo illustrerò con un esempio di storia che ho inventato, perché l'attuale dominio del problema è un po 'confuso (eye-tracking).

Sei un aereo che segue una nave nemica che viaggia attraverso l'oceano, quindi hai raccolto una serie di coordinate (x, y, tempo) della nave. Sai che un sottomarino nascosto viaggia con la nave per proteggerlo, ma mentre esiste una correlazione tra le loro posizioni, il sottomarino si allontana spesso dalla nave, quindi mentre è spesso vicino ad essa, può anche essere dall'altra parte della mondo di tanto in tanto. Vuoi prevedere il percorso del sottomarino, ma sfortunatamente ti è nascosto.

Ma un mese di aprile noti che il sottomarino si dimentica di nascondersi, quindi hai una serie di coordinate sia per il sottomarino che per la nave durante 1.000 viaggi. Utilizzando questi dati, ti piacerebbe costruire un modello per prevedere il percorso del sottomarino nascosto dato solo i movimenti della nave. La linea di base ingenua sarebbe quella di dire "posizione sottomarina indovinare =" posizione attuale della nave "ma dai dati di aprile in cui il sottomarino era visibile, si nota che c'è una tendenza per il sottomarino a stare un po 'avanti rispetto alla nave, quindi" posizione sottomarina indovinare = la posizione della nave in 1 minuto "è una stima ancora migliore. Inoltre, i dati di aprile mostrano che quando la nave si ferma in acqua per un lungo periodo, è probabile che il sottomarino sia lontano a pattugliare le acque costiere. Esistono altri schemi ovviamente.

Come costruiresti questo modello, dati i dati di aprile come dati di addestramento, per prevedere il percorso del sottomarino? La mia attuale soluzione è una regressione lineare ad-hoc in cui i fattori sono "tempo di viaggio", "coordinata x della nave", "era nave inattiva per 1 giorno", ecc. E quindi con R capire i pesi e fare una validazione incrociata . Ma mi piacerebbe davvero un modo per generare automaticamente questi fattori dai dati di aprile. Inoltre, un modello che utilizza la sequenza o il tempo sarebbe bello, dal momento che la regressione lineare non lo fa e penso che sia rilevante.

Grazie per aver letto tutto questo e sarei felice di chiarire qualsiasi cosa.


5
Un modo che può rendere più semplice la costruzione del modello è l'uso delle coordinate polari anziché di quelle cartesiane. Se imposti l'origine uguale alla nave nemica e la nave è sempre rivolta a nord, allora potresti dire qualcosa come la posizione del sottomarino al momento è ( r ( t j ) , θ ( t j ) ) con r essere distanza e θ essendo angolo. Ora ci aspettiamo | θ | essere piccolo perché il sottomarino è di solito di fronte alla nave, e r dovrebbe essere piccolo ma non vicino allo zero (altrimenti il ​​sottomarino si schianta contro la nave). Anche tutj(r(tj),θ(tj))rθ|θ|r diventando grande per le navi in ​​pausa. r
probabilityislogic

2
Stavo per suggerire qualcosa di simile a probabilitlogico: hai bisogno di una variabile che è la distanza tra la nave e il sottomarino. La cosa bella delle coordinate polari è che sono incluse anche queste informazioni, oltre alla direzionalità. È quindi possibile provare una regressione lineare su questa nuova variabile.
studente

Grazie per i suggerimenti Una cosa per cui sto lottando con le coordinate polari è che se provo a prevedere la variabile angolare, "gira intorno" quindi 0 == 360, il che non ha senso dal punto di vista della previsione. Qualche suggerimento su come gestirlo?
Cargoship And Submarine,

@probabilityislogic Dopo averci pensato un po 'di più, avrebbe senso usare le coordinate polari ma usare il sin (theta) invece del theta come variabile da prevedere? Anche se allora si comporterebbe più come un delta_y.
Cargoship And Submarine,

Per quanto riguarda l'uso delle coordinate polari, potresti voler leggere le Statistiche direzionali .
steadyfish,

Risposte:


3

Ecco un approccio che non utilizza alcuna informazione "contestuale", ovvero non tiene conto del fatto che "un sottomarino segue una nave". D'altra parte è facile iniziare con:

Indicato da

XSuB(t),ySuB(t)

XShiop(t),yShiop(t)

t

XdioSt(t)=XShiop(t)-XSuB(t)

ydioSt(t)=yShiop(t)-ySuB(t)

Il mio suggerimento è di prevedere ciascuno di questi separatamente (è possibile collegarli insieme in seguito).

X

Poi

XdioSt(t)=100±10wioggle(t)

wioggle

XywioggleμσXdioSt

XdioSt(t)=μ+σWX(t)

Dato che si dispone di dati effettivi, è possibile calcolare le serie temporali WX(t)e vedere se segue una distribuzione gaussiana (cioè normale). In tal caso, o anche se si tratta di una distribuzione riconosciuta, è possibile generare valori e fare previsioni perXdioSt.

Un'altra strategia adottata dalle persone (che penso funzionerà per te) è quella di spezzare le loro serie

Polynomial base + Cyclic pattern + Bounded randomness

Nel caso di un sottomarino e di una nave, la parte polinomiale sarebbe probabilmente costante e la parte ciclica una somma di seni e coseni (dalle onde dell'oceano ...). Questo potrebbe non essere il caso del eye-tracking.

Ci sono strumenti che possono capirlo. Eccone due che conosco:

  1. DTREG (licenza di valutazione di 30 giorni)
  2. Algoritmo Microsoft Time Series che fa parte del loro prodotto SQL Server. Attualmente sto usando la loro edizione di valutazione di 180 giorni, è facile da usare.

Ecco uno screenshot dallo strumento SQL Server (la parte punteggiata è la previsione):

inserisci qui la descrizione dell'immagine

Un algoritmo che usano è chiamato ARIMA. Volendo imparare come funziona, ho fatto un po 'di ricerche su Google e ho trovato questo libro: First Course on Time Series (e non preoccuparti, non devi avere SAS per seguirlo. Non lo so.). È molto leggibile

Non devi sapere come funziona ARIMA per utilizzare questi strumenti, ma penso che sia sempre più facile se hai un contesto, poiché ci sono "parametri del modello" da impostare ecc.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.