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

 

La dimensionalità della matrice X

> dim(X1)
[1] 7000    8
X <- array( c(X1,X2), dim=c(7000, 8, 2) )

Nel tuo caso sarebbe

X <- array( c(X1,...X100), dim=c(7000, 8, 100) )
#или, что равнозначно
X <- array( c(X1,...X100), dim=c(dim(X1), 100) )

Naturalmente, se il numero di esempi è 7000 e la lunghezza di conversione = 8.

 

Questo pacchetto "rnn" è più un esercizio di programmazione che un prodotto da usare. Vedere invece il pacchetto "RSNNS".

Ci sono alcune reti ricorrenti là fuori. Bene, più in profondità, PyBrain, keras in Ruthon

Buona fortuna

 
Grazie, ci darò un'occhiata
 

Sto avendo degli strani problemi con la validazione incrociata del modello addestrato. O meglio, si scopre che i problemi ci sono sempre stati, solo che non me ne sono accorto.

Le mie azioni sono più o meno le seguenti: Ci sono diversi indicatori per l'eurusd per l'anno. Divido i dati in modo casuale per righe nel rapporto 70%/15%/15% per la formazione/validazione/convalida.

Inoltre, questi dati contengono 9000 predittori. Cerco geneticamente tra le loro varianti, alleno un modello PCA basato su ogni sottoinsieme di predittori. Alleno il modello su un campione di allenamento, determino l'errore. Testare lo stesso modello su entrambi i campioni di convalida, determinare l'errore su di essi.

Calcolo il risultato finale di una funzione di fitness nel modo seguente:
max(error_train,error_validate1,error_validate2) - min(error_train,error_validate1,error_validate2)
Il punto è che la differenza tra gli errori minimi e massimi dovrebbe essere la più piccola possibile (il cosiddetto "criterio di Fomenko" :) ).

Tutto sembra bene, il modello raggiunge un errore di circa il 25% su tutti e tre i campioni. Ma, sul fronttest, l'errore sale improvvisamente al 40%. Ho pensato un po', ho cambiato random.seed per generare campioni di stringhe (non predittori, solo stringhe), e per un set di predittori precedentemente definito (il migliore) ho ottenuto un errore di formazione/validazione/validazione 25%/35%/35% invece di 25%/25%/25%, e ancora lo stesso 40% per il fronttest. L'errore sui campioni di convalida è aumentato del +10%, molto male.

Così si scopre che la genetica trova la migliore versione di predittori per un particolare allenamento e specifici campioni di validazione. Se sparpagliamo le righe sui campioni in un ordine diverso, il modello predittivo addestrato non funziona più adeguatamente con gli stessi predittori.

Ci sono modi standard per affrontare questo in modo che il modello addestrato dia approssimativamente gli stessi errori per qualsiasi distribuzione di righe sui campioni? Questo è un problema serio. Posso, per esempio, generare di nuovo campioni di formazione e di convalida ad ogni generazione di genetica. Oppure fare due diversi set di campioni di fila, addestrare due modelli PCA su di essi, e prendere il risultato peggiore per la funzione di fitness. Questo ha senso?

 
Dr.Trader:

Sto avendo degli strani problemi con la validazione incrociata del modello addestrato. Più precisamente, si scopre che ci sono sempre stati problemi, solo che non l'ho notato.

(il cosiddetto "criterio Fomenko" :) ).

Il criterio mi è piaciuto molto. Grazie.

Ma non è completamente dichiarato da voi.

Il mio criterio DEVE includere il fronttest. Se guardate tutti i miei post, ho sempre scritto esattamente del fronttest, in base al quale, secondo la mia comprensione, dovrebbe essere condotto su un pezzo di osservazioni, che sono separate nel tempo (per indice) dai primi tre set.

L'ho incontrato di nuovo in rattle, che divide il set fornito come voi. Si ottengono buoni dati, ho ottenuto meno del 10% su tutti e tre i campioni, e poi si prende un nuovo file e l'errore del 40% è ancora un buon risultato! Ho avuto di peggio.

Quindi il mio criterio per il sovrallenamento è:

1. dividiamo l'insieme originale in due parti, SENZA trucchi casuali, in modo puramente meccanico, in ordine crescente di indice

2. Dividiamo la prima parte con uno qualsiasi dei metodi casuali in tre parti: test di apprendimento e convalida.

3. se su queste tre parti l'errore è approssimativamente uguale, allora vai al punto 4

