Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 2130

 
elibrarius:

Вообще получается, что деревянным моделям надо подавать много входов, которые предварительно максимально поделены, т.е. имеют минимальное количество возможных собственных делений.

Баланс - T1 с минутами и T2 без минут -  средний результат: 3384/3126/3890

Recall - средний результат: 0,0459/0,0424/0,0458


Precision - средний результат: 0,5216/0,5318/0,5389

По средним показателям в совокупности T2 худший вариант получился.

Открыл таблицу по значимости предикторов и тут удивился



Как то не понравились методу обучения последние изменения, может я не правильно что сделал?

//день недели, час = ввести через 2 предиктора sin и cos угла от полного цикла 360/7,  360/24
   double tmp[4];
   int nInd=0;
   MqlDateTime dts;
   double pi=3.1415926535897932384626433832795;
   for(int buf=0; buf<2; buf++)
   {
      TimeToStruct(iTime(Symbol(),PERIOD_CURRENT,0),dts);
      //tmp[buf]=(double)(dts.hour*60+dts.min)*360.0/1440.0;
      tmp[buf]=(double)(dts.hour*60+dts.min)*360.0/24.0;
      tmp[buf]=(buf==0?MathSin(tmp[0]*pi/180.0):MathCos(tmp[0]*pi/180.0));

      TimeToStruct(iTime(Symbol(),PERIOD_CURRENT,0),dts);
      //tmp[buf+2]=(double)(dts.day_of_week*1440+dts.hour*60+dts.min)*360.0/10080.0;
      tmp[buf+2]=(double)dts.day_of_week*360.0/7.0;
      tmp[buf+2]=(buf==0?MathSin(tmp[0]*pi/180.0):MathCos(tmp[0]*pi/180.0));
   }


 Открыл выборку



И увидел, что в столбце TimeHG - стоят часы - ошибка моя - надо переделывать все тесты.


 
Aleksey Vyazmikin:

Баланс - T1 с минутами и T2 без минут -  средний результат: 3384/3126/3890

Recall - средний результат: 0,0459/0,0424/0,0458


Precision - средний результат: 0,5216/0,5318/0,5389

По средним показателям в совокупности T2 худший вариант получился.

Открыл таблицу по значимости предикторов и тут удивился



Как то не понравились методу обучения последние изменения, может я не правильно что сделал?


 Открыл выборку



И увидел, что в столбце TimeHG - стоят часы - ошибка моя - надо переделывать все тесты.


И часы остались с минутами

 tmp[buf]=(double)(dts.hour*60+dts.min)*360.0/24.0;

Надо так

 tmp[buf]=(double)(dts.hour)*360.0/24.0;
TimeHG - видимо на себя все взял, потому остальные часы и не использовались.
 
elibrarius:

И часы остались с минутами

Надо так

Хорошо.

 

Обучение 3 месяца - чисто ради прикола попробовал - обучение в самом начале. Весь график 2014-2020.

Если брать период большой, то получается посредственная модель. При этом можно брать разные периоды размером 3 месяца на всем периоде.

Вот к примеру, виден период обучения - до и после динамика положительная.


Текущий фьючерс

Мат ожидание показывает 6,15 на реальных тиках.

Взял модельку поновей


Интересно, что они отличаются, а это дает потенциал для объединения их в комитет. Тут мат ожидание 12,64.

Ниже гистограмма с расчетным показателем баланса, в том числе и обучающая выборка, в зависимости от номера окна обучение - чем больше номер, тем ближе к нашему времени, напомню, что выборка с 2014 по октябрь 2020 года.

Интересно, что в некоторых местах прибыль падает почти в два раза от максимального значения. Что это может значить - более шумные участки на обучении?

 
elibrarius:

И часы остались с минутами

Надо так

TimeHG - видимо на себя все взял, потому остальные часы и не использовались.

Баланс - T1 с минутами и T2 без минут -  средний результат: 4209,70/2882,50/3889,90


Recall - средний результат: 0,0479/0,0391/0,0458


Precision - средний результат: 0,5318/0,5168/0,5389

Важность предикторов



По средним показателям вариант без минут (T2) сливается.

 
Aleksey Vyazmikin:

Баланс - T1 с минутами и T2 без минут -  средний результат: 4209,70/2882,50/3889,90


Recall - средний результат: 0,0479/0,0391/0,0458


Precision - средний результат: 0,5318/0,5168/0,5389

Важность предикторов



По средним показателям вариант без минут (T2) сливается.

Вывод какой?
Минуты дают прирост.
Насчет того что лучше, не понял - время в виде синуса и косинуса или просто в виде номеров дня, часа, минут?
 
elibrarius:
Вывод какой?
Минуты дают прирост.
Насчет того что лучше - время в виде синуса и косинуса или просто в виде номеров дня, часа, минут?

Пока можно сделать вывод о том, что T2 - вариант явно хуже, и что добавление синуса и косинуса не тождественно линейному времени. Думаю, что результаты разные из за представления чисел, а именно из-за расстояния между ними. Разное расстояние влияет на формирование сетки кластеризации - отсюда и расхождения.

 
Aleksey Vyazmikin:

Пока можно сделать вывод о том, что T2 - вариант явно хуже, и что добавление синуса и косинуса не тождественно линейному времени. Думаю, что результаты разные из за представления чисел, а именно из-за расстояния между ними. Разное расстояние влияет на формирование сетки кластеризации - отсюда и расхождения.

Теоретически - должно быть одинаково для дерева.
Количество разных вариантов  в днях, часах и минутах равно количеству вариантов в синусах и косинусах. И там и там в 7-и днях 10080 разных значений, со сменой раз в минуту.
Если какая то рандомизация при обучении есть, то возможно из за этого отличия.

Чем обучали, катбустом?

Для НС синус и косинус конечно лучше, т.к. 59 и 1 минута будут рядом, при номерном представлении они максимально далеко. Дереву, чтобы это понять надо пару лишних сплитов сделать, возможно этого ему и не хватает при ограничениях по глубине.

 

Я вот думаю провести "полный поиск" закономерностей, те без целевой в привычном виде  типа  - "что будет на следующей свече" и им подобных ...

Поиск заключается в том что буду искать просто закономерности, те целевая это найти закономерность , а не  "что будет на следующей свече", также закономерности могут быть растянуты во времени , например если сегодня было "событие 1" а  потом    "событие 2" , а потом  "событие 3" то завтра в 14:05 будет растущая свеча , что то типа такого))

Я уже более менее представляю как это должно выглядеть, и какой алгоритм применить , но потребуются вычислительные мощностя наверное, которых нету(


  Кстати такой вопрос, сколько надо повторений какого то события чтобы считать его закономерностью ? 

 
elibrarius:

Теоретически - должно быть одинаково.
Количество разных вариантов  в днях, часах и минутах равно количеству вариантов в синусах и косинусах. И там и там в 7-и днях 10080 разных значений, со сменой раз в минуту.
Если какая то рандомизация при обучении есть, то возможно из за этого отличия.

Чем обучали, катбустом?

Эксперименты всегда важней.

Вот смотрите на первый предиктор T1 (Den_Nedeli_S), а точней на его сетку

T2


И дни недели без преобразования времени

Видите, сетки разные, между цифрами разные дельты, хотя настройки разбивки и одинаковы:

catboost-0.24.1.exe fit  --learn-set train.csv   --test-set test.csv     --column-description %%a        --has-header    --delimiter ;   --model-format CatboostBinary,CPP       --train-dir ..\Rezultat\RS_208\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 0         --random-strength 1     --auto-class-weights SqrtBalanced       --sampling-frequency PerTreeLevel       --border-count 208      --feature-border-type MinEntropy        --output-borders-file quant_4_00208.csv         --bootstrap-type Bayesian       --bagging-temperature 1         --leaf-estimation-method Newton         --leaf-estimation-iterations 10        

А это значит, что можно точней подобрать сплит, что может привести или к подгонке или к улучшению результата...

Причина обращения: