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

 
JeeyCi #:

нет - речь о том, чтобы generalize (обобщать)... да, неверно, выразилать... sorry

думаю, выделять risk-on/risk-off environment -- пока думаю по каким признакам обобщать такое разделение... вся в своих мыслях (на форуме случайно)...

спасибо за ответ!

попробуйте, в катбусте куча разных фичей, мне понравилось

есть ранний останов на основании ошибки на валидационной выборке, дообучение. Генерализация не хуже чем у НС, к которым к тому же свои функции приходится писать для остановки обучения

и учится быстро, не надо часами ждать

 
может ли случайный лес найти максимум в строке данных, те симитировать функцию мах() ?

Те просто интересно, может ли МО имитировать притивные функции из ЯП

есть матрица, каждая строка  матрицы это обучающий пример

head(X)
     [,1] [,2] [,3] [,4] [,5]
[1,]    2    4    1    3    1
[2,]    3    1    4    5    3
[3,]    1    2    4    4    1
[4,]    1    1    5    3    5
[5,]    3    4    1    3    3
[6,]    4    4    5    1    2

нужно найти максимум каждой строки, размер выборки 20к строк


решаю задачу через регресию

 pred actual
1  4.967619      5
2  4.996474      5
3  4.127626      4
4  4.887233      5
5  5.000000      5
6  4.881568      5
7  4.028334      4
8  4.992406      5
9  3.974674      4
10 4.899804      5
11 4.992406      5

округляю для наглядности

 pred actual
1     5      5
2     5      5
3     4      4
4     5      5
5     5      5
6     5      5
7     4      4
8     5      5
9     4      4
10    5      5
11    5      5

довольно не плохо, на тесте из 50 новых строк всего несколько ошибок


Но данные то в матрице Х очень просты, всего 5 уникальных значений от 1 до 5 и колонок то всего 5 , а уже ошибки .

Хотя думаю если делать классификацию то ошибок бы не было , кстати можно проверить

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

Так что вернемся к регресии и усложним данные

head(X)
      [,1]  [,2]  [,3]  [,4]  [,5]
[1,]  0.93 -2.37 -0.35  0.16 -0.11
[2,] -0.53  0.19 -0.42  1.35 -0.16
[3,]  1.81  0.19 -0.68  0.31 -0.05
[4,]  0.08 -1.43  0.15 -0.96  0.43
[5,]  0.40  1.36  1.17 -0.99 -0.18
[6,] -2.19 -0.65  0.42 -1.12  1.46

получаем такой результат

  pred actual
1   1.75   1.78
2   1.33   1.31
3   1.67   1.69
4   1.15   1.16
5   0.51   0.41
6   1.00   0.99
7   0.80   0.78
8   1.75   1.76
9   0.35   0.36
10  1.78   1.79
11  2.02   2.13
12  1.26   1.21
13  1.60   1.57
14  0.19   0.06

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

Кстати интересно, как сработают другие модели, смогут ли они возсоздать  функцию мах() без ошибки

 
mytarmailS #:
Я помню, но это ошибка подгонки, Тоесть трейн выборка...
А какова ошибка той следующей свечи, те тест

Это ошибка на следующих 300 бар. На каждом баре формировались предикторы, затем фильтровались, обучалась модель и делалось предсказание следующего бара.

 
Maxim Dmitrievsky #:
Ну в этом есть определенный смысл, потому что зачастую модели долго не живут. Но хотелось бы найти варианты без переобучения постоянного, хотя бы на интервале год +, с медленной деградацией модели, которую легко отследить

Не могу с этим согласиться.

Рынок меняется, причем временные интервалы изменения разные и независимые друг от друга.

Я когда-то умел писать советники, которые жили от 3 до 6 месяцев. Оптимизировал в выходные. Потом они умирали, причем в течение короткого времени вполне достаточного для слива депозита. Нго недостаточного для оптимизации. В конечном итоге положение было еще хуже: через некоторое время выяснялось, что была граница, отодвинувшись от которой невозможно было подобрать параметры. 

Есть более длительные периоды изменения рынка: 5-7 лет. Но результат такой же как и для месячных периодов. Бот умирает навсегда. В личку отправлю конкретный бот из маркета - тут нельзя.

Поэтому вся эта иде "вне выборки" - чушь собачья. Бот все равно имеет время жизни, мы не знаем сколько: 3 мес или 7 лет. Смерь бота путаем с очередной просадкой и сливаем депо.

В идеале переучивать по следующей свече. Если работаем на тиках, то на следующем тике, на Н1 то по приходу следующего часа.

 
Valeriy Yastremskiy #:

Не спорю с обучением на каждом баре, и может быть даже на не стационарном тике например. Не понимаю структуру обучения тогда полностью. Логика советника это отдельное обучение или часть обучения на каждом баре? Это как бы хвосты первого обучения, сколько хвостов, или этапов обучения? 

