Previsione di mercato basata su indicatori macroeconomici

 

Quindi, il compito è prevedere l'indice S&P 500 sulla base degli indicatori economici disponibili.

Passaggio 1: trova gli indicatori. Gli indicatori sono disponibili pubblicamente qui: http://research.stlouisfed.org/fred2/ Ce ne sono 240.000. Il più importante è la crescita del PIL. Questo indicatore viene calcolato ogni trimestre. Da qui il nostro passo - 3 mesi. Tutti gli indicatori per un periodo più breve vengono ricalcolati per un periodo di 3 mesi, il resto (annuale) viene scartato. Scartiamo anche gli indicatori per tutti i paesi ad eccezione degli Stati Uniti e gli indicatori che non hanno una storia profonda (almeno 15 anni). Quindi, con un lavoro scrupoloso, filtriamo una serie di indicatori e otteniamo circa 10 mila indicatori. Formuliamo un compito più specifico di prevedere l'indice S&P 500 con uno o due trimestri di anticipo, avendo a disposizione 10mila indicatori economici con un periodo trimestrale. Faccio tutto in MatLab, anche se è possibile in R.

Passaggio 2: convertire tutti i dati in forma stazionaria mediante differenziazione e normalizzazione. Ci sono molti metodi qui. La cosa principale è che i dati originali possono essere ripristinati dai dati convertiti. Senza stazionarietà, nessun modello funzionerà. La serie S&P 500 prima e dopo la conversione è mostrata di seguito.

Passaggio 3: scegli un modello. Forse una rete neurale. Si può fare una regressione lineare multivariabile. È possibile eseguire la regressione polinomiale multivariabile. Dopo aver testato modelli lineari e non lineari, giungiamo alla conclusione che i dati sono così rumorosi che non ha senso inserire un modello non lineare. Il grafico y(x), dove y = S&P 500 e x = uno dei 10mila indicatori, è una nuvola quasi circolare. Pertanto, formuliamo il compito in modo ancora più specifico: prevedere l'indice S&P 500 con uno o due trimestri di anticipo, avendo 10mila indicatori economici con un periodo trimestrale, utilizzando la regressione lineare multivariabile.

Step 4: Selezioniamo gli indicatori economici più importanti da 10 mila (riduciamo la dimensione del problema). Questo è il passo più importante e difficile. Diciamo che prendiamo la storia dell'S&P 500 fino a 30 anni (120 trimestri). Per rappresentare l'S&P 500 come una combinazione lineare di indicatori economici di vario genere, è sufficiente disporre di 120 indicatori per descrivere accuratamente l'S&P 500 in questi 30 anni. Inoltre, gli indicatori possono essere assolutamente qualsiasi per creare un modello così accurato di 120 indicatori e 120 valori S&P 500. Quindi è necessario ridurre il numero di input al di sotto del numero di valori di funzione descritti. Ad esempio, stiamo cercando i 10-20 indicatori di input più importanti. Tali compiti di descrizione dei dati con un piccolo numero di input selezionati da un numero enorme di basi candidate (dizionario) sono chiamati codifica sparsa.

Esistono molti metodi per selezionare gli input del predittore. Li ho provati tutti. Ecco i due principali:

  1. Classifichiamo tutti i 10.000 dati in base al loro potere predittivo S&P 500. Il potere predittivo può essere misurato tramite coefficiente di correlazione o informazioni reciproche.
  2. Esaminiamo tutti i 10mila indicatori lungo il fondo e scegliamo quello che ha dato il modello lineare y_mod = a + b*x1 descrivendo l'S&P 500 con l'errore più piccolo. Quindi selezioniamo nuovamente il secondo input ordinando i restanti 10mila -1 indicatori in modo che descriva il resto y - y_mod = c + d*x2 con il minor errore. Eccetera. Questo metodo è chiamato regressione graduale o ricerca di corrispondenza.

Ecco i primi 10 indicatori con il più alto coefficiente di correlazione con l'S&P 500:

ID serie Ritardo Corr Mute informazioni
'PPICRM' 2 0,315 0,102
'CWUR0000SEHE' 2 0,283 0,122
'CES1021000001' uno 0,263 0,095
'B115RC1Q027SBEA' 2 0,262 0,102
'CES1000000034' uno 0,261 0,105
'A371RD3Q086SBEA' 2 0,260 0,085
'B115RC1Q027SBEA' uno 0,256 0,102
'CUUR0000SAF111' uno 0,252 0,117
'CUUR0000SEHE' 2 0,251 0,098
'USMINARE' uno 0,250 0,102

Ecco i primi 10 indicatori con le informazioni più reciproche con l'S&P 500:

ID serie Ritardo Corr Mute informazioni
'CPILEGSL' 3 0,061 0,136
'B701RC1Q027SBEA' 3 0,038 0,136
'CUSR0000SAS' 3 0,043 0,134
'GDPPOT' 3 0,003 0,134
'NGDPPOT' 5 0,102 0,134
'OTHSEC' 4 0,168 0,133
'LNU01300060' 3 0,046 0,132
'LRAC25TTUSM156N' 3 0,046 0,132
'LRAC25TTUSQ156N' 3 0,046 0,131
'CUSR0000SAS' uno 0,130 0,131

Il ritardo è il ritardo della serie di input rispetto alla serie S&P 500 simulata. Come si può vedere da queste tabelle, diversi metodi di scelta degli input più importanti danno come risultato diversi insiemi di input. Poiché il mio obiettivo finale è ridurre al minimo l'errore del modello, ho scelto il secondo metodo di selezione dell'input, ovvero enumerazione di tutti gli input e selezione dell'input che ha dato il minor errore.

Passaggio 5: scegliere un metodo per calcolare l'errore e i coefficienti del modello. Il metodo più semplice è il metodo COEX, motivo per cui la regressione lineare che utilizza questo metodo è così popolare. Il problema con il metodo RMS è che è sensibile ai valori anomali, ad es. questi valori anomali influiscono significativamente sui coefficienti del modello. Per ridurre questa sensibilità, è possibile utilizzare la somma dei valori di errore assoluti invece della somma degli errori al quadrato, portando al metodo dei moduli minimi (LSM) o alla regressione robusta. Questo metodo non ha una soluzione analitica per i coefficienti del modello a differenza della regressione lineare. Solitamente i moduli sono sostituiti da funzioni di approssimazione lisce/differenziabili e la soluzione viene eseguita con metodi numerici e richiede molto tempo. Ho provato entrambi i metodi (regressione snella e MHM) e non ho notato molti vantaggi di MHM. Invece di MHM, ho fatto una deviazione. Nella seconda fase di ottenere dati stazionari differenziandoli, ho aggiunto un'operazione di normalizzazione non lineare. Cioè, la serie originale x[1], x[2], ... x[i-1], x[i] ... viene prima convertita in una serie di differenze x[2]-x[1] . .. x [i]-x[i-1] ... e quindi ogni differenza viene normalizzata sostituendola con sign(x[i]-x[i-1])*abs(x[i]-x[ i-1] )^u, dove 0 < u < 1. Per u=1, otteniamo il metodo COSE classico con la sua sensibilità ai valori anomali. A u=0, tutti i valori della serie di input vengono sostituiti da valori binari +/- 1 quasi senza valori anomali. Per u=0.5, otteniamo qualcosa di simile a MNM. Il valore ottimale di u è compreso tra 0,5 e 1.

Va notato che uno dei metodi popolari per convertire i dati in una forma stazionaria è sostituire i valori della serie con la differenza nei logaritmi di questi valori, ad es. log(x[i]) - log(x[i-1]) o log(x[i]/x[i-1]). La scelta di una tale trasformazione è nel mio caso pericolosa, poiché il dizionario di 10mila voci ha molte righe con valori zero e negativi. Il logaritmo ha anche il vantaggio di ridurre la sensibilità del metodo RMS agli outlier.In sostanza, la mia funzione di trasformazione sign(x)*|x|^u ha lo stesso scopo di log(x), ma senza i problemi associati a zero e valori negativi.

Passaggio 6: calcolare la previsione del modello sostituendo i nuovi dati di input e calcolando l'output del modello utilizzando gli stessi coefficienti del modello che sono stati trovati mediante regressione lineare nei segmenti della cronologia precedenti. Qui è importante tenere presente che i valori trimestrali degli indicatori economici e dell'S&P 500 arrivano quasi contemporaneamente (con una precisione di 3 mesi). Pertanto, al fine di prevedere l'S&P 500 per il prossimo trimestre, il modello deve essere costruito tra l'attuale valore trimestrale dell'S&P 500 e le entrate ritardate di almeno 1 trimestre (Lag>=1). Per prevedere l'S&P 500 con un quarto di anticipo, il modello deve essere costruito tra l'attuale valore trimestrale dell'S&P 500 e le entrate ritardate di almeno 2 trimestri (Lag>=2). Eccetera. L'accuratezza delle previsioni diminuisce significativamente all'aumentare del ritardo maggiore di 2.

