Primi passi per imparare a prevedere i periodi di crisi finanziaria utilizzando l'apprendimento automatico


12

Sto cercando di capire come utilizzare l'apprendimento automatico per prevedere la serie finanziaria 1 o più passi nel futuro.

Ho una serie di attività finanziarie con alcuni dati descrittivi e vorrei formare un modello e quindi utilizzare il modello per prevedere n-passi avanti.

Quello che ho fatto finora è:

getSymbols("GOOG")

GOOG$sma <- SMA(Cl(GOOG))
GOOG$range <- GOOG$GOOG.High-GOOG$GOOG.Low

tail(GOOG)

           GOOG.Open GOOG.High GOOG.Low GOOG.Close GOOG.Volume GOOG.Adjusted     sma range
2013-05-07    863.01    863.87   850.67     857.23     1959000        857.23 828.214 13.20
2013-05-08    857.00    873.88   852.91     873.63     2468300        873.63 834.232 20.97
2013-05-09    870.84    879.66   868.23     871.48     2200600        871.48 840.470 11.43
2013-05-10    875.31    880.54   872.16     880.23     1897700        880.23 848.351  8.38
2013-05-13    878.89    882.47   873.38     877.53     1448500        877.53 854.198  9.09
2013-05-14    877.50    888.69   877.14     887.10     1579300        887.10 860.451 11.55

Quindi ho adattato un modello randomForest a questi dati.

fit <- randomForest(GOOG$GOOG.Close ~ GOOG$sma + GOOG$range, GOOG)

Che sembra adattarsi sorprendentemente bene:

> fit

Call:
 randomForest(formula = GOOG$GOOG.Close ~ GOOG$sma + GOOG$range,      data = GOOG) 
               Type of random forest: regression
                     Number of trees: 500
No. of variables tried at each split: 1

          Mean of squared residuals: 353.9844
                    % Var explained: 97.28

E ho provato a usarlo per prevedere:

predict(fit, GOOG, n.ahead=2)

Ma questa previsione spesso non ha funzionato.

Provo a prevedere la chiusura, devo ritardare le altre variabili di tutti i passaggi desiderati per la previsione, prima di adattare il modello?

Probabilmente dovrei prendere in considerazione anche molte altre cose, ma questi sono davvero i miei primi passi nel provare l'apprendimento automatico.

Risposte:


16

La mia prima osservazione è che non hai ritardato gli input relativi al prezzo di chiusura ed è per questo che hai osservato una tale corrispondenza. La SMA (media mobile semplice) utilizza il prezzo di chiusura nel suo calcolo e la gamma high low comprende il prezzo di chiusura, quindi utilizzarli per prevedere il prezzo di chiusura fornisce uno sguardo avanti. La mia opinione è che se stai cercando di prevedere il prezzo di chiusura due giorni prima, dovresti costruire il tuo modello con input che sono in ritardo rispetto al prezzo di chiusura di almeno due giorni. Alcuni input potrebbero essere ritardati di più di due giorni, ma vorrei iniziare in modo semplice e provare a utilizzare solo una manciata di input.

Per quanto riguarda il tuo obiettivo di prevedere il prezzo di chiusura, penso che i prezzi di chiusura siano troppo rumorosi per essere utilizzati come variabili target e il loro utilizzo porterà a un eccesso di adattamento o all'ottimizzazione dell'obiettivo sbagliato. Invece, inizierei livellando il prezzo di chiusura con una media mobile e quindi predicendo la direzione della variazione di prezzo nei prossimi due giorni. Ad esempio, potrei sostituire la chiusura con una SMA a 5 giorni della chiusura e quindi codificare la variazione di prezzo della SMA come 1 se fosse positiva nei due giorni successivi e 0 altrimenti. Poiché la variabile di output è ora codificata come 1 o 0, questo è un buon problema da provare con la funzione di foresta casuale che si stava utilizzando. Potresti anche provare altri algoritmi di classificazione come regressione logistica, reti neurali e SVM e magari combinarne alcuni in un insieme per migliorare le tue prestazioni. Questo è ancora un problema difficile da risolvere senza un eccessivo adattamento, ma è un passo nella giusta direzione. Un'altra parola di cautela è che il tuo modello finale potrebbe avere una straordinaria precisione nel classificare i prossimi due giorni come positivo o negativo, ma perdere comunque denaro perché ha classificato erroneamente alcune grandi mosse.

Vorrei anche raccomandare di costruire il tuo modello su più di una sicurezza in modo che l'algoritmo di apprendimento automatico non si affini alle idiosincrasie di uno stock. Vorrei iniziare con almeno 5 titoli non strettamente correlati tra loro.

Trading on the Edge di Guido Deboeck è un buon punto di partenza per esplorare le applicazioni dell'apprendimento automatico alla previsione di serie temporali finanziarie. È un libro più vecchio, quindi è molto indietro rispetto alla tecnologia che abbiamo disponibile oggi, ma è un buon inizio. Consiglierei anche i nuovi sistemi e metodi di negoziazione di Kaufman e gli esperti sistemi di negoziazione di John Wolberg.


ok, grazie per questa buona risposta. L'esempio è stato più per me capire come impostare i dati in modo che randomForest possa usarli. Ma ora so che devo ritardare gli input per farlo funzionare. Avrebbe senso avere il prezzo di SMA nel tuo esempio come variabile di output, o dovrebbe essere come 0 o 1? \ n Grazie anche per i consigli sui libri mi familiarizzerò con loro.
nikke,

Potresti sicuramente utilizzare il prezzo di SMA come variabile di output; il problema diventa solo più complesso. Invece di prevedere una direzione, ora stai cercando di prevedere un valore di prezzo esatto. Nella mia esperienza, questa è una cosa molto difficile per un algoritmo di macchina ben fatto fuori campione. Ma se ti stai semplicemente familiarizzando con il processo di impostazione dei dati delle serie temporali per la previsione, questo potrebbe essere un buon punto di partenza, soprattutto se per te è più intuitivo della previsione direzionale. Puoi anche provare a prevedere il prezzo al quale attraverseranno due medie mobili.
CrossValidatedTrading,

Ciao, ho creato alcune funzionalità e creato un modello: pastie.org/7958695 Penso di aver capito i meccanici. Questo modello è comunque troppo curvo. Hai fatto qualcosa di simile e ne hai fatto un uso reale? Sarebbe bello parlare di più.
nikke,

Sono sempre aperto a conversazioni più dettagliate. Le mie informazioni di contatto sono sul mio profilo. Mandami una e-mail se vuoi.
CrossValidatedTrading,

Ha fatto alcune semplici regressioni per prevedere i rendimenti che dovrebbero funzionare bene, rispetto alla previsione di un valore-prezzo. Oltre a prevedere il ritorno, è necessario prevedere un ritorno abbastanza ampio da battere spread & commish ecc. Sarebbe bello parlare di più, non è stato possibile trovare la posta nel profilo. Il mio è nel pastoe che ho pubblicato nel commento precedente.
nikke,
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.