На каждом баре все по-новому

 
Maxim Dmitrievsky #:

Есть еще деревянные модели для causal inference, не успел разобраться

из практики, много трактовок:

- среда влияет на испытуемого (когда в лаб. условиях всё коррелирует, в естеств. усл-ях проявляются др. неучтённые зависимости - самый банальный - человеческий фактор или же crowding effect) - RL лучше ML, но тоже моделировать надо и не всё можно учесть...
- когда о 2х коррелирующих величинах можно лишь выдвинуть inference (предположение), что от чего зависит, а не наоборот (результат от фактора или фактор от результата)
- mediation, moderation, interaction вклинивающиеся в процесс зависимости (часто которые даже нельзя проследить экспериментальным путём)
- вообще, важно планирование эксперимента (полезно уметь рисовать графы зависимостей, именно логических, теоретических), чтобы спланировать эксперимент, результаты которого уже обработать ML'ом или ещё проще ...
т.е. в какой последовательности и какие факторы фиксировать, чтобы получать условное распределение по исследуемому фактору, или совместному влиянию 2х исследуемых факторов, сравнить полученные результаты с безусловным распределением - выдвинуть гипотезу "лучше - нелучше", "влияет-не_влияет",подтвердить либо опровергнуть статистически, перенести на испытания в полевые условия... и нарваться на новый causal inference))

а в ML RF - не знаю, как они делают это, обрабатывая корреляционные матрицы -  (особенно вызывает вопросы п.2)

многие критикуют probabilistic models как раз по причине п.2 и начинают превозносить causal inference, заявляя, что они учли влияние иных факторов... но алгоритмически как решается вопрос (! ещё одно слово синоним - reasoning) аппаратом ВМ - неизветно (по крайней мере мне) - я бы сказала "никак"

для меня causal inference - это по сути reasoning, а исследование mediation, moderation, interaction - это отдельная большая тема и дело вкуса (т.е. набросать тот или иной граф, построенный логически) - тоже своего рода Design (эксперимента)

просто имея в рынке 1 ВР - особо гипотезу о зависимостях не проверишь... а при разумной постановке эксперимента и одного OLS или ANOVA хватит (но уж фичи выделять точно не придётся)

?? ... так что алгоритм отнесения feature к фактору или к результату (деревянными моделями или хоть чем) я не знаю, кроме логики и теоретических знаний... но у нас же сейчас, что только не пиарят под др. словами -- я не знаю в каком контексте вам встречался causal inference

 
JeeyCi #:

из практики, много трактовок:
- среда влияет на испытуемого (когда в лаб. условиях всё коррелирует, в естеств. усл-ях проявляются др. неучтённые зависимости - самый банальный - человеческий фактор или же crowding effect) - RL лучше ML, но тоже моделировать надо и не всё можно учесть...
- когда о 2х коррелирующих величинах можно лишь выдвинуть inference (предположение), что от чего зависит, а не наоборот (результат от фактора или фактор от результата)
- mediation, moderation, interaction вклинивающиеся в процесс зависимости (часто которые даже нельзя проследить экспериментальным путём)
- вообще, важно планирование эксперимента (полезно уметь рисовать графы зависимостей, именно логических, теоретических), чтобы спланировать эксперимент, результаты которого уже обработать ML'ом...
т.е. в какой последовательности и какие факторы фиксировать, чтобы получать условное распределение по исследуемому фактору, или совместному влиянию 2х исследуемых факторов, сравнить полученные результаты с безусловным распределением - выдвинуть гипотезу "лучше - нелучше", подтвердить либо опровергнуть статистически, перенести на испытания в полевые условия... и нарваться на новый causal inference)

а в ML RF - не знаю, как они делают это, обрабатывая корреляционные матрицы -  (особенно вызывает вопросы п.2)

многие критикуют probabilistic models как раз по причине п.2 и начинают превозносить causal inference, заявляя, что они учли влияние иных факторов... но алгоритмически как решается вопрос (! ещё одно слово синоним - reasoning) аппаратом ВМ - неизветно (по крайней мере мне) - я бы сказала "никак"

для меня causal inference - это по сути reasoning, а исследование mediation, moderation, interaction - это отдельная большая тема и дело вкуса (т.е. набросать тот или иной граф, построенный логически) - тоже своего рода Design (эксперимента)

просто имея в рынке 1 ВР - особо гипотезу о зависимостях не проверишь... а при разумной постановке эксперимента и одного OLS или LDA хватит (но уж фичи выделять точно не придётся)

?? ... так что алгоритм отнесения feature к фактору или к результату (деревянными моделями или хоть чем) я не знаю, кроме логики и теоретических знаний... но у нас же сейчас, что только не пиарят под др. словами -- я не знаю в каком контексте вам встречался causal inference

Какая-то либа от Uber попалась на глаза, типа они улучшили свои процессы

ну и общая трактовка, что correlation != causation и попытки ее решить разными способами, начиная с A/B, но я в этом не шарю

у них какие-то странные определения, без бутылки не разберешься, придется забивать голову лишними словами

Causal Inference from Observational Data, или как провести А/В-тест без А/В-теста.
Causal Inference from Observational Data, или как провести А/В-тест без А/В-теста.
  • Stats&Data ninja
  • koch-kir.medium.com
Привет дата-ниндзя👋! Первый вопрос, который ты задашь — зачем вообще это нужно ❗️❓ Предположим, ты исследуешь причинно-следственную связь между двумя величинами (Y зависит от X). И тогда, изменяя X, мы можем быть уверены что изменяем Y, причем уверены мы не только в самом факте изменения, но и в его направлении и величине (magnitude). Конечно...
 
mytarmailS #:

Кстати интересно, как сработают другие модели, смогут ли они возсоздать  функцию мах() без ошибки

Бегло потренировал разные модели без всякого тюнинга ГП

1 0.002392       форест
3 0.005348 екстр. буст.
4 0.024160     нейронка
2 0.037200         МГУА

вывод: модели не могут возсоздать функцию, только апроксимировать с какой то точностью , так что создание признаков и отбор признаков пока актульны

set.seed(125)
dat <- round(rnorm(100000),2)
X <- matrix(dat,ncol = 5)
Y <- apply(X,1,max)
colnames(X) <- paste0("x",1:5)

tr <- 1:19950
ts <- 19951:20000

#///////////////

library(randomForest)
rf <- randomForest(Y[tr]~.,X[tr,],ntree=100)
pr <- predict(rf,X[ts,])

cb <- round(  cbind(pred=pr,actual=Y[ts])  ,2)
matplot(cb,t="l",col=c(1,2),lty=1,lwd=c(3,1),main="RF regresion")
rf_MSE <- mean((cb[,1] - cb[,2])^2)  # rf MSE 0.002392

#///////////////

library(GMDHreg)
gmdh <- gmdh.mia(X = X[1:10000,],
                 y = Y[1:10000],
                 x.test = X[10000:19951,] ,
                 y.test = Y[10000:19951], prune = 25,criteria = "test")
pr <- predict(gmdh,X[ts,])

cb <- round(  cbind(pred=pr,actual=Y[ts])  ,2)
matplot(cb,t="l",col=c(1,2),lty=1,lwd=c(3,1),main="gmdh regresion")
gmdh_MSE <- mean((cb[,1] - cb[,2])^2)  # gmdh MSE 0.038692

#///////////////

library(xgboost)
xgb_train = xgb.DMatrix(data = X[1:10000,], label = Y[1:10000])
xgb_test =  xgb.DMatrix(data = X[10000:19951,], label = Y[10000:19951])

watchlist = list(train=xgb_train, test=xgb_test)
xgb = xgb.train(data = xgb_train, max.depth = 3, watchlist=watchlist, nrounds = 1750)

pr <- predict(xgb,X[ts,])
cb <- round(  cbind(pred=pr,actual=Y[ts])  ,2)
matplot(cb,t="l",col=c(1,2),lty=1,lwd=c(3,1),main="xgb regresion")
xgb_MSE <- mean((cb[,1] - cb[,2])^2)  # xgb MSE 0.005348

#///////////////

library(automl)
nn <- automl_train(Xref = X[tr,], Yref = Y[tr],
                   autopar = list(numiterations = 10,
                                  psopartpopsize = 10),
                   hpar = list(numiterations = 10))

pr <- automl::automl_predict(nn,X[ts,])

cb <- round(  cbind(pred=pr,actual=Y[ts])  ,2)
matplot(cb,t="l",col=c(1,2),lty=1,lwd=c(3,1),main="nn regresion")
nn_MSE <- mean((cb[,1] - cb[,2])^2)  # nn MSE 0.023828

#///////////////

res <- c(rf_MSE , gmdh_MSE , xgb_MSE , nn_MSE)
nms <- c("форест","МГУА","екстр. буст.","нейронка")
m <- cbind.data.frame(res,nms)
m <- m[order(m$res),]
m
barplot(m$res,names.arg = m$nms)
 
СанСаныч Фоменко #:

Это ошибка на следующих 300 бар. На каждом баре формировались предикторы, затем фильтровались, обучалась модель и делалось предсказание следующего бара.

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

Скорей тут путаница в понятиях/пониманиях что есть тест выборка, и из за этого говорим о разном называя это одинаково

 
Aleksey Vyazmikin #:

Немного разгрузилась очередь заданий - появилась возможность запустить скрипт. Запускаю и получаю ошибку.

Я правильно понимаю, что программа хочет старую версию R 4.0?

Ну в общем я поискал старую версию и не нашел. Ужасная несовместимость отталкивает конечно.

Неправильно. Если пакет собран под другую версию, будет предупреждение. О какой несовместимости идет речь?

randomForest v.4.7-1.1 никуда не девалась и в кран. R 4.1.3