C'è uno schema nel caos? Proviamo a trovarlo! Apprendimento automatico sull'esempio di un campione specifico.

 

In realtà, suggerisco di scaricare il file dal link. Nell'archivio sono presenti 3 file csv:

  1. train.csv - il campione su cui è necessario allenarsi.
  2. test.csv - campione ausiliario, che può essere utilizzato durante l'addestramento, anche unito a train.
  3. exam.csv - un campione che non partecipa all'addestramento.

Il campione contiene 5581 colonne con i predittori, il target nella colonna 5583 "Target_100", le colonne 5581, 5582, 5584, 5585 sono ausiliarie e contengono:

  1. 5581 colonna "Ora" - data del segnale
  2. 5582 colonna "Target_P" - direzione dell'operazione "+1" - acquistare / "-1" - vendere
  3. 5584 colonna "Target_100_Buy" - risultato finanziario dell'acquisto
  4. 5585 colonna "Target_100_Sell" - risultato finanziario della vendita.

L'obiettivo è creare un modello che "guadagni" più di 3000 punti sul campione exam.csv.

La soluzione deve essere realizzata senza sbirciare nell'esame, cioè senza utilizzare i dati di questo campione.

Per mantenere l'interesse, è auspicabile raccontare il metodo che ha permesso di raggiungere tale risultato.

I campioni possono essere trasformati in qualsiasi modo, anche cambiando il campione di destinazione, ma è necessario spiegare la natura della trasformazione in modo che non sia un puro adattamento al campione d'esame.

 
Aleksey Vyazmikin:

In realtà, suggerisco di scaricare il file dal link. Nell'archivio sono presenti 3 file csv:

  1. train.csv - il campione su cui è necessario allenarsi.
  2. test.csv - campione ausiliario, che può essere utilizzato durante l'addestramento, anche unito a train.
  3. exam.csv - un campione che non partecipa in alcun modo all'addestramento.

Il campione contiene 5581 colonne con predittori, il target nella colonna 5583 "Target_100", le colonne 5581, 5582, 5584, 5585 sono ausiliarie e contengono:

  1. 5581 colonna "Ora" - data del segnale
  2. 5582 colonna "Target_P" - direzione dell'operazione "+1" - acquistare / "-1" - vendere
  3. 5584 colonna "Target_100_Buy" - risultato finanziario dell'acquisto
  4. 5585 colonna "Target_100_Sell" - risultato finanziario della vendita.

L'obiettivo è creare un modello che "guadagni" più di 3000 punti sul campione exam.csv.

La soluzione deve essere realizzata senza sbirciare nell'esame, cioè senza utilizzare i dati di questo campione.

Per mantenere l'interesse, è auspicabile raccontare il metodo che ha permesso di raggiungere tale risultato.

I campioni possono essere trasformati in qualsiasi modo, anche cambiando il target, ma è necessario spiegare l'essenza della trasformazione, in modo che non si tratti di un puro adattamento al campione d'esame.

Esiste, ovviamente
 
spiderman8811 #:
Certo che c'è.

Vuole provare a dimostrarlo?

 

L'addestramento di CatBoost, con le impostazioni riportate di seguito, con Seed brute force dà questa distribuzione di probabilità.

FOR %%a IN (*.) DO (                                                                                                                                                                                                                                                                            
catboost-1.0.6.exe fit   --learn-set train.csv   --test-set test.csv     --column-description %%a        --has-header    --delimiter ;   --model-format CatboostBinary,CPP       --train-dir ..\Rezultat\RS_8\result_4_%%a       --depth 6       --iterations 1000       --nan-mode Forbidden    --learning-rate 0.03    --rsm 1         --fold-permutation-block 1      --boosting-type Plain   --l2-leaf-reg 6         --loss-function Logloss         --use-best-model        --eval-metric Logloss   --custom-metric Logloss         --od-type Iter  --od-wait 100   --random-seed 8         --random-strength 1     --auto-class-weights SqrtBalanced       --sampling-frequency PerTreeLevel       --border-count 32       --feature-border-type Median            --bootstrap-type Bayesian       --bagging-temperature 1         --leaf-estimation-method Newton         --leaf-estimation-iterations 10                
catboost-1.0.6.exe fit   --learn-set train.csv   --test-set test.csv     --column-description %%a        --has-header    --delimiter ;   --model-format CatboostBinary,CPP       --train-dir ..\Rezultat\RS_16\result_4_%%a      --depth 6       --iterations 1000       --nan-mode Forbidden    --learning-rate 0.03    --rsm 1         --fold-permutation-block 1      --boosting-type Plain   --l2-leaf-reg 6         --loss-function Logloss         --use-best-model        --eval-metric Logloss   --custom-metric Logloss         --od-type Iter  --od-wait 100   --random-seed 16        --random-strength 1     --auto-class-weights SqrtBalanced       --sampling-frequency PerTreeLevel       --border-count 32       --feature-border-type Median            --bootstrap-type Bayesian       --bagging-temperature 1         --leaf-estimation-method Newton         --leaf-estimation-iterations 10                
catboost-1.0.6.exe fit   --learn-set train.csv   --test-set test.csv     --column-description %%a        --has-header    --delimiter ;   --model-format CatboostBinary,CPP       --train-dir ..\Rezultat\RS_24\result_4_%%a      --depth 6       --iterations 1000       --nan-mode Forbidden    --learning-rate 0.03    --rsm 1         --fold-permutation-block 1      --boosting-type Plain   --l2-leaf-reg 6         --loss-function Logloss         --use-best-model        --eval-metric Logloss   --custom-metric Logloss         --od-type Iter  --od-wait 100   --random-seed 24        --random-strength 1     --auto-class-weights SqrtBalanced       --sampling-frequency PerTreeLevel       --border-count 32       --feature-border-type Median            --bootstrap-type Bayesian       --bagging-temperature 1         --leaf-estimation-method Newton         --leaf-estimation-iterations 10                
catboost-1.0.6.exe fit   --learn-set train.csv   --test-set test.csv     --column-description %%a        --has-header    --delimiter ;   --model-format CatboostBinary,CPP       --train-dir ..\Rezultat\RS_32\result_4_%%a      --depth 6       --iterations 1000       --nan-mode Forbidden    --learning-rate 0.03    --rsm 1         --fold-permutation-block 1      --boosting-type Plain   --l2-leaf-reg 6         --loss-function Logloss         --use-best-model        --eval-metric Logloss   --custom-metric Logloss         --od-type Iter  --od-wait 100   --random-seed 32        --random-strength 1     --auto-class-weights SqrtBalanced       --sampling-frequency PerTreeLevel       --border-count 32       --feature-border-type Median            --bootstrap-type Bayesian       --bagging-temperature 1         --leaf-estimation-method Newton         --leaf-estimation-iterations 10                
catboost-1.0.6.exe fit   --learn-set train.csv   --test-set test.csv     --column-description %%a        --has-header    --delimiter ;   --model-format CatboostBinary,CPP       --train-dir ..\Rezultat\RS_40\result_4_%%a      --depth 6       --iterations 1000       --nan-mode Forbidden    --learning-rate 0.03    --rsm 1         --fold-permutation-block 1      --boosting-type Plain   --l2-leaf-reg 6         --loss-function Logloss         --use-best-model        --eval-metric Logloss   --custom-metric Logloss         --od-type Iter  --od-wait 100   --random-seed 40        --random-strength 1     --auto-class-weights SqrtBalanced       --sampling-frequency PerTreeLevel       --border-count 32       --feature-border-type Median            --bootstrap-type Bayesian       --bagging-temperature 1         --leaf-estimation-method Newton         --leaf-estimation-iterations 10                
catboost-1.0.6.exe fit   --learn-set train.csv   --test-set test.csv     --column-description %%a        --has-header    --delimiter ;   --model-format CatboostBinary,CPP       --train-dir ..\Rezultat\RS_48\result_4_%%a      --depth 6       --iterations 1000       --nan-mode Forbidden    --learning-rate 0.03    --rsm 1         --fold-permutation-block 1      --boosting-type Plain   --l2-leaf-reg 6         --loss-function Logloss         --use-best-model        --eval-metric Logloss   --custom-metric Logloss         --od-type Iter  --od-wait 100   --random-seed 48        --random-strength 1     --auto-class-weights SqrtBalanced       --sampling-frequency PerTreeLevel       --border-count 32       --feature-border-type Median            --bootstrap-type Bayesian       --bagging-temperature 1         --leaf-estimation-method Newton         --leaf-estimation-iterations 10                
catboost-1.0.6.exe fit   --learn-set train.csv   --test-set test.csv     --column-description %%a        --has-header    --delimiter ;   --model-format CatboostBinary,CPP       --train-dir ..\Rezultat\RS_56\result_4_%%a      --depth 6       --iterations 1000       --nan-mode Forbidden    --learning-rate 0.03    --rsm 1         --fold-permutation-block 1      --boosting-type Plain   --l2-leaf-reg 6         --loss-function Logloss         --use-best-model        --eval-metric Logloss   --custom-metric Logloss         --od-type Iter  --od-wait 100   --random-seed 56        --random-strength 1     --auto-class-weights SqrtBalanced       --sampling-frequency PerTreeLevel       --border-count 32       --feature-border-type Median            --bootstrap-type Bayesian       --bagging-temperature 1         --leaf-estimation-method Newton         --leaf-estimation-iterations 10                
catboost-1.0.6.exe fit   --learn-set train.csv   --test-set test.csv     --column-description %%a        --has-header    --delimiter ;   --model-format CatboostBinary,CPP       --train-dir ..\Rezultat\RS_64\result_4_%%a      --depth 6       --iterations 1000       --nan-mode Forbidden    --learning-rate 0.03    --rsm 1         --fold-permutation-block 1      --boosting-type Plain   --l2-leaf-reg 6         --loss-function Logloss         --use-best-model        --eval-metric Logloss   --custom-metric Logloss         --od-type Iter  --od-wait 100   --random-seed 64        --random-strength 1     --auto-class-weights SqrtBalanced       --sampling-frequency PerTreeLevel       --border-count 32       --feature-border-type Median            --bootstrap-type Bayesian       --bagging-temperature 1         --leaf-estimation-method Newton         --leaf-estimation-iterations 10                
catboost-1.0.6.exe fit   --learn-set train.csv   --test-set test.csv     --column-description %%a        --has-header    --delimiter ;   --model-format CatboostBinary,CPP       --train-dir ..\Rezultat\RS_72\result_4_%%a      --depth 6       --iterations 1000       --nan-mode Forbidden    --learning-rate 0.03    --rsm 1         --fold-permutation-block 1      --boosting-type Plain   --l2-leaf-reg 6         --loss-function Logloss         --use-best-model        --eval-metric Logloss   --custom-metric Logloss         --od-type Iter  --od-wait 100   --random-seed 72        --random-strength 1     --auto-class-weights SqrtBalanced       --sampling-frequency PerTreeLevel       --border-count 32       --feature-border-type Median            --bootstrap-type Bayesian       --bagging-temperature 1         --leaf-estimation-method Newton         --leaf-estimation-iterations 10                
catboost-1.0.6.exe fit   --learn-set train.csv   --test-set test.csv     --column-description %%a        --has-header    --delimiter ;   --model-format CatboostBinary,CPP       --train-dir ..\Rezultat\RS_80\result_4_%%a      --depth 6       --iterations 1000       --nan-mode Forbidden    --learning-rate 0.03    --rsm 1         --fold-permutation-block 1      --boosting-type Plain   --l2-leaf-reg 6         --loss-function Logloss         --use-best-model        --eval-metric Logloss   --custom-metric Logloss         --od-type Iter  --od-wait 100   --random-seed 80        --random-strength 1     --auto-class-weights SqrtBalanced       --sampling-frequency PerTreeLevel       --border-count 32       --feature-border-type Median            --bootstrap-type Bayesian       --bagging-temperature 1         --leaf-estimation-method Newton         --leaf-estimation-iterations 10                
)                                                                                                                                                                                                                                                                               

