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

 
vladavd #:

La novità in questo caso è uno zig-zag e un canale lungo di esso, e questa è l'avanguardia dell'ingegneria.

Non è tutto quello che vedete.

È solo il 5% di ciò che è consentito)).

lynxntech #:

è come l'ultima parola e un hamburger).

devi sempre darti la possibilità di giustificarti.

 

Ciao a tutti!

Forse qualcuno può darmi qualche consiglio. Sto cercando di prevedere la direzione di una coppia di valute per il giorno (su o giù) utilizzando il modello "DecisionTreeClassifier".

Prendo solo 5 predittori per la previsione, il risultato della previsione è una tendenza al rialzo (1) o al ribasso (-1). Dimensione del dataset: 999 righe e 6 colonne (dataset allegato).

Ma ho riscontrato un problema quando aumentando "max_depth" aumenta sempre l'accuratezza sui campioni di allenamento e di test contemporaneamente. L'accuratezza sul campione di prova smette di crescere e diventa costante a max_depth=22, pari a 0,780000. Risultati a diversi valori di max_depth:


1) clf_20=DecisionTreeClassifier(criterio='entropia', max_depth=3)

Accuratezza sul training set: 0,539424 Accuratezza sul test set: 0,565000

2) clf_20=DecisionTreeClassifier(criterio='entropia', max_depth=5)

Accuratezza sul set di allenamento: 0,579474 Accuratezza sul set di test: 0,585000

3) clf_20=DecisionTreeClassifier(criterio='entropia', max_depth=7)

Accuratezza sul set di allenamento: 0,637046 Accuratezza sul set di test: 0,640000

4) clf_20=DecisionTreeClassifier(criterio='entropia', max_depth=9)

Accuratezzasul set di allenamento: 0,667084 Accuratezza sul set di test: 0,700000

5) clf_20=DecisionTreeClassifier(criterio='entropia', max_depth=11)

Precisione sul set di allenamento: 0,700876 Precisione sul set di test: 0,710000

6) clf_20=DecisionTreeClassifier(criterio='entropia', max_depth=13)

Accuratezza sul set di allenamento: 0,720901 Accuratezza sul set di test: 0,720000

7) clf_20=DecisionTreeClassifier(criterio='entropia', max_depth=15)

Accuratezza sul set di allenamento: 0,734668 Accuratezza sul set di test: 0,740000

8) clf_20=DecisionTreeClassifier(criterio='entropia', max_depth=17)

Accuratezza sul set di allenamento: 0,747184 Accuratezza sul set di test: 0,760000

9) clf_20=DecisionTreeClassifier(criterio='entropia', max_depth=19)

Accuratezza sul set di allenamento: 0,755945 Accuratezza sul set di test: 0,765000

10) clf_20=DecisionTreeClassifier(criterio='entropia', max_depth=22)

Precisione sul training set: 0,760951 Precisione sul test set: 0,780000


Sono estremamente confuso da questa situazione, perché ho sentito dire che non si dovrebbe usare max_depth più di 3-4, perché è possibile una riqualificazione. Ma il modello si comporta così quando viene riqualificato, sembra più un modello non addestrato.

.

Non capisco in una situazione del genere, quale profondità dell'albero decisionale scegliere o quale modello anche e in generale se vale la pena di lavorare ulteriormente in questa direzione, forse manca qualcosa (ma, ad esempio, il dataset non è di 100 righe), se è possibile aggiungere altri predittori e quanti se ne possono aggiungere con una tale dimensione del dataset (io aggiungerei altri 2-5 pezzi).

Il codice è semplice, lo allego insieme al dataset:



 
Elvin Nasirov #:

Sono molto confuso da questa situazione, perché ho sentito dire che non si dovrebbe usare max_depth più di 3-4, perché la riqualificazione è possibile. Ma è così che il modello si comporta quando viene riqualificato, sembra più un modello non addestrato.

.

Non capisco in una situazione del genere, quale profondità dell'albero decisionale scegliere o quale modello anche e in generale se vale la pena di lavorare ulteriormente in questa direzione, forse manca qualcosa (ma, ad esempio, il dataset non è di 100 righe), se è possibile aggiungere altri predittori e quanti se ne possono aggiungere con una tale dimensione del dataset (io aggiungerei altri 2-5 pezzi).

Il codice è semplice, lo allego insieme al dataset:

Ciao.

Più numero di split - più memoria = rischio di apprendimento del campione.

Non sono esperto di python, ma..:

1. Prova a dividere il campione senza mescolarlo.

2. Mi sembra comunque che si stia imparando sull'intero campione, non su un campione ridotto.

 
Aleksey Vyazmikin #:

Salve.

Più numero di split - più memoria = rischio di apprendimento di un campione.

Non sono un esperto di python, ma..:

1. Provate a dividere il campione senza mescolarlo.

2. Mi sembra che vi stiate allenando sull'intero campione, non su un campione ridotto.

Grazie! Sembra che tu abbia ragione.

Ho sostituito "clf_20.fit(X, y)" con "clf_20.fit(X_train, y_train)" nel codice precedente e l'immagine è cambiata quasi del 50%.

 
Elvin Nasirov #:

Grazie! Penso che tu abbia ragione.

Ho sostituito "clf_20.fit(X, y)" con "clf_20.fit(X_train, y_train)" nel codice precedente e l'immagine è cambiata quasi del 50%.

È normale avere un risultato del genere: un risultato troppo buono è sempre un motivo per iniziare a cercare un bug nel codice.

 
Aleksey Vyazmikin #:

È normale avere questo risultato: un risultato troppo buono è sempre un motivo per iniziare a cercare un bug nel codice.

Ho un'altra domanda, se posso.

Risulta che il risultato migliore si ottiene con max_depth=1 e si presenta così:

Accuratezza sul training set: 0,515021 Accuratezza sul test set: 0,503333

Sembra essere estremamente negativo e pari alla probabilità di lanciare una moneta. Oppure possiamo considerarlo un buon risultato e concludere che abbiamo trovato una formalizzazione che ci permette di livellare la probabilità del movimento del forex e la probabilità del risultato con il lancio di una moneta?

Cioè, la situazione è tale che per ogni combinazione di predittori esistono due varianti equivalenti di movimento del mercato: al rialzo o al ribasso, e quindi è necessario integrare il set di dati con qualcosa che possa specificare alla combinazione attuale ancora rialzo o ribasso.

 
Elvin Nasirov #:

Mi è venuta in mente un'altra domanda, se posso.

È emerso che il risultato migliore si ottiene con max_depth=1 e si presenta così:

Accuratezza sul set di allenamento: 0,515021 Accuratezza sul set di test: 0,503333

Sembra essere estremamente negativo e pari alla probabilità di lanciare una moneta. Oppure possiamo considerarlo un buon risultato e concludere che abbiamo trovato una formalizzazione che ci permette di livellare la probabilità di un movimento del forex e la probabilità di un lancio di una moneta?

Cioè, la situazione è tale che per ogni combinazione di predittori esistono due varianti equivalenti di movimento del mercato: al rialzo o al ribasso, e quindi è necessario integrare il set di dati con qualcosa che possa specificare l'attuale combinazione ancora al rialzo o al ribasso.

Per prima cosa leggete le altre metriche per valutare i risultati dell'addestramento: Recall (completezza) e Precision (accuratezza), che sono particolarmente importanti per un campionamento non bilanciato. La strategia potrebbe essere quella di produrre un risultato finanziario positivo per la classificazione con la stessa probabilità di risultati corretti e non corretti.

Consideriamo un target markup più complesso ma logico. Determinare come si chiuderà una giornata rispetto all'apertura è più difficile che determinare la probabilità di un rialzo e di un ribasso di una certa percentuale dell'apertura della giornata - c'è una probabilità di identificare un pattern intraday.

Per me il campione è troppo piccolo.

Pensate a creare dei predittori che possano descrivere il mercato. A partire dagli indicatori dei predittori, a mio avviso, dovrebbe essere possibile ripristinare la situazione sul grafico senza guardarlo.

Consiglio di provare CatBoost per l'addestramento: costruisce modelli rapidamente e risolve il problema del trasferimento dei modelli in codice per lavorare in MT5 senza stampelle.

 
Elvin Nasirov #:

Il risultato migliore si ottiene con max_depth=1 e si presenta così:

Precisione sull'insieme di allenamento: 0,515021 Precisione sull'insieme di test: 0,503333

Spesso si nota anche che il risultato migliore si ottiene a profondità=1, il che significa che è stato effettuato un solo split su una delle caratteristiche. Ulteriori suddivisioni dell'albero portano a un sovrallenamento in allenamento e a risultati peggiori nel test.

 
elibrarius #:

Spesso vedo anche che il risultato migliore è a profondità=1, il che significa che è stata effettuata una sola suddivisione su una delle caratteristiche. Ulteriori suddivisioni dell'albero comportano una riqualificazione della traccia e un peggioramento dei risultati nel test.

Controllando i risultati ieri, è emerso che il modello per tutti i casi ha dato una previsione di "1", in media e quindi 50/50. Si può fare a meno del modello - tutto il tempo dicendo "su" andrà.

 
Fare trading come un trader professionista
h ttps://youtu.be/RS9jRVmW1j4

Ecco cosa sono i livelli di supporto e resistenza nella mia comprensione.....

Non tutti lo capiranno, ma se lo capiranno, complimenti a loro....

EARNING SEASON KICKS OFF - Trading Futures Live
EARNING SEASON KICKS OFF - Trading Futures Live
  • 2023.01.13
  • www.youtube.com
Join our FREE Discord community https://discord.gg/zhvUwUUhFirst 5 days of January bullish were followed by Full-year gains 83% of the time since 1950.Earnin...
Motivazione: