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

 
Mi sto anche chiedendo come il pacchetto foreca definisce la relazione input-output. Forse è banale, forse no.
 
Alexey Burnakov:
Mi chiedo anche come il pacchetto foreca determini la relazione input-output. Può essere che sia banale lì o può non esserlo.

Ho appena guardato attraverso la linea, lasciatemi correggere o confermare, ma secondo la mia comprensione il pacchetto basato su qualche algoritmo interno valuta la capacità predittiva di una particolare variabile casuale, cioè la capacità di estrapolare i suoi valori di una variabile casuale nel futuro. Se si tratta di un grafico di tendenza, ne otteniamo uno, e se si tratta di incrementi di prezzo, otteniamo lo 0,83%, che per me è abbastanza ovvio. E tutto dipende dal metodo stesso e in pratica è vero il contrario, poiché gli incrementi sono previsti molto meglio - sono molto più vicini alla stazionarietà rispetto alle tendenze nelle serie temporali non stazionarie. Dobbiamo capire lo strumento stesso e applicare lo strumento agli oggetti a cui si adatta.

In generale, ci sono errori nell'analisi dei sistemi.

Errore #1.

Applicare il metodo giusto al problema sbagliato.

È estremamente comune nella statistica.

 
SanSanych Fomenko:

In generale penso che il messaggio originale si sia perso. Per me, l'idea originale era che abbiamo bisogno di metodi che sono indipendenti dal modello per determinare la capacità di ciascuno dei predittori utilizzati per prevedere la variabile obiettivo.

Un esempio di selezione indipendente dal modello è il pacchetto vtreat. In qualche modo analizza i dati e poi li valuta rispetto ai valori obiettivo.

data(iris)
iris[,5] <- as.numeric(iris[,5]) #пакет  не умет факторы, их нужно сконвертировать в числа
iris_rand <- runif(nrow(iris)*10, min(iris[,1:4]), max(iris[,1:4])) #новых 10 предикторов со случайными значениями
dim(iris_rand) <- c(nrow(iris), 10)
colnames(iris_rand) <- paste0("rand_", c(1:10))
iris <- cbind(iris_rand, iris)
library(vtreat)
treatments <- designTreatmentsN(dframe = iris, varlist = colnames(iris)[1:(ncol(iris)-1)], outcomename = colnames(iris)[ncol(iris)], verbose = TRUE)
treatments
format(treatments)
significance <- treatments$scoreFrame[,"sig"]
names(significance) <- treatments$scoreFrame[,"origName"]
barplot(significance)

10 nuovi predittori con valori casuali sono creati per la tabella dell'iride. designTreatmentsN darà un punteggio ad ogni predittore, più basso è il punteggio, meglio è. In questo esempio i 4 predittori originali (gli ultimi nel grafico) si distinguono chiaramente, hanno un punteggio quasi nullo, che è molto buono. Quando si selezionano i predittori, la prima cosa da rimuovere è quella con i valori più alti.
Se ci sono solo 2 valori target (0/1, VERO/FALSO, -1/1, fattore con 2 livelli, ecc...), esiste la funzione designTreatmentsC per questo caso.


Questo pacchetto è usato anche in y-aware pca. Il pacchetto vtreat scala i predittori in un intervallo y-aware e i componenti sono ulteriormente creati in modo quasi usuale (solo senza ridimensionamento e centratura). Quindi, se volete, con questo pacchetto potete fare cose interessanti come, ad esempio, il randomforest y-aware.
Per saperne di più:https://cran.r-project.org/web/packages/vtreat/vignettes/vtreatScaleMode.html

 
Dr.Trader:

Un esempio di selezione indipendente dal modello è il pacchetto vtreat. In qualche modo analizza i dati e poi gli dà un punteggio di valore obiettivo.

10 nuovi predittori con valori casuali sono creati per la tabella dell'iride. designTreatmentsN darà un punteggio ad ogni predittore, più basso è il punteggio, meglio è. In questo esempio i 4 predittori originali (gli ultimi nel grafico) si distinguono chiaramente, hanno un punteggio quasi nullo, che è molto buono. Quando si selezionano i predittori, la prima cosa da rimuovere è quella con i valori più alti.
Se ci sono solo 2 valori target (0/1, VERO/FALSO, -1/1, fattore con 2 livelli, ecc...), esiste la funzione designTreatmentsC per questo caso.


Questo pacchetto è usato anche in y-aware pca. Il pacchetto vtreat scala i predittori in un intervallo y-aware e i componenti sono ulteriormente creati in modo quasi usuale (solo senza ridimensionamento e centratura). Quindi, se volete, con questo pacchetto potete fare cose interessanti come, ad esempio, il randomforest y-aware.
Per saperne di più:https://cran.r-project.org/web/packages/vtreat/vignettes/vtreatScaleMode.html

Bene, eccoci qua, torniamo alle basi.

Il prossimo.

Usare qualsiasi modello SOLO dopo essere stato elaborato per loro da questi pacchetti. La speranza è che i modelli, quando pre-processati in questo modo, NON soffrano di over-training.

 
SanSanych Fomenko:

Applicare i metodi giusti al problema sbagliato.

Non sono riuscito a capire la serie temporale di CaretFA, ci sono un sacco di formule nella descrizione. Ho capito qualcosa sulla correlazione dei nuovi valori con quelli vecchi, e l'analisi del grafico della frequenza dopo la trasformazione di Fourier, l'analisi di come questo grafico cambia sui nuovi dati. Lì devi capire più di radiofisica che di forex :)

Ci sono esempi nella descrizione del pacchetto, dove viene applicato agli indici DAX, SMI, CAC, FTSE, esattamente vengono usati gli incrementi su D1, cioè sia il pacchetto che i compiti sono corretti.
Una piccola sfumatura è che nell'esempio la serie temporale dei prezzi viene prima elaborata utilizzando la funzione logaritmica log() e solo dopo vengono trovati i delta. diff(log(EuStockMarkets[c(100:200),]) * 100
Ma non ho notato alcuna differenza se uso o non uso log(), il risultato della stima non è cambiato, è stato fatto piuttosto per una più comoda visualizzazione dei dati sul grafico.

 
Dr.Trader:

Non sono riuscito a capire la serie temporale di CaretFA, ci sono un sacco di formule nella descrizione. Ho colto qualcosa sulla correlazione dei nuovi valori con quelli vecchi, e l'analisi del grafico della frequenza dopo la trasformazione di Fourier, l'analisi di come questo grafico cambia sui nuovi dati. Lì devi capire più di radiofisica che di forex :)

Ci sono esempi nella descrizione del pacchetto dove viene applicato agli indici DAX, SMI, CAC, FTSE, sono gli incrementi D1 che vengono utilizzati, cioè sia il pacchetto che gli obiettivi sono corretti.
Una piccola sfumatura è che nell'esempio la serie temporale dei prezzi viene prima elaborata utilizzando la funzione logaritmica log() e solo dopo vengono trovati i delta. diff(log(EuStockMarkets[c(100:200),]) * 100
Ma non ho notato alcuna differenza se uso o non uso log(), il risultato della stima non è cambiato; è stato fatto piuttosto per una comoda visualizzazione dei dati sul grafico.

Per quanto riguarda questo pacchetto, la questione per me è una questione di principio:

  • dà il potere predittivo del singolo predittore,
  • o la capacità predittiva della variabile obiettivo utilizzando i predittori?

 
SanSanych Fomenko:

Rispetto a questo pacchetto, la questione per me è una questione di principio:

  • dà il potere predittivo del singolo predittore,
  • o la capacità predittiva della variabile obiettivo utilizzando i predittori?

Non cerca un legame tra la variabile obiettivo e i predittori. L'autore del pacchetto scrive di due applicazioni -.

1) Valutare una serie temporale per vedere se è affatto predittiva (su una scala da 0% = "rumore bianco" a 100% = sinusoidale) con Omega(). Se il risultato è 0%, allora non è possibile cercare di predire il comportamento della serie temporale, qualunque siano i predittori utilizzati.
2) Prendere alcuni predittori, valutarli con la stessa funzione, creare nuovi predittori simili a pca in modo che i nuovi predittori abbiano un risultato Omega() ancora migliore di quelli originali. Se questo aiuta a predire meglio i valori di destinazione o meno dipende dalla vostra fortuna, il pacchetto non è interessato a ciò che questi predittori devono predire. Il punto è che se il predittore non è un rumore - i modelli che lo usano prediranno in modo più stabile.

 
Dr.Trader:

Non cerca legami tra la variabile obiettivo e i predittori. L'autore del pacchetto scrive di due applicazioni -

1) Valutare se la serie temporale è prevedibile (su una scala da 0% = "rumore bianco" a 100% = sinusoidale) con Omega(). Se il risultato è 0%, allora è impossibile cercare di prevedere il comportamento della serie temporale, qualunque siano i predittori utilizzati.
2) Prendere alcuni predittori, valutarli con la stessa funzione, creare nuovi predittori simili a pca in modo che i nuovi predittori abbiano un risultato Omega() ancora migliore di quelli originali. Se questo aiuta a predire meglio i valori di destinazione o meno dipende dalla vostra fortuna, il pacchetto non è interessato a ciò che questi predittori devono predire. Il punto è che se il predittore non è un rumore - i modelli che lo usano prediranno in modo più stabile.

Lei ha sostanzialmente confermato i miei sospetti.

Grazie.

Penso che il pacchetto sia inutile per la classificazione.

Ma per una previsione di tipo estrapolativo può essere utile.

Per esempio, prendete il pacchetto di previsioni. Decompone la serie in tre componenti, poi estrapola in avanti e somma. Si ottiene una previsione un passo avanti o più avanti.

Ora la domanda è: quale coppia di valute prendere? PrendiamoCaretFA e lo usiamo per calcolare la capacità predittiva di diverse coppie di valute. Ho il sospetto che in una finestra limitata tale capacità predittiva cambi man mano che la finestra si sposta. Scegliamo una coppia di valute, la prevediamo (o un altro pacchetto - ce ne sono molti), la scambiamo, dopo aver chiuso tutte le posizioni scegliamo di nuovo la coppia di valute.

 
Dr.Trader:

Un esempio di selezione indipendente dal modello è il pacchetto vtreat. In qualche modo analizza i dati e poi li valuta rispetto ai valori target.

Per la tabella dell'iride, vengono creati 10 nuovi predittori con valori casuali. designTreatmentsN valuterà ogni predittore, più basso è il punteggio, meglio è. In questo esempio i 4 predittori originali (gli ultimi nel grafico) si distinguono chiaramente, hanno un punteggio quasi nullo, che è molto buono. Quando si selezionano i predittori, la prima cosa da rimuovere è quella con i valori più alti.
Se ci sono solo 2 valori target (0/1, VERO/FALSO, -1/1, fattore con 2 livelli, ecc...), esiste la funzione designTreatmentsC per questo caso.


Questo pacchetto è usato anche in y-aware pca. Il pacchetto vtreat scala i predittori in un intervallo y-aware e i componenti sono ulteriormente creati in modo quasi usuale (solo senza ridimensionamento e centratura). Quindi, se volete, con questo pacchetto potete fare cose interessanti come, ad esempio, il randomforest y-aware.
Per saperne di più:https://cran.r-project.org/web/packages/vtreat/vignettes/vtreatScaleMode.html

Guardo il tuo codice con iris e predittori casuali e capisco che non so programmare affatto, quello che mi ha preso 10 righe nel tuo codice si adatta in tre....

E questa selezione da parte di vtreat, differisce dalla stessa importense incorporata in RF?

 
mytarmailS:

e questo vtreat culling, è diverso dallo stesso importense costruito in RF? in termini di efficienza

Vtreat è meglio. Valuta tutto statisticamente, quanto è buono/cattivo il predittore nel complesso per predire la variabile obiettivo, senza aggiustare per un particolare modello di predizione. Si raccomanda di usare predittori con un punteggio massimo di 1/(numero di predittori). Per esempio, se ci sono 200 predittori, potete prendere da loro solo quelli che hanno una valutazione inferiore a 1/200. È possibile stimare i predittori e se tutte le stime sono superiori alla soglia - invece di tentare senza successo di insegnare il modello e prevedere nuovi dati è meglio iniziare a cercare altri predittori.

Ci sono un paio di svantaggi - il pacchetto lavora con i predittori uno per uno, e non tiene conto della loro interazione. Inoltre non mi piace che anche con predittori completamente identici, o altamente correlati - vtreat non rimuova quelli ripetitivi, a volte questo è molto fastidioso.