L'apprendimento automatico nel trading: teoria, modelli, pratica e algo-trading - pagina 137

 
mytarmailS:


Qual è il problema, per favore aiutatemi.


Funziona così:

test_vec <- numeric() # тут будем хранить показатели теста 


for(i in 151:ln){

print(i)

idx <- (i-150):i

#проводим линейную регрессию для определения правильного соотношения

x <- data[idx, ]

model <- lm(ri ~ si + 0, x)

#вычисляем разницу цен (спред)

spread <- x$ri - coef(model)[[1]] * x$si

#проводим тест Дики-Фуллера на стационарность

test <- adf.test(as.vector(spread), k = 0)

test_vec[i-150] <- test$p.value

}


plot(test_vec, type = 's')

 
Alexey Burnakov:

In primo luogo, R^2 0,55 può essere realisticamente ottenuto applicando qualche piccola trasformazione funzionale alla "metafunzione". Un'altra cosa è che la funzione risulta essere un po' complicata nella sua forma.

E un'altra cosa: cercate di prendere:

rowMeans(df[,1:10])

...

Ho aggiunto 10 nuove colonne, non è cambiato nulla per nnet, i risultati e le curve di apprendimento sono rimasti circa gli stessi, il modello seleziona gli stessi predittori.

Ma l'albero ha improvvisamente dato risultati molto migliori. Anche la foresta è migliorata, ma un albero conduce da solo (pseudo r^2=0,39), ecco i grafici con il sonaglio sui nuovi dati.

L'albero ha scelto solo rowMeans[,1:50], ricordando i suoi valori dai dati di allenamento. Quindi c'è una relazione molto stretta ma non lineare tra rowMeans[,1:50], e l'obiettivo.

Anche se, se lasciamo solo questi 10 nuovi predittori, allora nnet si allena a r^2=0,22, anche meglio.

 
Dr.Trader:

Ho aggiunto 10 nuove colonne, non è cambiato nulla per nnet, i risultati e le curve di apprendimento sono circa gli stessi, il modello seleziona gli stessi predittori.

Ma l'albero ha improvvisamente dato risultati molto migliori. Anche la foresta è migliorata, ma un albero conduce da solo (pseudo r^2=0,39), ecco i grafici con il sonaglio sui nuovi dati.

L'albero ha scelto solo rowMeans[,1:50], ricordando i suoi valori dai dati di allenamento. Quindi c'è una relazione molto stretta ma non lineare tra rowMeans[,1:50], e l'obiettivo.

Anche se, se lasciamo solo questi 10 nuovi predittori, allora nnet si allena a r^2=0,22, anche meglio.



Esattamente giusto. media(1:50). Buoni risultati. Ora cercherò di migliorare un po' l'approssimazione della funzione. Se non ti dispiace, pubblica il diagramma di dispersione della correzione trovata rispetto all'output simulato. Per NS o per la foresta casuale. Posterò il mio dopo. Ci dovrebbe essere una non linearità.

 

Alexey Burnakov:

Ci dovrebbe essere una non linearità.

A giudicare dal grafico c'è una piccola connessione. Ma sia la neuronica che l'albero rilevano solo una tendenza generale. E questo predittore da solo ovviamente non può essere usato per addestrare il modello, non si può ottenere di più da un albero.

 
Dr.Trader:

A giudicare dal grafico, c'è un po' di connessione. Ma sia la neuronica che l'albero mostrano solo una tendenza generale. E questo predittore da solo ovviamente non aiuta ad addestrare il modello, è impossibile ottenere di più dall'albero.

Grazie, grazie.

Sì, sono d'accordo.

I miei grafici:

minimizzare il rmse

dipendenza reale:

modello:

reale e modello:

La concezione originale è pura:

Come è venuto fuori quello vero considerando il rumore che avete già visto.


La migliore qualità di modellazione possibile:

 
Alexey Burnakov:

Funziona:

Grazie, non l'avrei capito...
 
Dr.Trader:

A giudicare dal grafico, c'è un po' di connessione. Ma sia la neuronica che l'albero mostrano solo una tendenza generale. E questo predittore da solo non è ovviamente sufficiente per addestrare il modello, è impossibile ottenere di più dall'albero.

Dobbiamo riassumere il compito e scrivere ciò che abbiamo capito.

Il tutto partendo dal presupposto che nella vita reale non sappiamo nulla del tipo di dipendenza.

La mia comprensione è che:

1) tirare fuori una dipendenza da un numero di fiche semplici come i rendimenti dei prezzi è difficile e molti metodi non funzionano bene. Ma per i principi generali si può ottenere una soluzione approssimativa attraverso la convoluzione.

2) se si generano molte caratteristiche in anticipo, c'è una buona probabilità che i metodi convenzionali funzionino bene.

3) la migliore metrica di qualità sui chip grezzi, dopo il NS convoluzionale, è il NS convenzionale, seguito da altri metodi con circa lo stesso risultato.

4) su un sacco di potenziali schede generate, foresta, NS funziona bene.

5) Se sia preferibile lasciare che sia la NS convoluzionale a raccogliere i chip, invece di un umano, è ancora una questione aperta. Trovare la giusta architettura di convoluzione è probabilmente tanto lavoro quanto generare un mucchio di caratteristiche in anticipo.

Cosa può aggiungere, dottore?

 

Ho provato a generare dei fic quando hai postato il problema per la prima volta, l'algoritmo è passato attraverso diverse combinazioni matematiche per tutta la notte, selezionando i migliori nuovi predittori attraverso la stima del vtreat. Non c'è stato alcun risultato positivo, il modello non poteva nemmeno imparare correttamente dai nuovi predittori. Quindi o è casuale e indovina i predittori giusti e le operazioni matematiche su di essi, oppure no. Si possono passare giorni a generare e provare varianti e comunque sarà inutile. Poiché la rete convoluzionale su predittori originali ha ottenuto risultati migliori della solita rete con rowmeans, è probabilmente meglio attenersi alla rete convoluzionale.

 
Dr.Trader:

Ho provato a generare dei fic quando hai postato il problema per la prima volta, l'algoritmo è passato attraverso diverse combinazioni matematiche per tutta la notte, selezionando i migliori nuovi predittori attraverso la stima del vtreat. Non c'è stato alcun risultato positivo, il modello non poteva nemmeno imparare correttamente dai nuovi predittori. Quindi o è casuale e indovina i predittori giusti e le operazioni matematiche su di essi, oppure no. Si possono passare giorni a generare e provare varianti e comunque sarà inutile. Poiché la rete convoluzionale sui predittori originali ha ottenuto risultati migliori della solita rete con rowmeans, penso che sia meglio usare la rete convoluzionale.

Grazie, Dr!

Sì, anche questo è un buon punto. È solo che ho l'abitudine di dedurre le somme con una finestra di aumento scorrevole, così come le differenze con un ritardo scorrevole e tutte le altre cose scorrevoli del passato.

Vedo che ho questa nozione che per modellare quasi tutto (quasi!) è sufficiente prendere predittori della forma:

prezzo_corrente - prezzo(lag1)

prezzo_corrente - prezzo(lag2)

...

prezzo_corrente - prezzo(lag_n)

Questo può essere trattato come somme mobili (che sono facilmente convertibili in medie), e qualsiasi configurazione della tendenza può essere riprodotta: inflessioni in luoghi diversi, velocità, accelerazione.

Parlando della rete convoluzionale, suggerisco di provare a fare qualcosa di pratico sul codice che ho citato. E concentrarsi sull'analisi dei pesi e dei kernel della rete. Il kernel mostrerà il tipo di convoluzione. I pesi possono mostrare l'importanza e la non linearità.

Personalmente, mi sto prendendo una pausa dal mio esperimento principale per ora, anche se ci sono già alcuni risultati tollerabili. Mi sto annoiando... Ho deciso di provare a prevedere uno strumento azionario con una rete di convoluzione. C'è un costo abbastanza basso (un ordine di grandezza inferiore allo spread del forex) e c'è la fantasia che funzioni. Ve ne parlerò più tardi.

Corso rapido sulla CNN: http://cs231n.github.io/convolutional-networks/

 

Queste lezioni video erano anche su YouTube, poi sono state rimosse, ma rimangono in archive.org - https://archive.org/details/cs231n-CNNs

In inglese, ma molto informativo e utile. Principalmente sul riconoscimento delle immagini tramite reti convoluzionali, ma ci sono molte informazioni utili sui neuroni in generale.