Passaggio 7: verifica l'accuratezza delle previsioni sulla cronologia precedente. La tecnica originale sopra descritta (inserire ogni input nella cronologia precedente, scegliere l'input che fornisce l'MSD più piccolo e calcolare la previsione dal nuovo valore di quell'input) ha prodotto un MSD di previsione che era persino peggiore delle previsioni casuali o nulle. Mi sono posto questa domanda: perché un ingresso che si inserisce bene nel passato dovrebbe avere una buona prevedibilità per il futuro? Ha senso selezionare gli input del modello in base al loro precedente errore di previsione, piuttosto che in base al più piccolo errore di regressione sui dati noti.

Alla fine, il mio modello può essere descritto passo dopo passo in questo modo:

  1. Caricamento dati economici da stlouisfed (circa 10mila indicatori).
  2. Preobrazeum dati in una forma stazionaria e normalizzare.
  3. Scegliamo un modello lineare dell'indice S&P 500, risolto analiticamente con il metodo RMS (regressione lineare).
  4. Scegliamo la lunghezza della storia (1960 - 2° trimestre 2015) e la dividiamo in un segmento di formazione (1960 - 4° trimestre 1999) e un segmento di prova (1° trimestre 2000 - 2° trimestre 2015).
  5. Iniziamo le previsioni dal 1960 + N + 1, dove N*4 è il numero iniziale di valori S&P 500 trimestrali noti.
  6. Sui primi N dati, viene costruito un modello lineare y_mod = a + b*x per ciascun indicatore economico, dove y_mod è il modello S&P 500 e x è uno degli indicatori economici.
  7. Prevediamo N + 1 barra per ogni modello.
  8. Calcoliamo gli errori di previsione di N + 1 barre per ciascun modello. Ricordiamo questi errori.
  9. Aumentiamo di 1 il numero di valori S&P 500 noti, ad es. N + 1 e ripetere i passaggi 6-9 fino a raggiungere la fine del segmento di addestramento (Q4 1999). A questo punto, abbiamo memorizzato gli errori di previsione dal 1960 + N +1 al Q4 1999 per ciascun indicatore economico.
  10. Iniziamo a testare il modello nel secondo periodo storico (Q1 2000 - Q2 2015).
  11. Per ciascuno dei 10mila input, calcoliamo l'errore standard delle previsioni per il 1960 - Q4 1999.
  12. Tra 10mila input, selezioniamo quello che aveva la previsione RMS più bassa per il 1960 - Q4 1999.
  13. Costruiamo un modello lineare y_mod = a + b*x per ogni indicatore economico per il 1960 - Q4 1999.
  14. Prevediamo il primo trimestre del 2000 per ciascun modello.
  15. La previsione dell'input selezionato con l'RMS più basso delle previsioni per l'intervallo di tempo precedente (1960 - 4° trimestre 1999) viene scelta come previsione principale del 1° trimestre 2000.
  16. Calcoliamo gli errori di previsione di tutti gli input per il primo trimestre 2000 e li aggiungiamo al valore efficace degli stessi input per l'intervallo di tempo precedente (1960 - Q4 1999).
  17. Passa al secondo trimestre del 2000 e ripeti i passaggi 12-17 fino a raggiungere la fine dell'area di test (secondo trimestre 2015) con un valore sconosciuto per l'S&P 500, che è il nostro obiettivo principale della previsione.
  18. Accumuliamo errori di previsione per il 1° trimestre 2000 - 4° trimestre 2014 realizzati dagli input con la deviazione standard più bassa delle previsioni nei segmenti precedenti. Questo errore (err2) è il nostro modello di errore di previsione fuori campione.

In breve, la scelta di un predittore dipende dall'RMS delle precedenti previsioni dell'S&P 500. Non si può guardare al futuro. Il predittore può cambiare nel tempo, ma alla fine del segmento di test, sostanzialmente smette di cambiare. Il mio modello ha selezionato PPICRM con un ritardo di 2 quarti come primo input per prevedere il secondo trimestre 2015. Di seguito è mostrata la regressione lineare dell'S&P 500 con l'input PPICRM(2) selezionato per il 1960 - Q4 2014. Cerchi neri - regressione lineare. Cerchi multicolori - dati storici per il 1960 - Q4 2014. Il colore del cerchio indica l'ora.


Previsioni S&P 500 stazionarie (linea rossa):

Previsioni S&P 500 in forma grezza (linea rossa):

Il grafico mostra che il modello prevede la crescita dell'S&P 500 nel secondo trimestre del 2015. L'aggiunta di un secondo input aumenta l'errore di previsione:

1 err1=0,900298 err2=0,938355 PPICRM (2)

2 err1=0,881910 err2=0,978233 PERMESSO1 (4)

dove err1 è l'errore di regressione. È ovvio che decresce dall'aggiunta di un secondo input. err2 è l'errore di previsione del quadrato medio della radice diviso per l'errore di previsione casuale. Cioè, err2>=1 significa che la previsione del mio modello non è migliore delle previsioni casuali. err2<1 significa che la previsione del mio modello è migliore delle previsioni casuali.

PPICRM = Indice dei prezzi alla produzione: materie prime per ulteriori lavorazioni

PERMIT1 = Nuove Unità Abitative Private Autorizzate da Permessi di Costruzione - In Strutture con 1 Unità

Il modello sopra descritto può essere riformulato in questo modo. Raccogliamo 10mila economisti e chiediamo loro di prevedere il mercato per il prossimo trimestre. Ogni economista esce con la propria previsione. Ma invece di scegliere una previsione in base al numero di libri di testo che hanno scritto o al numero di premi Nobel che hanno vinto in passato, aspettiamo qualche anno per raccogliere le loro previsioni. Dopo un numero significativo di previsioni, vediamo quale economista è più accurato e iniziamo a credere alle sue previsioni fino a quando qualche altro economista non lo supera in precisione.

Federal Reserve Economic Data - FRED - St. Louis Fed
Federal Reserve Economic Data - FRED - St. Louis Fed
  • fred.stlouisfed.org
Download, graph, and track 240,000 economic time series from 77 sources.
 
gpwr:
Per continuare ...
Non è imbarazzante che il governo degli Stati Uniti in generale e il Comitato del Mercato Aperto in particolare siano stati ripetutamente sospettati di falsificare e manipolare le statistiche macroeconomiche statunitensi sul mercato del lavoro e il PIL degli Stati Uniti per influenzare i mercati finanziari?
 
Demi:
È confuso il fatto che il governo degli Stati Uniti in generale e il Comitato del Mercato Aperto in particolare sono stati ripetutamente sospettati di falsificare e manipolare le statistiche macroeconomiche del mercato del lavoro e del PIL degli Stati Uniti per influenzare i mercati finanziari?
Sì, è imbarazzante. È anche sconcertante che i dati pubblicati vengano aggiustati molte volte dopo la loro pubblicazione. Ma d'altra parte, i commercianti reagiscono ai dati forniti loro dal governo degli Stati Uniti, muovendo il mercato in una direzione o nell'altra, sia che quei dati siano falsificati o incompleti o prematuri. Quindi la tecnica di previsione del mercato basata su questi dati dovrebbe in linea di principio funzionare.
 
gpwr:
Sì, è confuso. Confonde anche il fatto che i dati pubblicati vengono aggiustati molte volte dopo la loro pubblicazione. Ma d'altra parte, i commercianti reagiscono ai dati forniti loro dal governo degli Stati Uniti, muovendo il mercato in una direzione o nell'altra, sia che quei dati siano falsificati o incompleti o prematuri. Quindi la tecnica di prevedere il mercato sulla base di questi dati dovrebbe in linea di principio funzionare.

Ti interessa solo l'S&P o lo prendi solo come esempio?

È solo che l'S&P ha un modello di movimento particolare, non diverso dal rapporto di cambio.

 
Urain:

Ti interessa solo l'S&P o lo prendi solo come esempio?

È solo che l'S&P ha un peculiare modello di movimento, non diverso dal rapporto tra le valute.

Viene preso come esempio a causa della facilità di trovare dati di input (pubblicamente disponibili). Qualsiasi cosa può essere modellata in questo modo: l'economia russa, i tassi di cambio, ecc. I prezzi di mercato sono i più difficili da prevedere perché c'è molto rumore in essi. Prevedere i processi fisici è molto più facile.
 
gpwr:
Sì, è confuso. Confonde anche il fatto che i dati pubblicati vengono aggiustati molte volte dopo la loro pubblicazione. Ma d'altra parte, i commercianti reagiscono ai dati che il governo americano dà loro, muovendo il mercato in una direzione o nell'altra, sia che quei dati siano falsificati o incompleti o prematuri. Quindi la tecnica di prevedere il mercato sulla base di questi dati dovrebbe in linea di principio funzionare.

Ok, diamo un'occhiata. L'ho fatto anch'io.

Un test persistente di hint-wanted-forward

 
gpwr:

Quindi, il compito di prevedere l'indice S&P 500 sulla base dei dati economici disponibili.

Un argomento piuttosto interessante. Ho provato a fare degli indicatori basati sul file di dati: occupazione, costruzione di nuove case, vendite di nuove case ecc. E sapete, potete vedere a occhio nudo che alcuni dati hanno una certa correlazione con il mercato azionario. Ma non sembra esserci alcuna correlazione con il mercato valutario. Ho usato alcune statistiche di base degli Stati Uniti.

Non pensate di aver scelto troppi tipi di dati? Secondo me, bisogna escludere dai dati utili quelli non importanti, quelli che influenzano il mercato.

Tuttavia, non ho familiarità con l'analisi neurale. Ho iniziato a leggere su di esso, ma non ho trovato nessuna spiegazione chiara del suo funzionamento.

 
L'algoritmo di regressione aiuterà a prevedere qualsiasi indicatore da qualsiasi dato, anche se non c'è una relazione ovvia tra loro
 
forexman77:

È un argomento molto interessante. Ho provato a fare degli indicatori basati sul file di dati: occupazione, costruzione di nuove case, vendite di nuove case ecc. E sapete, potete vedere a occhio nudo che alcuni dati hanno una certa correlazione con il mercato azionario. Ma non sembra esserci alcuna correlazione con il mercato valutario. Ho usato alcune statistiche di base degli Stati Uniti.

Non pensate di aver scelto troppi tipi di dati? Secondo me, bisogna escludere dai dati utili quelli non importanti, quelli che influenzano il mercato.


Una grande o piccola quantità di dati in ingresso è tutto relativo.

L'altro è più importante.

Tutti gli input rientrano in due categorie:

  • quelli che hanno un impatto sulla variabile obiettivo
  • quelli che non hanno alcuna influenza o poca influenza.

Uso deliberatamente la parola influenza piuttosto che correlazione. La correlazione è uno strumento vuoto perché la correlazione ha sempre qualche valore e nessun valore è NA, che è fondamentale per determinare l'impatto dei dati grezzi sulla variabile obiettivo.

Le variabili che non hanno (hanno un basso impatto - si noti che questa è una caratteristica qualitativa) sono rumore nel determinare l'effetto sulla variabile obiettivo. L'insidia qui è che partendo da una certa quantità non determinata algoritmicamente, questo rumore "intasa" le variabili importanti e quindi le variabili "importanti" non possono essere estratte algoritmicamente da questa quantità aggregata.

Quindi, uno deve guardare manualmente l'intera lista di variabili di input e decidere intuitivamente, o sulla base di qualche altra considerazione, che "questa variabile di input è probabile che influenzi e questa probabilmente no".

Conosco diverse dozzine di algoritmi per determinare l'importanza delle variabili, che ho provato su un set del mio giornale e del mio libro (fino a 100 variabili di input). Il risultato è esattamente come descritto. Ho selezionato manualmente qualche lista, e poi l'ho filtrata con l'algoritmo e ho ottenuto la lista. E il valore di una tale lista è fondamentale: i modelli che utilizzano un tale insieme di dati di input "influenti" (utilizzando 3 diversi tipi di modelli) NON hanno la proprietà di sovraapprendimento, che è il problema principale. L'overfitting è la principale conseguenza dell'utilizzo di dati di input "rumorosi".

PS.

La stazionarietà non gioca alcun ruolo nei miei modelli, che sono randomForest, ada, SVM.

 
gpwr:

...

.... Nessun modello funzionerà senza stazionarietà.

...

Il requisito della stazionarietà è molto rigido e completamente ingiustificato.

.

E i modelli "non stazionari" funzionano bene ;)

 
transcendreamer:
Un algoritmo di regressione può prevedere qualsiasi indicatore basato su qualsiasi dato, anche se non c'è una relazione esplicita tra di essi
Questo si può dire di qualsiasi modello, non solo di regressione ma anche di modelli neurali, ARMA e altri. Se non c'è una relazione tra input e output, qualsiasi modello genererà una previsione, solo in modo impreciso.
Motivazione: