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

 
Dr.Trader:

Il "file CSV" e il "dataset R" nella scheda di valutazione sono semplicemente modi diversi di specificare l'origine dei dati. Se si inseriscono gli stessi dati, si otterrà lo stesso risultato quando si testa il modello.

Se prima del sonaglio eseguire

allora questo dataset_validate sarà ora disponibile nella scheda evaluate come R dataset. Ma il risultato del controllo del modello finirà per essere lo stesso se si seleziona semplicemente l'opzione file csv e si specifica il file C:/dummy_set_validation.csv, i dati per il test saranno identici in entrambi i casi.

La formazione stessa era su un file diverso, dummy_set_features.csv, quindi guardare avanti è impossibile qui, perché i dati in entrambi i file sono diversi, e non dipendono affatto dal tempo (ma dalla formula). Penso che la rete neurale ha fatto un ottimo lavoro e ha trovato 6 input che determinano il risultato, ha ridotto l'influenza di altri input, e con un po' di logica neurale ha descritto la formula desiderata.

Per sicurezza ho controllato entrambi i file per trovare stringhe duplicate, se ce ne sono. Ecco il codice in R:

Se questo viene fatto prima di rattle, allora entrambe le tabelledataset_train edataset_validate sono disponibili per la formazione e la verifica del modello, e non ci saranno duplicati. Gloria R.

il file di convalida del modello conteneva 23 ripetizioni dal campione di allenamento, ma a parte questo ha altre 3000 righe uniche, quindi la valutazione del modello non potrebbe essere significativamente influenzata.

A quanto pare sono incapace di spiegare quello che voglio.

1. Potresti indicare le date di inizio e fine di entrambi i file?

2.Nulla può essere rimosso dal filedataset_validate, poiché questo file simula l'arrivo di barra dopo barra.

 

Ci ho pensato ancora un po' stamattina, non è davvero così semplice.

Secondo la vostra formula, ci sono solo 2^6 = 64 combinazioni di ingressi in uso. Se l'algoritmo di apprendimento determina in qualche modo l'importanza di questi 6 input, allora potrebbe ricordare tutte le 64 combinazioni. E poi non importa che la combinazione di tutti gli input nel campione di validazione sia unica, il modello prenderà solo quei 6 input significativi e determinerà la risposta già nota. È così che ha funzionato per me con il neurone. Ora ho rimosso un paio di combinazioni di input 1,3,5,7,9,11 dal file di allenamento, ma ho lasciato combinazioni simili nel file di validazione. L'errore durante l'addestramento è rimasto allo 0%, ma durante la convalida è aumentato al 50% su queste nuove combinazioni. E questo è male, nel forex lo spread avrebbe preso il deposito in meno. SanSanych ha ragione, è tutta una questione di riqualificazione, ammetto di essermi sbagliato.

Apparentemente questo è il motivo per cui molti modelli non funzionano nel forex, ricordano solo certe combinazioni ma non riescono a far fronte a quelle nuove.

 
SanSanych Fomenko:

A quanto pare sono incapace di spiegare quello che voglio.

1. Potresti indicare le date di inizio e fine di entrambi i file?

2.Nulla può essere rimosso dal filedataset_validate, poichéquesto file simula l'arrivo barra dopo barra.

No, è vero, ho capito. Quello che dici si applica al forex, e sono d'accordo. Ma io stavo parlando dei file di Alexey e dell'addestramento del modello su di essi.

https://c.mql5.com/3/96/dummy_set_features.zip - formazione

https://c.mql5.com/3/96/dummy_set_validation.zip - validazione

il risultato nei file è definito dalla formula "1-mod(somma(input_1 ; input_3 ; input_5 ; input_7 ; input_9 ; input_11);2)"

Per favore, dammi un link a quei file che hai menzionato e proverò ad addestrare il neurone su di essi.

 
Ragazzi,

Ho capito bene che la foresta è sovrallenata su tutti i dati, anche se ho evidenziato le caratteristiche importanti. Deve cancellare i dati e allenarsi di nuovo.

Il NS senza pulizia dei dati ha imparato bene?

Grazie
 
Dr.Trader:

No, è vero, ho capito. Quello che dici si applica al forex, e sono d'accordo. Ma io parlavo dei file di Alexei, e dell'addestramento dei modelli su di essi.

https://c.mql5.com/3/96/dummy_set_features.zip - formazione

https://c.mql5.com/3/96/dummy_set_validation.zip - validazione

il risultato nei file è definito dalla formula "1-mod(somma(input_1 ; input_3 ; input_5 ; input_7 ; input_9 ; input_11);2)"

Per favore, datemi un link a quei file che avete menzionato, cercherò di addestrare la neuronica su di essi.

Ecco qui, nell'archivio.

Questo è RData. Aprire R, caricare rattle e da esso sono disponibili i frame di dati

"R1.F1" "R1.F3" "R1.F4" "R1.F5" "R1.F6" - questo è per la formazione, ha diverse variabili target che sono segnate con Fi

"R2.F1" "R2.F3" "R2.F4" "R2.F5" "R2.F6" - questo è per i test

"Rat_DF1" "Rat_DF2" "Rat_DF3" è il file che contiene tutte le variabili di destinazione

File:
ALL_cod.zip  3281 kb
 
Alexey Burnakov:
Ragazzi,

Ho capito bene che la foresta è sovrallenata su tutti i dati, anche se ho evidenziato le caratteristiche importanti. Deve cancellare i dati e allenarsi di nuovo.

Il NS senza pulizia dei dati ha imparato bene?

Grazie
Sì, per questo compito dal primo post è così. Ma se si applica NS per il forex, allora NS sulla spazzatura sarà anche sovrallenato e lavorerà peggio sui nuovi dati, quindi la selezione dei dati di input è anche rilevante lì.
 
Dr.Trader:
Sì, per questo compito dal primo post è così. Ma se si applica NS al forex, NS sulla spazzatura sarà anche sovrallenato e avrà prestazioni peggiori sui nuovi dati, quindi la selezione dei dati di input è rilevante anche lì.

d I dati del test sono puliti. Quindi c'è un modello in qualsiasi sito. Sui dati reali, non si può fare a meno di dividere il campione di allenamento in più parti e controllare le prestazioni su uno o più sottocampioni durante l'allenamento del modello. Questa è una semplice regola empirica.

Ma per testare la riqualificabilità dei modelli "out of the box" come l'impalcatura casuale, è stato solo utile vedere che imparano stupidamente il rumore - sulla convalida un casino completo. Anche se selezionano correttamente i predittori importanti.

Ma, anche su dati puliti, dove 14 predittori sono puro rumore (numeri inseriti a caso senza connessione e output) la foresta ha iniziato a usarli per l'allenamento. e questo è qualcosa che ho incontrato io stesso prima.

E un altro aspetto, molto importante. L'esempio di test contiene osservazioni reciprocamente indipendenti. Ogni riga non è in alcun modo dipendente da un'altra. In realtà, in una serie temporale, le osservazioni vicine saranno dipendenti. Per esempio, due valori vicini di una palla che ondeggia saranno altamente correlati. E così qualsiasi - sottolineo, QUALSIASI - metodo fallirà su dati reali grezzi. Il modo giusto, idealmente, per preparare i dati reali per l'addestramento è quello di selezionarli in modo che le osservazioni vicine non siano fisicamente correlate. Per le serie temporali, questo significa che se si prendono indicatori con una finestra di 20, allora le osservazioni vicine nel campione di allenamento dovrebbero essere prese ad almeno 20 passi di distanza. In modo che non siano legati l'uno all'altro. Allora la statistica e il corretto apprendimento dei modelli iniziano a funzionare e non gli accumuli casuali di dati simili. Spero che tu capisca cosa voglio dire.

Quando tornerò dal mio viaggio d'affari farò anche un esperimento in pubblico usando dati forex reali. E magari farlo già insieme con l'obiettivo pratico di trarre profitto dai modelli.

Alexey

 
Dr.Trader:

Ma poiché la NS è come una scatola nera, non è possibile conoscere la logica della soluzione. Puoi guardare i pesi, determinare il valore assoluto medio per ogni ingresso e disegnare un diagramma. E scoprire che 1, 3, 5, 7, 9, 11 sono più importanti del resto. Tuttavia, anche i restanti ingressi sono utilizzati per qualche motivo; i pesi zero non si trovano da nessuna parte. In altre parole, è viceversa, prima impariamo, e poi possiamo identificare gli input importanti.

Prova una specie di algoritmo di contrasto NS. L'algoritmo è in grado di auto-selezionare sia gli ingressi (non è necessario selezionarli con una navigazione "manuale") che le connessioni (e i neuroni del livello nascosto, ovviamente). L'output sarà un riassunto della logica dell'operazione.
 
SanSanych Fomenko:

Ecco qui, nell'archivio.

Questo è RData. Aprire R, caricare rattle e da esso sono disponibili i frame di dati

"R1.F1" "R1.F3" "R1.F4" "R1.F5" "R1.F6" - questo è per la formazione, ha diverse variabili target che sono segnate con Fi

"R2.F1" "R2.F3" "R2.F4" "R2.F5" "R2.F6" - questo è per i test

"Rat_DF1" "Rat_DF2" "Rat_DF3" è il file che contiene tutte le variabili di destinazione

Grazie, ho fatto una prova. Vedo che hai fatto molto per selezionare i predittori, per le neuroniche facilmente addestrate su di loro, e memorizzato il risultato sul dataset di controllo pure.

I risultati seguenti si riferiscono alla formazione su R1.F3

1) Rattle è un risultato interessante. HH con la configurazione standard ha mostrato errori di formazione/convalida/prova del 30%/29%/33%. L'errore su R2.F3 è del 35%. Ma tutto questo è solo un caso fortunato in realtà, in un'altra configurazione avrebbe facilmente sotto- o sovra-allenato, qui ha solo avuto fortuna.

2) Poi ho preso un semplice approccio grezzo con apprendimento non supervisionato, 200 neuroni nascosti, la rete è stata addestrata fino a quando ha smesso di migliorare. Errori di formazione/convalida/test/R2.F3 - 2%/30%/27%/45%. Chiaramente, la rete viene riqualificata.

3) Apprendimento supervisionato. Questo è diverso dagli alberi, ma si dovrebbe sempre fare così con un neurone per non sovrallenarlo. L'essenza è mettere in pausa l'allenamento una volta ogni tanto e controllare i risultati dell'allenamento/validazione/test. Non conosco la regola d'oro della collazione dei risultati, ma è un approccio abbastanza normale per allenarsi sul set di dati del treno, poi cercare gli errori nei set di dati di convalida e test, fermare l'allenamento quando gli errori nella convalida/test smettono di cadere. Questo dà una sorta di garanzia contro il sovrallenamento. R2.F3 è considerato indisponibile durante tutto questo processo, e il test viene fatto solo dopo la fine dell'allenamento. In questo caso gli errori di treno/validazione/test/R2.F3 sono 27%/30%/31%/37%. Anche qui c'è sovrallenamento, ma non molto. Avresti potuto fermare il processo di apprendimento in anticipo dopo che l'errore del treno fosse diventato sensibilmente più piccolo degli errori di convalida/test, ma questo è tirare a indovinare... potrebbe aver aiutato o meno.

La variabile target "R1.F1" ha tre valori, Rattle non può farlo con i neuroni e devi scrivere il tuo codice in R, ho saltato questo dataset.

"R1.F4" "R1.F5" "R1.F6" ha dato circa gli stessi risultati per tutti e 4 gli errori in Rattle neuronka, penso che un approccio adeguato con neuronka darà anche circa gli stessi risultati, non li ho trattati ulteriormente.

 

Sulla metodologia di insegnamento.

Qui ho descritto un metodo standard che è solitamente applicabile e dà buoni risultati: https://www.mql5.com/ru/blogs/post/661499

Lasciatemi spiegare brevemente: dividete tutti i dati in 2 parti - training e validazione. La convalida dovrebbe essere grande quanto si pensa di aver bisogno. Ho fatto quanto segue. Prendo 15 anni di citazioni di un minuto. Calcolo le entrate e le uscite, assottiglio i dati in modo che le osservazioni siano fisicamente diverse (le prendo attraverso n barre, dove n non è inferiore alla finestra più grande utilizzata nell'indicatore e non inferiore al ritardo più lontano). Riflettete sul perché questo sia corretto. I dati diventano reciprocamente indipendenti.

Poi prendo la parte della formazione (la più grande) - 10 anni più lontano nel passato. Creo indici di riga per la convalida incrociata. Cioè divido i dati in 5 pezzi uguali, rigidamente separati dalla data. Durante la crossvalidazione, il modello passa attraverso i parametri di allenamento come la profondità, il numero di iterazioni, ecc., allenandosi su quattro pezzi di allenamento spot e misurando l'errore su un quinto del pezzo di allenamento. Lo fa 5 volte, ogni volta selezionando una parte di test diversa su cinque. Ottiene cinque metriche di errore (per un set di parametri di allenamento). Essi sono mediati e dati come valore di errore di prova sui dati non coinvolti nell'addestramento.

Il modello fa quindi questo lavoro n * m * s * d volte, dove n,m,s,d sono i parametri di allenamento. Questa è una forza bruta sulla griglia. Può raggiungere centinaia di iterazioni. Puoi fare una ricerca casuale o genetica. Ez Yu vish.

Poi si ottiene una tabella di metriche di errore di crossvalidazione corrispondenti all'insieme dei parametri di apprendimento. Dovremmo solo prendere il miglior risultato e questi parametri. E poi addestrare l'intero campione di allenamento su quei parametri. Un limite al numero di iterazioni sarà specificato anche per NS in modo che non si verifichi un sovrallenamento.

E alla fine convalidare il modello su 5 anni di quotazioni per valutare le prestazioni fuori campione.

Tutto sommato, la crossvalidazione è finora la scelta migliore per un efficace addestramento dei modelli. Vi consiglio di fare una prova.

Il pacchetto in R è caret.

Ci sentiamo presto.

Alexey

СОПРОВОЖДЕНИЕ ЭКСПЕРИМЕНТА ПО АНАЛИЗУ ДАННЫХ ФОРЕКСА: первое серьезное обучение модели и результаты
СОПРОВОЖДЕНИЕ ЭКСПЕРИМЕНТА ПО АНАЛИЗУ ДАННЫХ ФОРЕКСА: первое серьезное обучение модели и результаты
  • 2016.02.27
  • Alexey Burnakov
  • www.mql5.com
Начало по ссылкам: https://www.mql5.com/ru/blogs/post/659572 https://www.mql5.com/ru/blogs/post/659929 https://www.mql5.com/ru/blogs/post/660386 https://www.mql5.com/ru/blogs/post/661062