4. Esegui il modello addestrato sulla seconda parte. Anche in questo caso l'errore dovrebbe essere approssimativamente uguale. Questo è fondamentale, perché quando facciamo trading facciamo sempre trading al di fuori del campione di allenamento e otteniamo costantemente (non a caso) barra dopo barra.

Se otteniamo approssimativamente lo stesso errore su tutti e 4 i punti, il modello non viene riqualificato.

Se ci sono discrepanze significative, il modello viene riqualificato. Non ho trovato nessuno strumento in R per eliminare il rumore. Ho il mio homebrew uno, qui è un altro articolo su PCA.

 
mytarmailS:

Anton Zverev

Non facciamo questo tipo di conversazione, le persone che imparano e condividono le loro esperienze qui sono disposte ad aiutarsi a vicenda, mentre tu prendi la posizione che tu sei stupido e io so tutto) È meglio che mi aiuti a capire cosa pensi e cosa sai che è giusto.

Sono d'accordo con te che dare solo BP non è sufficiente, è necessario comprimere le informazioni e scartare le cose inutili che impediscono una buona decisione, idealmente a 0 o 1 quelle comprare/vendere, cioèSe abbiamo 10 indicatori (in cui non credo) e ne abbiamo filtrati 9, lasciando solo l'RSI, non sarà sufficiente perché l'indicatore ha un range e si scopre che non funziona con valori da -70 a 70, quindi dobbiamo comprimerli e così via.. la domanda è come farlo?

Ho dei pensieri su questo, ma non ho abbastanza conoscenze per implementare un tale selettore, ancora...

Il mio primo tentativo è stato molto tempo fa, sono andato in loop indietro dal prezzo corrente e ho cercato una situazione quasi identica nel passato, poi queste situazioni sono state ordinate in base al risultato, come sono finite, per esempio, ho una situazione attuale, per essa è stato trovato 10 analoghi nel passato 8 analoghi finiti in crescita del prezzo, 2 finiti in una caduta, quindi crescerà ... Ma l'orrore )) è che si è rivelato il contrario, il prezzo è sceso molto spesso e fortemente in queste situazioni con una forte inclinazione verso l'acquisto, e poi ha spesso ritestato tick per tick...

Poi ho fatto una specie di indicatore, ho preso la somma cumulativa di tutti i prezzi di acquisto e anche la somma per il profitto, ho costruito la loro differenza e ho ottenuto un certo indice, quando l'ho confrontato con il prezzo è risultato essere opposto al prezzo, la correlazione era -0,7 a -0,9, quindi, semplicemente parlando, il mercato va contro le sue stesse statistiche, questo è qualcosa su cui riflettere e riconsiderare

alDr.Trader

Forse questo vi aiuterà a capire un po' .....

Ho trovato un modo più veloce e più facile per vedere questo effetto, se interessante posso scrivere di più su di esso

 
SanSanych Fomenko:

4. Esegui il modello addestrato sulla seconda parte. L'errore dovrebbe essere di nuovo approssimativamente uguale. Questo è fondamentale perché quando facciamo trading facciamo sempre trading al di fuori del campione di allenamento e otteniamo costantemente (non a caso) barra dopo barra.

Capito, grazie. Si scopre che non ci sono 2 ma 3 campioni di convalida - uno di loro è preso rigorosamente dalle ultime voci del file di origine senza casualità. Gli altri campioni sono casuali. Farò un tentativo.

Una volta ho provato a prendere la prima parte del file di allenamento per la convalida, anche rigorosamente per indici, anche senza casualità. L'idea era che se il modello addestrato mostra un piccolo errore sui dati del periodo di pre-addestramento, allora mostrerà lo stesso errore sui dati del periodo post-addestramento. Si è rivelato sbagliato, gli errori prima del periodo di formazione e dopo il periodo di formazione non erano affatto correlati.

mytarmailS:

Poi ho implementato un tale indicatore, ho preso la somma cumulativa di tutte le previsioni di acquisto e vendita, ho calcolato la loro differenza e ho ottenuto un indice, e quando l'ho confrontato con il prezzo ha dichiarato quasi l'opposto del prezzo, la correlazione era -0,7 a -0,9, semplicemente parlando il mercato si muove contro le sue stesse statistiche,questo è qualcosa su cui riflettere e riconsiderare

Questo metodo funziona sempre per voi, in qualsiasi intervallo di tempo? Certo, sembra strano, ma la cosa principale è che funziona. Ho avuto osservazioni simili con il mio modello non addestrato. A volte dava risultati previsti che erano strettamente opposti a quelli reali. Ma a volte funzionava ancora correttamente. Durante un test molto lungo, mentre addestravo il modello e lo controllavo su diversi intervalli di tempo ho capito che in media era corretto circa il 50% delle volte, quindi era inutile, si poteva lanciare una moneta per prevedere e ottenere lo stesso risultato. Dopo di che ho controllato e capito bene, che il modello dovrebbe dare il risultato giusto senza alcuna inversione, filtraggio, soluzioni collettive di molti altri modelli. Altrimenti potrei rimanere intrappolato nel caos e nella casualità.

 
Dr.Trader:

Questo metodo funziona sempre per voi, in qualsiasi lasso di tempo? È strano, certo, ma la cosa principale è che funziona. Ho avuto osservazioni simili con il mio modello non addestrato. A volte dava risultati previsti che erano strettamente opposti a quelli reali. Ma a volte funzionava ancora correttamente. Durante un test molto lungo, mentre addestravo il modello e lo controllavo su diversi intervalli di tempo ho capito che in media era corretto circa il 50% delle volte, quindi era inutile, si poteva lanciare una moneta per fare una previsione e ottenere lo stesso risultato. Dopo di che ho controllato e capito bene, che il modello dovrebbe dare il risultato giusto senza alcuna inversione, filtraggio, soluzioni collettive di molti altri modelli. Altrimenti si può cadere in una trappola dove regnano il caos e la casualità.

Sì, sempre e in qualsiasi tratto di tempo (ma ci sono sfumature con il campionamento), l'uscita è quasi una copia esatta del prezzo, ma inversamente correlata. Con questo metodo si può vedere come viene addestrato un neuronet e cosa ci si può aspettare da esso, si possono fare diverse conclusioni

1) questa è la situazione più tipica - se una rete è inversamente correlata, significa che è addestrata, altrimenti non ci sarebbe correlazione inversa, giusto?

2) è solo casuale - significa che la rete non ha imparato nulla

3) Una rete funziona insieme al mercato (sono riuscito ad ottenere questo effetto solo su un obiettivo abbastanza non standard) - significa che tutto è OK

4) E la conclusione più importante (questo è importante per te, D. Trader) se costruisci le tue previsioni di rete e questa andrà nella direzione opposta a quella della conclusione 1, nessuna ottimizzazione, genetica, crossvalidazione e altri incantesimi non ti aiuterà assolutamente nulla - pensaci, è logico e ovvio

 
mytarmailS:

1) Questa è la situazione più tipica - se la rete è inversamente correlata, significa che è addestrata altrimenti non ci sarebbe correlazione inversa, giusto?

4) E la conclusione più importante (questo è importante per te D. Trader) se fai le tue previsioni della rete neurale e questa andrà nella direzione opposta come nella conclusione 1, nessuna ottimizzazione, genetica, crossvalidazione e altri incantesimi ti aiuteranno in assolutamente NULLA, pensaci, è logico e ovvio

1) La correlazione inversa stabile a diversi intervalli di allenamento è un po' strana, ma la rete ha imparato qualcosa, sono d'accordo che il risultato è buono.

4) Non sono d'accordo con questo. Se si usa la classificazione binaria (variabile obiettivo "0" o "1"), allora la funzione di fitness del genetista o dell'ottimizzatore cambia facilmente per ottenere un risultato "inverso", basta sottrarre il risultato attuale da 1.
Per esempio, la genetica raccoglie un certo insieme di predittori. Alleno un neurone su di essi, eseguo una validazione incrociata e trovo l'errore medio. Ottengo un errore, diciamo, di 0,4. Il risultato "inverso" della funzione di fitness può essere definito come 1-0,4 = 0,6. La genetica cercherà di diminuire l'errore da 0,6 a zero. Il risultato sarà un insieme di predittori con il valore 0 della funzione di fitness. Ma significa che l'errore reale della rete neurale era 0+1 = 1. Cioè, il neuronka ottenuto è sbagliato nel 100% dei casi, e questa è la correlazione inversa.
In generale, è possibile utilizzare lo stesso algoritmo genetico e la crossvalidazione per addestrare un neurone che darà un risultato opposto a quello desiderato, si otterrà lo stesso risultato, ma di proposito. Ma non è chiaro per cosa. :)

Vorrei anche aggiungere che nella classificazione binaria con variabili target "0" e "1" l'errore peggiore è 0,5.
Errore == 0 è buono.
Error == 1 è il vostro neurone di correlazione inversa, potete semplicemente capovolgere il risultato e sarà ok. Ma è meglio scoprire perché, è una situazione molto atipica.
L'errore 0,5 significa che il risultato è completamente casuale e il modello non serve a nulla.

 

1

Motivazione: