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

 
Ну чтож. Неделя у меня началась ещё до открытия рынка, активно тестирую версию 14. Хочется сказать следующее. Чем дольше тренирует, тем больше входов задействовано в ТС. Больше предиктов. Максимально у меня было до 8-9 входов. Однако обобщающая способность при этом как правило не высока. Да и работают такие ТС с натяжкой. Тоесть еле дотягивают до оценки 3. А вот предикты с 4-6 входями, работают в целом удовлетворительно. Увеличил число записей с 50 до 150. Дык вот уже третий час тренирует. Но думаю что входов в этот раз будет тоже не мало. Так что посмотрим......
 
Ну и опять заметил такую фигню. Дело в том что у меня идёт набор данных, пердиктов 12 и потом идут их же лаги, лаг1 и лаг2. Раньше входы были в основном в начале набора, тоесть лагов было мало и то не более лага1, редко когда был лаг2. Сейчас наобород, первые данные вообще практически не используются , а вот лагг1 и что самое прескорбное лаг2 стали появлятся чаще. я понимаю что выборка переполнена данными,. Но факт, раньше обобщение шло на начальных столбцах преимущественно, сейчас на конечных.... практически, так что делаем выводы....
 
Mihail Marchukajtes:
Ну и опять заметил такую фигню. Дело в том что у меня идёт набор данных, пердиктов 12 и потом идут их же лаги, лаг1 и лаг2. Раньше входы были в основном в начале набора, тоесть лагов было мало и то не более лага1, редко когда был лаг2. Сейчас наобород, первые данные вообще практически не используются , а вот лагг1 и что самое прескорбное лаг2 стали появлятся чаще. я понимаю что выборка переполнена данными,. Но факт, раньше обобщение шло на начальных столбцах преимущественно, сейчас на конечных.... практически, так что делаем выводы....

Значит тебе нужно откатиться к прежним версиям.

У меня полёт нормальный. Может быть потому, что лаги в выборке отсутствуют?

 
Dr.Trader:

Вообще хорошо выглядит, интересно что получится в конце.

 

Насчёт комитета - я какие-то примеры выкладывал, но есть модели которые при классификации используют регрессию с округлением, и там не всё так однозначно. Я пробовал два разных способа объединения голосов:

1) округлить всё к классам, взять тот класс за который будет больше голосов.
Т.е. имея прогноз на 4 бара от трёх моделей
c(0.1, 0.5, 0.4, 0.4)   c(0.6, 0.5, 0.7, 0.1)   c(0.1, 0.2, 0.5, 0.7)   я дальше округлил бы это к классам
c(0, 1, 0, 0)       c(1,1,1,0)     c(0,0,1,1) , и финальный вектор с прогнозами был бы   c(0, 1, 1, 0) по количеству голосов.

2) другой вариант, это сразу найти средний результат, и только потом округлить его к классам
результат будет c((0.1+0.6+0.1)/3, (0.5+0.5+0.2)/3, (0.4+0.7+0.5)/3, (0.4+0.1+0.7)/3)
или (0.2666667, 0.4000000, 0.5333333, 0.4000000), или
c(0, 0, 1, 0)

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

Пакет tsDyn функция SETAR

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

Также не будем забывать об алгоритмах калибровки в классификации. Дело в том, что предсказание класса в реальности не является номинальной величиной, алгоритм вычисляет вероятность класса, которая является действительным числом. Потом эта вероятность делится например пополам и получается два класса. А если вероятности 0.49 и 051 , то это два класса? А 0.48 и 052? Это деление на классы? Вот здесь бы разделить по SETAR на два класса, между которыми будет решетовские "на заборе".  

 
Dr.Trader:

Вообще хорошо выглядит, интересно что получится в конце.

 

Насчёт комитета - я какие-то примеры выкладывал, но есть модели которые при классификации используют регрессию с округлением, и там не всё так однозначно. Я пробовал два разных способа объединения голосов:

1) округлить всё к классам, взять тот класс за который будет больше голосов.
Т.е. имея прогноз на 4 бара от трёх моделей
c(0.1, 0.5, 0.4, 0.4)   c(0.6, 0.5, 0.7, 0.1)   c(0.1, 0.2, 0.5, 0.7)   я дальше округлил бы это к классам
c(0, 1, 0, 0)       c(1,1,1,0)     c(0,0,1,1) , и финальный вектор с прогнозами был бы   c(0, 1, 1, 0) по количеству голосов.

2) другой вариант, это сразу найти средний результат, и только потом округлить его к классам
результат будет c((0.1+0.6+0.1)/3, (0.5+0.5+0.2)/3, (0.4+0.7+0.5)/3, (0.4+0.1+0.7)/3)
или (0.2666667, 0.4000000, 0.5333333, 0.4000000), или
c(0, 0, 1, 0)

