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

 

Ricordate che ho detto che ho ricevuto un modello che ha guadagnato dal 31.01.2018 ad oggi, e questo è come questo modello si è comportato in queste due settimane dal 03.05.2018 ad oggi. Risultato del tester.

Abbastanza bene per una vecchia signora addestrata con 40 punti e che è stata in OOS per circa 1,5 mesi.

E questo è il suo OOS completo dal 31.01.2018

E tu pensi ancora che sia un fit???? Solo un promemoria che gli screenshot mostrano la sezione OOS

 

Darò dei calcoli che dimostrano che tutto è una chiacchiera senza senso:

  • senza un'attenta giustificazione che i predittori influenzino la variabile obiettivo
  • il sovrallenamento (overfitting) è determinato solo su file a TEMPO al di fuori del tempo di allenamento.

Dati iniziali:

Due file temporali consecutivi con 54 predittori e una variabile target sull'inversione di tendenza: short-out-long

I calcoli sono eseguiti in rattle, che il primo file R Rat_DF1a divide in tre parti: treno, test, validazione. La divisione in parti è fatta a campione, cioè viene fatta una selezione casuale di barre del file originale.

Risultati del calcolo RF: 500 alberi, 7 predittori per nodo.

Numero di osservazioni utilizzate per costruire il modello: 2491

L'imputazione dei valori mancanti è attiva.


Chiama:

randomForest(formula = trainY ~ ,

data = crs$dataset[crs$sample, c(crs$input, crs$target)],

ntree = 500, mtry = 7, importance = TRUE, replace = FALSE, na.action = randomForest::na.roughfix)


Tipo di foresta casuale: classificazione

Numero di alberi: 500

No. di variabili provate ad ogni split: 7


Stima OOB del tasso di errore: 1,61%

Matrice di confusione:

-1 0 1 class.error

-1 498 5 2 0.01386139

0 3 1067 17 0.01839926

1 1 12 886 0.01446051

È un risultato meraviglioso! Un graal! Si noti che l'AOB è il pezzo di file che non è stato utilizzato nell'addestramento.

Vediamo qui l'errore di addestramento: vediamo che 500 non sono necessari, possiamo cavarcela con 50 o 100 alberi.



Controlliamo nella sezione test

Matrice di errore per il modello Random Forest su Rat_DF1a [test] (conteggi):


Previsto

Reale -1 0 1 Errore

-1 110 3 0 2.7

0 3 221 2 2.2

1 0 2 194 1.0


Matrice di errore per il modello Random Forest su Rat_DF1a [test] (proporzioni):


Previsto

Reale -1 0 1 Errore

-1 20.6 0.6 0.0 2.7

0 0.6 41.3 0.4 2.2

1 0.0 0.4 36.3 1.0


Errore complessivo: 1,8%, errore medio di classe: 1,96667%.


Rattle timestamp: 2018-03-14 10:57:23 utente


Il risultato della formazione è confermato. Graal!


Ricontrolliamo di nuovo nella sezione di convalida.

Matrice di errore per il modello Random Forest su Rat_DF1a [validare] (conteggi):


Previsto

Reale -1 0 1 Errore

-1 105 1 0 0.9

0 1 218 2 1.4

1 0 1 205 0.5


Matrice di errore per il modello Random Forest su Rat_DF1a [validare] (proporzioni):


Previsto

Reale -1 0 1 Errore

-1 19.7 0.2 0.0 0.9

0 0.2 40.9 0.4 1.4

1 0.0 0.2 38.5 0.5


Errore complessivo: 0,9%, errore medio di classe: 0,9333333%.


Rattle timestamp: 2018-03-14 10:59:52 utente


Graal! Puoi correre da una società di microfinanza e prendere in prestito tutta la grana che puoi!


Ma c'è un MA: la divisione del file è stata fatta campionando casualmente le barre, e si scambierà rigorosamente per tempo crescente.

Controlliamo il file dove è stata salvata questa cronologia - è Rat_DF1b

Ed ecco il risultato:

Matrice di errore per il modello Random Forest su Rat_DF1b (conteggi):


Previsto

Reale -1 0 1 Errore

-1 0 324 237 100.0

0 0 633 540 46.0

1 0 152 697 17.9


Matrice di errore per il modello Random Forest su Rat_DF1b (proporzioni):


Previsto

Reale -1 0 1 Errore

-1 0 12.5 9.2 100.0

0 0 24.5 20.9 46.0

1 0 5.9 27.0 17.9


Errore complessivo: 48,5%, errore medio di classe: 54,63333%.


Rattle timestamp: 2018-03-14 11:02:16 utente


CATASTROFE! IL MODELLO VIENE RIQUALIFICATO! I PREDITTORI CONTRO LA VARIABILE OBIETTIVO È SOLO RUMORE, SOLO SUL RUMORE PUÒ MO GENERARE RISULTATI COSÌ SORPRENDENTI.


Vi ho mostrato uno schema normale, comune, a livello di studente universitario, per l'adattamento e la convalida del modello. Lo svantaggio principale: manca qualsiasi considerazione della relazione tra i predittori e la variabile obiettivo.

Ma lo schema dovrebbe essere SEMPRE almeno quello, e NON è ancora completo - abbiamo bisogno di un'altra esecuzione del tester, che confermerà il risultato del test su un normale file sequenziale. Bene, e poi alla società di microfinanza.



 
SanSanych Fomenko:

Darò dei calcoli che dimostrano che sono tutte chiacchiere inutili:

  • il sovrallenamento (overfitting) è determinato solo su file da TIME al di fuori del tempo di allenamento.

È strano che tu abbia ottenuto risultati così buoni nel tuo test. Nei miei esperimenti e lì era molto peggio. Facendo una diversa inizializzazione dell'RNG prima della miscelazione ho ottenuto risultati diversi nel test e nella validazione - molto diversi con RNG diversi, sia per errore che per numero di trade.

Di conseguenza, sono arrivato alla conclusione che il test e la convalida non sono affatto necessari, ed è necessario addestrare in un sito e valutare nell'altro (lo avete come file separato). In questo modo il fattore casuale di "fortuna" della mescolanza sarà escluso.

 

Ragazzi, il Graal è pronto?

 
SanSanych Fomenko:

Darò dei calcoli che dimostrano che tutto è una chiacchiera senza senso:

  • senza un'attenta giustificazione che i predittori influenzino la variabile obiettivo
  • il sovrallenamento (overfitting) è determinato solo su file a TEMPO al di fuori del tempo di allenamento.

Dati iniziali:

Due file temporali consecutivi con 54 predittori e una variabile target sull'inversione di tendenza: short-out-long

I calcoli sono eseguiti in rattle, che il primo file R Rat_DF1a divide in tre parti: treno, test, validazione. La divisione in parti è fatta a campione, cioè viene fatta una selezione casuale di barre del file sorgente.



Ma c'è un MA: la divisione del file è fatta da una selezione casuale di barre, mentre il trading sarà fatto rigorosamente a tempo crescente.

Controlliamo il file dove è stata salvata questa cronologia - Rat_DF1b



Errore complessivo: 48,5%, errore medio di classe: 54,63333%


Rattle timestamp: 2018-03-14 11:02:16 utente


CATASTROFE! IL MODELLO VIENE RIQUALIFICATO! I PREDITTORI CONTRO LA VARIABILE OBIETTIVO È SOLO RUMORE, SOLO SUL RUMORE PUÒ MO GENERARE RISULTATI COSÌ SORPRENDENTI.


Vi ho mostrato uno schema normale, comune, a livello di studente universitario, per l'adattamento e la convalida del modello. Lo svantaggio principale: manca qualsiasi considerazione della relazione tra i predittori e la variabile obiettivo.

Ma lo schema dovrebbe SEMPRE essere almeno quello, e NON è ancora completo - avete ancora bisogno di un tester per confermare il risultato del test su un normale file sequenziale. Bene, allora alla società di microfinanza.



Questo è un errore di base nella divisione in sottoinsiemi (train/val/test). L'ordine dovrebbe essere il seguente:

  1. Dividere l'insieme di dati ordinati nel tempo in treno/val/test.
  2. Durante l'addestramento, solo il train set (mai il validation set e il test set) dovrebbe essere mischiato. Sto parlando di classificazione, naturalmente.
  3. Tutti i parametri di trasformazione e di trasformazione dei predittori sono ottenuti solo sul set di allenamento. Li usiamo su val/test.
  4. Valutazione, selezione e creazione dei predittori solo sul set di allenamento.

Buona fortuna

 

Quando si tratta di stimare i predittori utilizzando modelli, penso che il pacchetto più avanzato sia RandomUniformForest. Tratta in modo molto dettagliato l'importanza dei predittori da diversi punti di vista. Vi consiglio di dargli un'occhiata. In uno dei miei articoli l'ho descritto in dettaglio.

Ho rifiutato di usare la selezione dei modelli di predittori. Limitato alle specifiche del modello utilizzato.

Buona fortuna

 
Vladimir Perervenko:
  1. Durante l'allenamento, mescoliamo solo il set di allenamento (mai il set di convalida e il set di test). Parlando di classificazione, ovviamente.

Da Nikopenko S., Kadurin A., Arkhangelskaya E. "Apprendimento profondo" p. 139.


Affinché i dati di convalida siano della stessa natura dei dati di allenamento, bisogna mischiarli. Altrimenti un pezzo di tendenza casuale o un piatto può apparire lì. Di conseguenza, non valuteremo il modello per la sua capacità di generalizzare, ma lo adatteremo a un certo pezzo di storia continua in un certo periodo di tempo (ci fermeremo lì, dopo tutto).

Ma, come ho scritto sopra, dopo aver sperimentato diverse inizializzazioni di GSF, in cui sono stati ottenuti diversi set validi per successo, - sono arrivato alla conclusione che il lotto valido probabilmente non è necessario. Oltre ad essa, è possibile utilizzare altri metodi di regolarizzazione. Tuttavia, questi esperimenti erano su una piccola quantità di dati (5 giorni), e se il numero di esempi aumenta di 10 volte, forse la miscelazione sarà più uniforme e i dati su queste sezioni saranno omogenei (cioè della stessa natura) - in quel caso valido può essere utile.

Aggiornamento: Nel caso in cui ci siano molti dati e diversi lanci e tendenze in entrambe le direzioni siano inclusi nella trama valida, la miscelazione con il set di allenamento potrebbe non essere necessaria.
 
Vladimir Perervenko:

Quando si tratta di stimare i predittori utilizzando modelli, penso che il pacchetto più avanzato sia RandomUniformForest. Tratta in modo molto dettagliato l'importanza dei predittori da diversi punti di vista. Vi consiglio di dargli un'occhiata. In uno dei miei articoli l'ho descritto in dettaglio.

Ho rifiutato di usare la selezione del modello dei predittori. Limitato alle specifiche del modello utilizzato.

Buona fortuna

E penso che il più avanzato sia un prodotto completamente diverso ;-).... In cui è implementato in un modo leggermente diverso.

Due reti, dove il campione è diviso in 2 sottocampioni treno e test, dove per la rete B (il secondo polinomio), il trainomio è il test e il test è il trainomio. Questo conta esclusivamente il campione di prova, dove la metà è lavorata da un polinomio, l'altra dall'altro. E le classi sono divise equamente. Cioè, gli uni sono equamente divisi in vassoio e test, e di conseguenza anche gli zeri sono equamente divisi. Purtroppo non c'è tempo. Il file può essere impostato in qualsiasi ordine di vettori. Forse questa è la chiave per abbassare l'overrun.


La verità che non capisco bene, forse parlando dell'area di convalida è una traccia nel mio ottimizzatore preferito?

E nel tuo caso la sezione di test è un controllo, quando lasciamo lavorare la rete per un po' di tempo... Sono confuso dai concetti...

 

In ogni caso, credo che la sezione di test non possa influenzare in alcun modo la sezione di addestramento e dovrebbe essere formata nel modo più casuale possibile per compiti di classificazione, dove la sezione di test, anche se ordinata per tempo, non dipenderà proprio da questo tempo. Perché? Perché mescolando tutti i dati stiamo cercando di ottenere il vero potenziale da questo insieme, e non una fortunata coincidenza di circostanze sotto forma di ordine. Così quando mischiate i vostri dati, vedete davvero cosa possono fare i vostri dati... Come questo....

Con più ottimizzazioni, il risultato dovrebbe saltare entro il 10-20% è solo lo stesso a causa dell'ordinamento dei dati, una volta ben ordinati, l'altra volta un po' peggio, etc.... IMHO!!!

 
elibrario:

Da Nikopenko S., Kadurin A., Arkhangelskaya E. "Apprendimento profondo" p. 139.


Affinché i dati di convalida siano della stessa natura dei dati di addestramento - è necessario mischiarli insieme. Altrimenti ci può essere un pezzo casuale di tendenza o piatto. Di conseguenza, non valuteremo il modello per la sua capacità di generalizzare, ma per adattarlo a un certo pezzo di storia continua in una certa sezione (ci fermeremo lì, dopo tutto).

Ma, come ho scritto sopra, dopo aver sperimentato diverse inizializzazioni di GSF, in cui sono stati ottenuti diversi set validi per successo, - sono arrivato alla conclusione che il lotto valido probabilmente non è necessario. Oltre ad essa, è possibile utilizzare altri metodi di regolarizzazione. Tuttavia questi esperimenti erano su una piccola quantità di dati (5 giorni), e se il numero di esempi aumenta di 10 volte, forse la miscelazione sarà più uniforme e i dati su questi grafici saranno più omogenei (cioè della stessa natura).

Aggiornamento: se ci sono molti dati e la trama valida include diversi flauti e tendenze in entrambe le direzioni, allora la miscelazione con il set di allenamento potrebbe non essere necessaria in questo caso.

Lo spirito giovanile di contraddizione è indomabile :)

Stavo parlando della classificazione delle serie temporali. Ad esempio per M15 due settimane per la formazione di circa 1000 barre. La prossima settimana per la convalida è di 500 barre. Durante l'addestramento mescoliamo il set di allenamento, ma non quello di convalida.

Mescolare l'intero set prima della separazione è necessario in due casi: set stratificati e convalida incrociata. Anche in questo caso, il campionamento dovrebbe essere fatto senza sostituzione per evitare di includere gli stessi esempi in entrambi i set.

Dato che non abbiamo limiti al numero di esempi e che si tratta di serie temporali, è meglio dividere prima di mescolare. IMHO