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

 
Dr.Trader:
Continuate a non fidarvi dell'importanza quando lo usate per il forex. Iris è un dato molto semplice, ci sono modelli diretti tra i dati disponibili e le classi. RF trova semplicemente un insieme minimo di predittori su cui le classi dell'iride possono essere definite e il gioco è fatto.

Cosa può fare RF per catturare le dipendenze non dirette? Mi sembra che non funzioni per il mercato solo perché i predittori sono marci, se ci fossero predittori normali funzionerebbe come con iris con un tasso di errore del 95%

 

Con gli iris è semplice - se un petalo è da così e così a così e così lunghezza allora è di classe 1, e se è da così e così a così e così larghezza allora è di classe 2, ecc. Quello che fa RF è trovare intervalli di valori predittivi che meglio corrispondono ai valori target.

Non ho nemmeno bisogno di una foresta per questo compito, un albero è sufficiente per una precisione del 90%:

 Rule number: 2 [Species=setosa cover=33 (31%) prob=1.00]
   Petal.Length< 2.6

 Rule number: 7 [Species=virginica cover=35 (33%) prob=0.00]
   Petal.Length>=2.6
   Petal.Length>=4.85

 Rule number: 6 [Species=versicolor cover=37 (35%) prob=0.00]
   Petal.Length>=2.6
   Petal.Length< 4.85

Cioè, se una certa classe corrisponde a un certo intervallo di valori predittivi o alle loro combinazioni, e questi intervalli non si sovrappongono - allora l'albero o la foresta risolverà tutto al 100%.

Le dipendenze da Forex sono molto più complicate, e una foresta ha bisogno di decine di predittori per descrivere i valori target. La foresta troverà sicuramente tali intervalli di predittori e le loro combinazioni che descrivono i valori target, ma saranno semplicemente combinazioni selezionate, senza alcuna logica o analisi. Quello che la foresta prenderà per decidere - rumore, o un predittore veramente importante - è una questione di caso. Forest for forex funzionerà correttamente solo se elimina in anticipo i predittori inadatti e lascia solo quelli necessari per l'apprendimento. Il problema è che i predittori necessari devono essere in qualche modo identificati o trovati, e la foresta non è di aiuto in questo.

Non sono ancora riuscito a farlo.

La maggior parte del tempo è stato necessario per setacciare i predittori con autovalore = 0 dopo la cov() della tabella di allenamento (presumo che solo i predittori specialmente correlati siano adatti). Dopo 24 ore, si trattava di addestrare il modello ForeCA stesso, che non si è addestrato a causa di un errore:

unit-variance: Mean relative difference: 3.520041 e-06
Error in check_whitened(out$score, FALSE) : Data must be whitened:
         Each variable must have variance 1.

Il pacchetto è molto esigente sui predittori, un sacco di restrizioni di ogni tipo. Non so nemmeno cosa significhi l'ultimo errore, lo approfondirò.

Finirò questo più tardi:
Google dice che non è necessario cancellare i predittori. Potete trasformarli in modo che non siano più correlati, allora la matrice di covarianza avrà pieno rango, che è richiesto per ForeCA. Per lo sbiancamento ci sono alcune funzioni nel pacchetto stesso (non ha funzionato subito, bisogna capirle), più la teoria nei link qui sotto.
Per usare correttamente il pacchetto ForeCA bisogna prima capire e imparare come si fa:
http://stats.stackexchange.com/questions/23420/is-whitening-always-good
http://courses.media.mit.edu/2010fall/mas622j/whiten.pdf

 
Dr.Trader:

1) La foresta di forex funzionerà correttamente solo se si schermano in anticipo i predittori inadatti e si lasciano solo quelli necessari per l'allenamento. Il problema è che i predittori giusti devono essere identificati o trovati, e la foresta non è di aiuto in questo.

2) Il pacchetto è molto esigente per i predittori, ci sono molte limitazioni. Non so nemmeno cosa significhi l'ultimo errore, lo approfondirò.

1) Ho suggerito quella che penso sia un'idea abbastanza buona su come fare una tale selezione, ma nessuno è interessato, e non posso implementarla io stesso.

2) Non posso farlo da solo. 2) Puoi solo ridurre la quantità di dati, altrimenti lo saprai da solo).

 

Ho già pubblicato questo post ma nessuno ha reagito, proverò di nuovo.

Ho già pubblicato questo post ma nessuno ha reagito, ci riprovo. C'è una nozione in BP come dynamic time warping (DTW), si può usare per rendere il grafico dei prezzi più leggibile e quindi più riconoscibile per l'algoritmo

data_driven_time_warp <- function (y) {
  cbind(
    x = cumsum(c(0, abs(diff(y)))),
    y = y
  )
}

y <- cumsum(rnorm(200))+1000

i <- seq(1,length(y),by=10)
op <- par(mfrow=c(2,1), mar=c(.1,.1,.1,.1))
plot(y, type="l", axes = FALSE)
abline(v=i, col="grey")
lines(y, lwd=3)
box()
d <- data_driven_time_warp(y)
plot(d, type="l", axes=FALSE)
abline(v=d[i,1], col="grey")
lines(d, lwd=3)
box()
par(op)

e tutto sembra essere a posto, ma la cosa triste è che come risultato di questa trasformazione, otteniamo due coordinate x e y tempo(sintetico) e valori

d
                x        y
  [1,]   0.000000 1001.393
  [2,]   1.081118 1002.474
  [3,]   2.799970 1004.193
  [4,]   3.706653 1005.100
  [5,]   3.867351 1005.260
  [6,]   4.654784 1004.473
  [7,]   5.000202 1004.127
  [8,]   6.665623 1005.793
  [9,]   7.415255 1005.043
 [10,]   7.956572 1005.584
 [11,]   8.403185 1005.138
 [12,]   9.352230 1004.189
 [13,]   9.913620 1004.750
 [14,]  10.249985 1004.414

la domanda è come restituire questa trasformazione a un vettore in modo che non perda le sue proprietà

Questo è come appare - in alto ordinario, in basso dtw

DTW

 
mytarmailS:

1) Ho suggerito quella che pensavo fosse un'idea abbastanza buona per fare una tale selezione, ma nessuno è interessato, e non posso implementarla io stesso.

2) Ridurre solo la quantità di dati o si sa)

Cosa suggerisce? Si scopre che mi sono perso? Posso ripetere la sua idea?
 
SanSanych Fomenko:
Cosa suggerisce? A quanto pare, cosa mi sono perso? Posso ripetere la sua idea?
Guarda dove ho scritto sul clustering, l'ho spiegato in dettaglio
 
mytarmailS:

la questione è come restituire questa trasformazione a un vettore normale senza perdere le sue proprietà

Allora, qualche idea su questo?
 

Ho fatto un altro esempio con ForeCA, in archivio piccola tabella per test e codice per lavorare con esso.
Questa volta ho capito bene.
Puoi usare la tua tabella con i dati di allenamento per il modello, la cosa principale è che deve essere matrice, senza fattori (allenamento con lm, puoi usare solo la regressione). Il numero di righe dovrebbe essere molto più grande del numero di predittori, altrimenti ci saranno errori in ForeCA.
Ho 0 e 1 valori target, con altra precisione non sarà determinato correttamente, se questo, si prega di correggere il codice in RegressionToClasses01(regr) per il tuo caso nel luogo in cui il risultato della regressione è arrotondato alle classi.
trainData - dati per la formazione
trainDataFT - dati per il fronttest

Risultato:
lm su dati grezzi: 75% di precisione sui dati di allenamento e 57% sui nuovi dati.
lm su tutti i 14 componenti di foreCA: 75% sui dati di allenamento e 61% sui nuovi dati. Leggermente meglio, ma in questo caso +4% è solo +1 risultato corretto, la tabella è abbastanza piccola :)

Cioè, se i predittori sono già preselezionati, non dovrebbe essere peggiore dopo ForeCA, forse anche aggiungere un paio di punti percentuali alla precisione.

Ho anche aggiunto un grafico con la dipendenza della precisione dal numero di componenti ForeCA. Sembra che maggiore è il numero di componenti, più accurati saranno i risultati. Numero massimo consentito di componenti = numero di predittori.


 

La seconda parte dell'esperimento è.

Avevo 14 predittori selezionati in precedenza, ho aggiunto altri 14 con valori casuali. Il numero massimo consentito di componenti ForeCA è ora 28.

L'accuratezza della previsione con tutti i 28 componenti sui dati di allenamento in entrambi i casi (con e senza foreCA) è del 76%, l'accuratezza sui nuovi dati in entrambi i casi è del 57%.

Non credo che foreCA abbia affrontato la spazzatura nei predittori, non ho visto il miracolo previsto.

 
mytarmailS:
E allora?
Sembra un grafico Renko. I rencos sono in qualche modo disegnati sulle barre nel terminale mt5, hai bisogno di un algoritmo simile qui.