1. Campionamento del treno

2. Test di campionamento

3. Campione d'esame

Come si può notare, il modello preferisce classificare quasi tutto per zero, in modo da ridurre le possibilità di errore.

 

Le ultime 4 colonne

Con classe 0 apparentemente la perdita dovrebbe essere in entrambi i casi? Cioè -0,0007 in entrambi i casi. Oppure, se la scommessa acquisto/vendita viene ancora effettuata, si otterrà un profitto nella giusta direzione?

 
La direzione 1/-1 è selezionata da una logica diversa, cioè il MO non è coinvolto nella selezione della direzione? Dobbiamo solo imparare lo 0/1 per operare/non operare (quando la direzione è rigidamente scelta)?
 
elibrarius #:

Ultime 4 colonne

Con classe 0 apparentemente la perdita dovrebbe essere in entrambi i casi? Cioè -0,0007 in entrambi i casi. Oppure, se la scommessa acquisto/vendita viene ancora effettuata, si otterrà un profitto nella giusta direzione?

Con un grado zero - non entrare nel trade.

Prima utilizzavo 3 target - ecco perché le ultime due colonne con risultati finali invece di uno, ma con CatBoost sono dovuto passare a due target.

elibrarius #:
La direzione 1/-1 è selezionata da una logica diversa, cioè il MO non è coinvolto nella selezione della direzione? Devi solo imparare il trade/no trade 0/1 (quando la direzione è rigidamente scelta)?

Sì, il modello decide solo se entrare o meno. Tuttavia, nell'ambito di questo esperimento non è vietato imparare un modello con tre obiettivi, a tal fine è sufficiente trasformare l'obiettivo tenendo conto della direzione di entrata.

 
Aleksey Vyazmikin #:

Se la classe è zero, non inserire la transazione.

Prima utilizzavo 3 obiettivi, per cui le ultime due colonne con il risultato finanziario sono una sola, ma con CatBoost ho dovuto passare a due obiettivi.

Sì, il modello decide solo se entrare o meno. Tuttavia, nell'ambito di questo esperimento non è vietato insegnare al modello tre target, a tal fine è sufficiente trasformare il target tenendo conto della direzione di entrata.

Cioè, se a classe 0 (non entrare) viene scelta la direzione corretta dell'operazione, si otterrà un profitto o no?
 
Aleksey Vyazmikin #:

Se la classe è zero, non inserire la transazione.

Prima utilizzavo 3 obiettivi, per cui le ultime due colonne con il risultato finanziario sono una sola, ma con CatBoost ho dovuto passare a due obiettivi.

Sì, il modello decide solo se entrare o meno. Tuttavia, nell'ambito di questo esperimento non è vietato insegnare al modello tre target, a tal fine è sufficiente trasformare il target tenendo conto della direzione di entrata.

Catbusta ha una multiclasse, è strano abbandonare le 3 classi.

 
elibrarius #:
Cioè, se a classe 0 (non entrare) verrà scelta la direzione corretta della transazione, ci sarà un profitto o no?

Non ci sarà alcun profitto (se si effettua una rivalutazione, ci sarà una piccola percentuale di profitto a zero).

È possibile rifare il target correttamente solo spezzando "1" in "-1" e "1", altrimenti è una strategia diversa.

elibrarius #:

Catbusta ha la multiclasse, è strano che abbiano abbandonato 3 classi

C'è, ma non c'è integrazione in MQL5.

Non c'è alcuno scarico del modello in nessun linguaggio.

Probabilmente è possibile aggiungere una libreria dll, ma non riesco a capirlo da solo.

 
Aleksey Vyazmikin #:

Non ci sarà alcun profitto (se si fa una rivalutazione ci sarà una piccola percentuale di profitto a zero).

Allora le colonne dei risultati finanziari hanno poco senso. Ci saranno anche errori di previsione di classe 0 (invece di 0 si prevede 1). E il prezzo dell'errore è sconosciuto. Cioè, la linea di equilibrio non sarà costruita. Soprattutto perché si ha il 70% di classe 0. Cioè il 70% degli errori con un risultato finanziario sconosciuto.
Potete dimenticarvi dei 3000 punti. Se così fosse, sarebbe inaffidabile.

Cioè non ha senso risolvere il problema....
Motivazione: