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

 
Dr.Trader:

Molto di questo voi stessi lo sapete e lo avete fatto, ma lo scriverò in modo più completo per escludere qualsiasi ipotesi di cui parliamo allo stesso modo ma che facciamo in modo diverso.


Tutto questo grazie ai consigli di questo forum e all'esperienza.

Grazie.

Risponderò punto per punto.

È necessario avere una funzione di fitness accuratamente affinata per stimare i parametri del modello. Se la funzione valuta i parametri specifici del modello e i predittori selezionati con un punteggio elevato - ci dovrebbero essere buoni risultati nel test sui nuovi dati.
(Terrò presente per qualsiasi stima che più è alta, meglio è)

Esiste una tale funzione. Non ho bisogno di R^2 (anche se all'inizio avevo intenzione di confermare che il mercato è stupidamente prevedibile in termini di regressione). Uso una funzione scritta per stimare il MO e la somma dei punti con lo spread. Questa funzione viene eseguita all'interno del ciclo CV e seleziona i migliori parametri per addestrare il modello.

La funzione di fitness dovrebbe ripetersi almeno 50 volte in un ciclo:
1) dividere i dati in 2 parti, 50%/50%. Ci dovrebbe essere sia un campionamento casuale con campione che un campionamento sequenziale (il pezzo per l'allenamento è da qualche parte nel mezzo, e per la convalida quello che lo circonda all'inizio e alla fine dei dati grezzi). Comprese le versioni estreme, dove l'allenamento sulla prima metà della tabella e la convalida sull'ultima, e viceversa. Penso che sia importante avere sia campioni campionati in sequenza che campioni casuali per l'allenamento. Nell'immagine potete vedere più chiaramente alcuni esempi di partizionamento casuale e sequenziale, le linee verdi sono per l'allenamento, quelle gialle sono per la convalida.

Non è molto chiaro. Non capisco a quali ripetizioni ti riferisci.

Anche in questo caso ho 99 set di allenamento (10 anni ciascuno). Ogni set è unico in termini di esempi, ma sono tutti presi dallo stesso periodo di tempo "prima".

Su ogni set eseguo un CV da 2 a 10 falli (li faccio anche ciclare).

Ma ho rigorosamente tutti i falli separati per tempo. Penso che sia un metodo invariabilmente corretto.

Quindi 99 * numero di combinazioni di parametri CV (centinaia) = centinaia di modelli addestrati, che mostrano la migliore metrica di qualità sui falli di validazione.

Poi c'è lo stesso numero di campioni ritardati presi dal periodo "dopo" (che è di 5 anni). Sono anche unici. Faccio un CV annidato: controllo ogni modello risultante per l'esperienza CV sul campione differito. Ottengo due vettori di valori di metriche di qualità: su CV e su campione differito.

Domanda per gli intenditori:

se ho dati costanti e un modello adatto (pacchetto), cosa mi aspetto di ottenere su campioni differiti?

Risposta: la metrica di qualità (QM) sui campioni in differita dovrebbe essere correlata alla metrica di qualità sui falli di convalida.

In realtà, raggiungere questo obiettivo è un grosso problema.

Perché ne ho bisogno? In modo che io possa selezionare con fiducia i migliori modelli semplicemente basandomi sulla mia crossvalidazione. Dato che ho già verificato che dà risultati coerenti con il futuro.

I comitati e gli altri modelli di alto livello devono anche superare il test di idoneità su quel campione differito su cui non sono stati addestrati in alcun modo.

 
Dr.Trader:


2) addestrare il modello sul campione di allenamento (i parametri del modello e i predittori utilizzati sono gli stessi per tutto il ciclo, quelli che si sta cercando di stimare), poi prevedere questi stessi dati con questo modello, e mettere un punteggio sulla previsione - precisione, r^2, o qualcos'altro. Io, per esempio, arrotondo il risultato della regressione alle classi, e uso la funzione Kappa di Cohen per la stima, è da caret, mi piace di più dell'accuratezza di classificazione o di regressione. Ma funziona solo per due classi. Per tre classi trovo difficile suggerire qualcosa, è importante che la stima tenga conto della precisione di ogni classe separatamente, e dia una stima complessiva basata su questo.
3) Applicare un modello addestrato per prevedere i dati di un campione di convalida, stimare la predizione con la stessa funzione.
4) Entrambe le stime (allenamento e convalida) dovrebbero essere vicine l'una all'altra, e il più alte possibile. Uso questo codice per il punteggio finale - (min(score1,score2) - (max(score1,score2)-min(score1,score2)) - dal valore min è sottratto il loro delta.

Alla fine di ogni iterazione otterremo un certo punteggio, e a causa della divisione casuale dei dati può variare da -1 a 1 (o in un altro intervallo, a seconda della funzione utilizzata). Calcoliamo il loro valore medio e lo restituiamo come risultato della funzione fitness. Inoltre, sottraggo un piccolo numero (0,0001) dal valore di fitness per ogni predittore usato per penalizzare il modello per un insieme troppo grande di dati richiesti.


Si prega di chiarire, l'allenamento si riferisce alla valutazione sui falli di cross-validazione?

La vicinanza della stima di addestramento e di convalida - significa correlazione del campionamento ritardato con il risultato della convalida incrociata?

Se questo è il caso, allora siamo proprio vicini.

 
Alexey Burnakov:

Si prega di chiarire, l'allenamento si riferisce alla valutazione sui falli di cross-validazione?

La vicinanza della stima di addestramento e di convalida - significa correlazione del campionamento ritardato con il risultato della convalida incrociata?

Se questo è il caso, allora siamo proprio vicini.

Cosa significa "correlazione"? "+1"? "-1"? Cosa con cosa?

Qui ci sono 50 risultati della corsa che posso capire. A 50 risultati si può già applicare la statistica, contare la media, le deviazioni, e soprattutto l'intervallo di confidenza....

 
mytarmailS:

Posso vedere il risultato del trading di ieri?

Ү Non perfetto, ma ancora l'80% del modello è generalizzato....

 
SanSanych Fomenko:

Cosa significa "correlazione"? "+1"? "-1"? Cosa con cosa?

Qui ci sono 50 risultati della corsa che posso capire. A 50 risultati si può già applicare la statistica, contare la media, la varianza, e soprattutto l'intervallo di confidenza....

No, non l'hai capito, CC.

Correlazione della metrica di qualità sul campione differito con la metrica di qualità sulla crossvalidation (come un campione di prova che valuta il modello addestrato). Se abbiamo centinaia di modelli addestrati, otteniamo due vettori di metriche di qualità.

Esempio: l'accuratezza di classificazione sulla convalida incrociata è del 57%, sul campionamento ritardato del 50%. E ci sono centinaia (migliaia) di questi valori. Ma ci sono centinaia e migliaia di modelli addestrati. Quindi la domanda sorge spontanea.

 
Alexey Burnakov:

Si prega di chiarire, l'allenamento si riferisce alla valutazione sui falli di cross-validazione?

La vicinanza della stima di addestramento e di convalida - significa correlazione del campionamento ritardato con il risultato della convalida incrociata?

Se questo è il caso, allora siamo proprio vicini.

In codice è qualcosa del genere:

fitness <- function(inputTestPredictors, inputTestModelParams) {
    allScores <- c()
    for(i in 1:50){
        rowSampleTrain <- sample(nrow(trainData), round(nrow(trainData)*0.5))
        rowSampleValidate <- setdiff(1:nrow(trainData), rowSampleTrain)
        #ещё  нужно добавить с вероятностью 50% - деление строк просто по порядку, без sample

        model <- TrainModel(target ~., data=trainData[rowSampleTrain, inputTestPredictors], p1 = inputTestModelParams$parameter1, p2 = inputTestModelParams$parameter2)
        #вместо  TrainModel - какойто пакет из R - rf, gbm, nnet, lm, ...

        predictResultsForTrain <- predict(object = model, newdata=trainData[rowSampleTrain, inputTestPredictors])
        predictResultsForValidate <- predict(object = model, newdata=trainData[rowSampleValidate, inputTestPredictors])

        score1 <- CalcPreditionQuality(predictResultsForTrain, trainData[rowSampleTrain, "target"]))
        score2 <- CalcPreditionQuality(predictResultsForValidate , trainData[rowSampleValidate, "target"]))
        score_final <- min(score1,score2) - (max(score1,score2) - min(score1, score2))
        allScores <- c(allScores, score_final)
        # CalcPreditionQuality - функция для оценки качества прогноза относительно ожидаемых значений. Например точность, или F-score, или каппа
    }
    predictorCountPenalty <- sum(inputTestPredictors==TRUE) * 0.0001
    return(mean(allScores) - predictorCountPenalty)
} 
 
Elementi di apprendimento automatico sono stati applicati in pratica non per imparare dalla storia del trading, ma dalla storia dell'utilizzo di un insieme di segnali/opzioni all'interno delle sessioni di trading del robot stesso per correlare l'innesco di particolari pattern nel mercato "live" in particolari configurazioni/condizioni di mercato/segnali.
 
Dr.Trader:

In codice, va più o meno così:

Sì, dimmi solo a parole, stai confrontando quali campioni? C'è la formazione, c'è il test (formazione multipla e test = crossvalidazione). C'è una convalida (campionamento ritardato).

Ho tre colonne:

formare tutti. ---- test fallisce la convalida incrociata. ----- in attesa di osservazioni

0,7 0,65 0,55

... .... ....

Il fatto che l'addestramento sia correlato al test non ha senso, perché il modello scelto, come risultato, è addestrato sull'intero set, le cui parti sono state incluse nel test.

Ma il fatto che le stime dei test siano correlate alle stime posticipate è importante per me.

 

Nei tuoi termini, sto confrontando l'allenamento e il test.
Non ho un campione di convalida (ritardato) quando addestro il modello. Il campione differito sarà i nuovi dati che il modello scambierà dopo l'allenamento.

Il fatto che l'allenamento sia correlato al test è una sciocchezza

Ecco perché faccio il partizionamento multiplo dei dati e il riallenamento multiplo dei modelli. Se i parametri del modello non hanno successo, allora il risultato medio sui campioni di test sarà molto più basso del risultato medio sui campioni di allenamento

 
Dr.Trader:

Nei vostri termini, sto confrontando l'allenamento e il test.
Non ho un campionamento di convalida (ritardato) quando addestro il modello, a quanto pare. I nuovi dati con cui il modello scambierà dopo l'addestramento saranno a campionamento differito.

Questo è il motivo per cui faccio il partizionamento multiplo dei dati e l'addestramento multiplo del modello da capo. Se i parametri del modello non hanno successo, allora il risultato medio sui campioni di test sarà molto più basso del risultato medio sui campioni di allenamento

C'è zimus in quello che state facendo.

Tuttavia, si dovrebbe anche provare il campionamento ritardato. Questo è un classico. Addestrare, testare, convalidare.

E rendere la procedura ancora più complessa. Per ogni modello che funziona bene in termini di addestramento e test, chiamiamolo modello X, fate una convalida sui dati ritardati. Si ottiene così un'idea se si sta scegliendo il modello giusto o meno, utilizzando solo l'allenamento e il test. Fai molti modelli con diversi parametri, scegli i migliori (10, 100, 1000). Fallire. Capirete se la vostra metrica "migliore" si riflette nei dati futuri oppure no. Solo dopo si va in battaglia.