Видно что результат разный, и зависит от того на каком шаге округлять. Не знаю что из этого стандартней, но мне кажется второй способ лучше работает на новых данных.
Это пара gbpusd. А значит модель ждет проверки Брекзитом. я даже данные за последний год еще не обработал.... Может быть слив...

В зависимости от результата финального теста я задам тон статьи. Всегда небольшой сюрприз увидеть, что модель работает и норма - увидеть, что сливает.

Я комитет собраю следующим образом:

 строю n векторов предсказаний типа numeric по количеству моделей на данных обучения (регрессия приращения цены).

Усредняю отклик по выбранным моделям.

Считаю квантили 0.05 и 0.95.

На валидации повторяю шаги 1 и 2. 

Отбираю только те примеры, где среднее выходит за рамки квантилей.

Умножаю отклик на знак предсказания, вычитаю спред.

На полученном векторе строю m подвыборки со случайным включением из расчета 1-4 сделки в день в зависимости от горизонта прогноза.

Комитет уже показал троекратное увеличение МО по сравнению с работой одиночных моделей. Потому что модели разнообразны...

 
Как из данных вычленить некие группы данных по условию
Как из данных вычленить некие группы данных по условию
  • ru.stackoverflow.com
нужно найти такие строчки которые повторяются не менее 10 раз в всей выборке и в каждой из найденных одинаковых групок которые повторялись, количество "1" в target.label должно превышать 70% по отношению к "0" вот найденные одинаковые строчки единичек больше чем нулей...
 

Я здесь тогда отвечу.

#пара строк из той таблицы, не буду я всё текстом копировать, потом первая строка повторена ещё дважды
dat <- data.frame(cluster1=c(24,2,13,23,6), cluster2=c(5,15,13,28,12), cluster3=c(18,12,16,22,20), cluster4=c(21,7,29,10,25), cluster5=c(16,22,24,4,11), target.label=c(1,1,0,1,0))
dat <- rbind(dat, dat[1,], dat[1,])
#результат последней строки поменян на 0 для эксперимента
dat[7,"target.label"]=0

library(sqldf)
#для sqldf точек в названиях колонок быть не должно
colnames(dat)[6] <- "target"

dat1 <- sqldf( "select cluster1, cluster2, cluster3, cluster4, cluster5, avg(target) as target_avg, count(target) as target_count from dat group by cluster1, cluster2, cluster3, cluster4, cluster5" )
dat1
dat1[ dat1$target_count>=10 & dat1$target_avg>0.63 , ]
dat1[ dat1$target_count>=10 & ( dat1$target_avg<0.37 | dat1$target_avg>0.63 ), ] #на случай если оба "0" или "1" встречаются чаще 70%
 
СанСаныч Фоменко:

Пакет tsDyn функция SETAR

SETAR относится именно к калибровке комитетов, или это отдельная тема для создания финансовых моделей?

Я пролистал мануал по пакету, не увидел что мне нужно... Есть такая ситуация: имеется обучающая таблица с 10000 примерами. И 100 моделей, обученных на этих примерах. Для проверки моделей ими можно предсказать те же исходные данные,  и получится 100 векторов, в каждом по 10000 предсказаний. SETAR можно применить чтоб как-то объеденить все эти 100 векторов в один? 
И потом, для прогноза на новых данных будет опять 100 предсказаний, и нужно объеденить их в одно (будет не 100 векторов, а просто 100 одиночных предсказаний). Это SETAR тоже сможет, используя параметры комитета полученные на тренировочных данных? 

 
Dr.Trader:

SETAR относится именно к калибровке комитетов, или это отдельная тема для создания финансовых моделей?

Я пролистал мануал по пакету, не увидел что мне нужно... Есть такая ситуация: имеется обучающая таблица с 10000 примерами. И 100 моделей, обученных на этих примерах. Для проверки моделей ими можно предсказать те же исходные данные,  и получится 100 векторов, в каждом по 10000 предсказаний. SETAR можно применить чтоб как-то объеденить все эти 100 векторов в один? 
И потом, для прогноза на новых данных будет опять 100 предсказаний, и нужно объеденить их в одно (будет не 100 векторов, а просто 100 одиночных предсказаний). Это SETAR тоже сможет, используя параметры комитета полученные на тренировочных данных? 

Как я понимаю, не имеет отношения к комитетам
 
Yury Reshetov:

Значит тебе нужно откатиться к прежним версиям.

У меня полёт нормальный. Может быть потому, что лаги в выборке отсутствуют?

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