Supporta la regressione vettoriale per la previsione di serie temporali multivariate


22

Qualcuno ha tentato la previsione delle serie temporali utilizzando la regressione del vettore di supporto?

Comprendo le macchine vettoriali di supporto e in parte capisco la regressione dei vettori di supporto, ma non capisco come possano essere utilizzate per modellare serie storiche, in particolare serie temporali multivariate.

Ho provato a leggere alcuni articoli, ma sono di livello troppo alto. Qualcuno può spiegare in termini laici come funzionerebbe, specialmente in relazione a serie temporali multivariate?

EDIT: Per elaborare un po ', lasciami provare a spiegare con un esempio di prezzo delle azioni.

Supponiamo di avere prezzi delle azioni per N giorni. Quindi, per ogni giorno potremmo costruire un vettore caratteristica, che, in un caso semplice, potrebbe essere il prezzo del giorno precedente e il prezzo del giorno corrente. La risposta per ogni vettore di funzionalità sarebbe il prezzo del giorno successivo. Pertanto, dato il prezzo di ieri e il prezzo di oggi, l'obiettivo sarebbe quello di prevedere il prezzo dei giorni successivi. Quello che non capisco è, diciamo, che abbiamo sei mesi di dati di formazione, come daresti maggiore enfasi ai vettori di funzionalità più recenti?


Puoi pubblicare i documenti a cui ti riferisci?
Ram Ahluwalia,

1
Previsione di serie temporali con una macchina di regressione vettoriale di supporto locale, Rodrigo Fernandez, svms.org/regression/Fern.pdf Regressione vettoriale di supporto per la previsione di serie temporali finanziarie, Wei Hao e Songnian Yu, springerlink.com/index/946802600u4552m8.pdf
raconteur

Risposte:


18

Nel contesto della regressione dei vettori di supporto, il fatto che i tuoi dati siano una serie temporale è principalmente rilevante dal punto di vista metodologico: ad esempio, non è possibile eseguire una convalida incrociata di k-fold e è necessario prendere precauzioni quando si eseguono backtest simulazione /.

Fondamentalmente, la regressione del vettore di supporto è una tecnica di regressione discriminativa molto simile a qualsiasi altra tecnica di regressione discriminativa. Gli dai una serie di vettori di input e risposte associate e si adatta a un modello per provare a prevedere la risposta dato un nuovo vettore di input. Kernel SVR, d'altra parte, applica una delle molte trasformazioni al tuo set di dati prima della fase di apprendimento. Ciò gli consente di rilevare tendenze non lineari nel set di dati, a differenza, ad esempio, della regressione lineare. Un buon kernel per cominciare sarebbe probabilmente l'RBF gaussiano - avrà un iperparametro che puoi sintonizzare, quindi prova un paio di valori. E poi quando senti che cosa sta succedendo puoi provare altri kernel.

Con una serie temporale, un passaggio di importazione sta determinando quale sarà il tuo "vettore caratteristica" ; ogni x i è chiamato una "caratteristica" e può essere calcolato dai dati presenti o passati e ogni y i , la risposta, sarà il cambiamento futuro in un periodo di tempo di qualunque cosa tu stia cercando di prevedere. Prendi uno stock per esempio. Hai prezzi nel tempo. Forse le tue caratteristiche sono a.) Lo spread 200MA-30MA eb) la volatilità di 20 giorni, in modo da calcolare ogni x t in ogni punto nel tempo, insieme a y tXXioyioXtyt, il (diciamo) ritorno della settimana successiva su quello stock. Pertanto, il tuo SVR impara come prevedere il ritorno della settimana successiva in base allo spread MA attuale e al volume di 20 giorni. (Questa strategia non funzionerà, quindi non eccitarti troppo;)).

Se i documenti che leggi erano troppo difficili, probabilmente non vorrai provare a implementare un SVM da solo, poiché può essere complicato. In IIRC esiste un pacchetto "kernlab" per R che ha un'implementazione SVM del kernel con un numero di kernel inclusi, in modo da fornire un modo rapido per iniziare.


@Jason, grazie per la risposta. Sono confuso su come rendere meno importanti i dati più vecchi durante l'allenamento, ovvero come dare agli ultimi 100 esempi importanti, anziché agli ultimi 10.000 esempi. Inoltre, ho una certa esperienza di lavoro con SVM in Python, quindi sto cercando di usarlo.
raconteur,

Non puoi davvero usare tutti i dati passati come vettore di funzionalità; devi trasformarlo in qualche modo in una caratteristica significativa. Ad esempio, si consideri la media degli ultimi 20 valori delle serie temporali o il valore corrente delle serie diviso per la media mobile. Queste sono caratteristiche che indicano in un numero semplice una caratteristica di importazione del set di dati. Trova (diciamo) circa 10 caratteristiche che ritieni possano essere il più predittive possibile. Pertanto, per rendere meno importanti i dati meno recenti, è necessario renderli meno importanti quando si definiscono le funzionalità (ovvero utilizzare medie mobili più brevi).
William,

@Jason, fammi provare a spiegare con un esempio di prezzo delle azioni. Supponiamo di avere prezzi delle azioni per N giorni. Quindi, per ogni giorno potremmo costruire un vettore caratteristica, che, in un caso semplice, potrebbe essere il prezzo del giorno precedente e il prezzo del giorno corrente. La risposta per ogni vettore di funzionalità sarebbe il prezzo del giorno successivo. Pertanto, dato il prezzo di ieri e il prezzo di oggi, l'obiettivo sarebbe quello di prevedere il prezzo dei giorni successivi. Quello che non capisco è, diciamo, che abbiamo sei mesi di dati di formazione, come daresti maggiore enfasi ai vettori di funzionalità più recenti?
raconteur,

2
Oh capisco cosa intendi adesso. La risposta breve è, non puoi, almeno non senza riprogettare l'SVM per capire il concetto di recency. Un SVM è definito in termini di coppie xy, non coppie xy ordinate, quindi la funzione obiettivo che minimizza è una funzione di dette coppie. OTOH, potresti eseguire diversi SVM separati, uno con il mese scorso, uno con l'anno passato e uno con gli ultimi due anni, quindi fare una media ponderata delle risposte che ricevi in ​​base alle tue preferenze personali per i recenti vs vecchi dati (ad es. 0,7 * mese scorso + 0,2 * anno scorso + 0,1 * ultimi 2 anni).
William,

@William .. hai qualche consiglio su quali algoritmi di machine learning sarebbero i migliori per la previsione di serie temporali (lo stesso problema che Raconteur ha chiesto) oltre a SVM? la risposta sarebbe diversa se applicata in domini diversi? ad es. quotazioni azionarie e previsioni della catena di approvvigionamento (previsione della domanda dei prodotti che stiamo vendendo) ..
Lam

1

La mia risposta personale alla domanda è "sì". Puoi vederlo come un professionista o un truffatore che ci sono un numero infinito di opzioni di funzionalità per descrivere il passato. Prova a scegliere caratteristiche che corrispondono a come potresti descrivere concisamente a qualcuno ciò che il mercato ha appena fatto [ad esempio "il prezzo è a 1.4 "non dice nulla se non è correlato a qualche altro numero]. Per quanto riguarda l'obiettivo dell'SVM, i più semplici sono la differenza di prezzo e il rapporto dei prezzi per due giorni consecutivi. Dato che corrispondono direttamente al destino di un ipotetico commercio, sembrano buone scelte.

Devo essere in disaccordo pedante con la prima affermazione di Jason: puoi fare k-fold cross-validation in situazioni come quella descritta da raconteur ed è utile (con una condizione che spiegherò). Il motivo per cui è statisticamente valido è che le istanze del target in questo caso non hanno relazioni intrinseche: sono differenze o rapporti disgiunti. Se si sceglie invece di utilizzare i dati a una risoluzione superiore rispetto alla scala del target, ci sarebbe motivo di preoccuparsi che istanze correlate possano apparire nel set di addestramento e nel set di convalida, il che comprometterebbe la convalida incrociata (al contrario, quando si applica il SVM non avrai istanze disponibili i cui target si sovrappongono a quello a cui sei interessato).

La cosa che riduce l'efficacia della convalida incrociata è se il comportamento del mercato sta cambiando nel tempo. Esistono due modi possibili per gestirlo. Il primo è incorporare il tempo come funzionalità (non l'ho trovato molto utile, forse perché i valori di questa funzionalità in futuro sono tutti nuovi). Un'alternativa ben motivata è quella di utilizzare la validazione walk-forward (che significa testare la metodologia su una finestra scorrevole del tempo e testarla sul periodo immediatamente successivo a questa finestra. Se il comportamento cambia nel tempo, il detto attribuito a Niels Bohr " La previsione è molto difficile, soprattutto per il futuro "è particolarmente appropriato. Esistono alcune prove in letteratura che il comportamento dei mercati finanziari cambia nel tempo, diventando generalmente più efficiente,

In bocca al lupo!


Benvenuto sul nostro sito!
kjetil b halvorsen,

0

C'è un esempio su Quantum Financier per l'utilizzo di un SVM per la previsione di serie finanziarie. Potrebbe essere facilmente convertito da un sistema di classificazione (Long / Short) a un sistema di regressione.


1
CARO DIO PER FAVORE nessuno usa quella strategia! Ecco come i principianti vengono affumicati da Wall St :( Il trucco più antico del libro è il retrofit di un modello statistico usando alcuni analitici tecnici di base come RSI, quindi i neofiti pensano di aver colpito l'oro.
William

1
@Jason dal post originale "Voglio anche chiarire che non penso che questo sia un buon sistema." Tuttavia, è un buon esempio di come adattare una macchina vettoriale di supporto a una serie temporale.
Zach,
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.