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

 
Dmytryi Voitukhov #:

Может будет полезно... у меня  many-to-many без рекуррентности. И без сверточных слоев. И выбрал эту модель после разбора механизма нейронки.  Мы ж тут ищем общий знаменатель?... Аргументируйте.

Не понял что нужно аргументировать
 
Aleksey Nikolayev #:

Спасибо, посмотрю.

Всё же, у нас порядок имеет значение. Всегда, к примеру, можно получить СБ перемешав произвольным образом приращения.

Ещё вспомнилось, что вроде бы вы здесь когда-то писали про sequential pattern mining и возникающую там задачу выравнивания последовательностей. Это тоже похоже на один из методов решения проблемы. Хотя, принадлежность последовательностей к одному классу не обязательно означает их схожесть.

apriori_cspade <- function(apri_supp=0.1,arpi_conf=0.1, liS , 
                             maxgap=NULL, maxlen=5,rhs=NULL,
                             apri_maxlen=2,apri_minlen=2,verbose=T,
                             redundant.rules = F, cspade_supp=0.5 , cspade_conf=0.5){
    
    
    
    library(arules)
    
    
    targ <- NULL
    if(!is.null(rhs))  {
      targ <- list(rhs=rhs, default="lhs")
      apri  <- apriori(liS, parameter=list(support=apri_supp, 
                                          confidence=arpi_conf,
                                          minlen=apri_minlen,
                                          maxlen=apri_maxlen), 
                                          appearance = targ,
                             control = list(verbose=verbose))
    }
   
    
    if(is.null(rhs)){
      apri <- apriori(liS, parameter=list(support=apri_supp, 
                                          confidence=arpi_conf, 
                                          target="rules",
                                          minlen=apri_minlen,
                                          maxlen=apri_maxlen),
                              control = list(verbose=verbose))
    }
    
    ar <- as(apri,"data.frame")
    ar <- as.character(ar$rules)
    ar <- gsub("[{}>]","" ,ar)
    ar <- unlist(stringr::str_split(ar ,pattern = "="))
    ar <- ar[!duplicated(ar)]
    ar <- stringr::str_trim(ar)
    for(i in 1:length(liS))   liS[[i]] <-  liS[[i]]  [ liS[[i]]  %in% ar ]
    
    
    
    liS <- liS[  unlist(lapply(liS ,function(x) length(x)>2 ))  ]
    
    
    if(  length(liS) <= 0 ) return(NULL)
    
    
    
    
    
    library(arulesSequences)
    cspade.form <- as.data.frame(matrix(ncol = 4,nrow = 0))
    for(i in 1:length(liS)){
      
      Q <- liS[[i]]
      cspade.form <- rbind(cspade.form,
                           cbind.data.frame( ID = rep(i,length(Q)),
                                             evID = 1:length(Q),
                                             SIZE = rep(1,length(Q)),
                                             ITEM = Q))}
    
    
    write.table(cspade.form , file = "D:\\R2\\arulesSeq\\seq\\temp.txt",
                append = F,sep = ",",row.names = F,col.names = F)
    
    x <- read_baskets(con = "D:\\R2\\arulesSeq\\seq\\temp.txt",sep = ",",
                      info = c("sequenceID","eventID","SIZE"))
    
    mod <- cspade(x, parameter=list(support = cspade_supp,
                                    maxlen = maxlen,
                                    maxgap=maxgap),
                                  control=list(verbose = verbose))
    gc(reset = T,verbose = F)
    
    rules <- ruleInduction(mod, confidence = cspade_conf, control=list(verbose = verbose))
    if(redundant.rules) rules <- rules[!is.redundant(rules)]
    
    final <- as(rules,"data.frame")
    
    # parse rules
    R <- final$rule
    R <- gsub( "[\"<>{}]","",R)
    R <- stringr::str_split(gsub("=",",",R) , pattern = ",")
    R <- lapply(R,trimws)
    
    li <- list(rules=final, parse.rules=R)
    
    return(li)}

data

set.seed(123)
>  li <- list()
>  for(i in 1:100){
+    li <- append(li,  
+                 list(c(letters[sample(1:10,sample(5:10,1))] ,   sample(c("buy","sell"),1)))
+    )}
>  
>  head(li)
[[1]]
[1] "c"    "b"    "f"    "j"    "e"    "d"    "i"    "sell"

[[2]]
[1] "j"    "e"    "c"    "h"    "a"    "sell"

[[3]]
[1] "i"   "c"   "h"   "b"   "g"   "buy"

[[4]]
 [1] "c"   "d"   "f"   "a"   "j"   "e"   "i"   "h"   "b"   "g"   "buy"


запускаем функцию  и ищем последовательности которые приводят к нашым меткам

ac <- apriori_cspade(liS = li,apri_supp = 0.1,
                      arpi_conf = 0.5,
                      rhs = c("buy","sell"),cspade_supp = 0.1,redundant.rules = T)
 ac
$rules
                                rule support confidence      lift
29          <{"a"},{"f"}> => <{"j"}>    0.10  0.5000000 0.7246377
56          <{"b"},{"f"}> => <{"i"}>    0.12  0.6000000 0.8333333
80          <{"e"},{"a"}> => <{"h"}>    0.14  0.5000000 0.6666667
98          <{"i"},{"e"}> => <{"g"}>    0.11  0.5000000 0.6329114
149         <{"b"},{"e"}> => <{"d"}>    0.11  0.5789474 0.7617729
168             <{"a"}> => <{"buy"}>    0.45  0.6081081 1.0484623
169             <{"b"}> => <{"buy"}>    0.44  0.6027397 1.0392064
170             <{"c"}> => <{"buy"}>    0.47  0.6103896 1.0523959
171             <{"d"}> => <{"buy"}>    0.46  0.6052632 1.0435572
172             <{"e"}> => <{"buy"}>    0.38  0.5757576 0.9926855
173             <{"f"}> => <{"buy"}>    0.42  0.6000000 1.0344828
174             <{"g"}> => <{"buy"}>    0.47  0.5949367 1.0257529
175             <{"h"}> => <{"buy"}>    0.43  0.5733333 0.9885057
176             <{"i"}> => <{"buy"}>    0.41  0.5694444 0.9818008
177             <{"j"}> => <{"buy"}>    0.45  0.6521739 1.1244378
178       <{"j"},{"i"}> => <{"buy"}>    0.17  0.6800000 1.1724138
182       <{"j"},{"g"}> => <{"buy"}>    0.18  0.6923077 1.1936340
183       <{"g"},{"j"}> => <{"buy"}>    0.18  0.6666667 1.1494253
184       <{"j"},{"f"}> => <{"buy"}>    0.14  0.7000000 1.2068966
185       <{"f"},{"j"}> => <{"buy"}>    0.21  0.7000000 1.2068966
187       <{"e"},{"j"}> => <{"buy"}>    0.17  0.7083333 1.2212644
189       <{"d"},{"j"}> => <{"buy"}>    0.23  0.7666667 1.3218391
191       <{"c"},{"j"}> => <{"buy"}>    0.25  0.7142857 1.2315271
192       <{"j"},{"b"}> => <{"buy"}>    0.16  0.6666667 1.1494253
194       <{"j"},{"a"}> => <{"buy"}>    0.14  0.6666667 1.1494253
195       <{"a"},{"j"}> => <{"buy"}>    0.22  0.7333333 1.2643678
196 <{"g"},{"c"},{"j"}> => <{"buy"}>    0.10  1.0000000 1.7241379
197       <{"i"},{"h"}> => <{"buy"}>    0.17  0.5862069 1.0107015
198       <{"h"},{"i"}> => <{"buy"}>    0.17  0.6071429 1.0467980
204       <{"e"},{"i"}> => <{"buy"}>    0.17  0.6538462 1.1273210
207       <{"i"},{"c"}> => <{"buy"}>    0.16  0.6956522 1.1994003
210       <{"b"},{"i"}> => <{"buy"}>    0.20  0.7692308 1.3262599
212       <{"a"},{"i"}> => <{"buy"}>    0.15  0.7142857 1.2315271
213 <{"c"},{"f"},{"i"}> => <{"buy"}>    0.10  0.6666667 1.1494253


Функцыя "грязная" писал для себя, но работает , пути внутри функции измени под себя и установи нужные пакеты

Но знай алгоритны ищащие такие "разреженые последовательности" такого типа очень прожорливы, там идет перебор просто диких размеров, несмотря на то что сам алгоритм делает ефективный перебор и написан на с++ 
 
mytarmailS #:

data


запускаем функцию  и ищем последовательности которые приводят к нашым меткам


Функцыя "грязная" писал для себя, но работает , пути внутри функции измени под себя и установи нужные пакеты

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

Спасибо, подумаю как прикрутить к своим задачам.

 
Aleksey Nikolayev #:

Спасибо, подумаю как прикрутить к своим задачам.

Будут вопросы, спрашивай. Я много времени потратил на такой подход,  так что более менее в теме, более того щитаю этот подход самым перспективных 
 

Один подход или оба?

https://habr.com/ru/post/661457/

Датацентрический и моделецентрический подходы в машинном обучении
Датацентрический и моделецентрический подходы в машинном обучении
  • 2022.04.19
  • habr.com
Код и данные — фундамент ИИ-системы. Оба эти компонента играют важную роль в разработке надёжной модели, но на каком из них следует сосредоточиться больше? В этой статье мы сравним методики, ставящие в центр данные , либо модель , и посмотрим, какая из них лучше; также мы поговорим о том, как внедрять датацентрическую инфраструктуру...
 
Mikhail Mishanin #:

Один подход или оба?

https://habr.com/ru/post/661457/

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

 

Ещё немного квазифилософии. Компромисс между смещением и дисперсией всегда будет ограничивать сложность модели. Поэтому никогда нельзя быть уверенным, что модель будет хорошо работать на всём множестве предикторов. Соответственно, появляется задача определить рабочее подмножество этой модели. Если правильно понял, это именно то о чём писал недавно Максим (про две модели). Это вполне соответствует старой идее, что "не нужно пытаться быть всё время в рынке".

Было бы неплохо попытаться совместить всё это в одной модели. Например, такая идея (немного похожая была у Aleksey Vyazmikin) -- разбиваем каждый предиктор на отрезки, что даёт разбиение всего множества предикторов на многомерные кубы. Потом из всех этих кубов выбираем набор подходящих. При большой размерности эта задача будет комбинаторно неразрешимой, но можно делать по аналогии с рандом форестом -- случайно выбирать маломерные наборы предикторов. Исходное разбиение на отрезки для каждого предиктора можно делать разбиением эквити (когда сделки отсортированы не по времени, а по данному предиктору) на монотонные куски.

Дополнить всё это кроссвалидацией (форвардом) и всем прочим что полагается) Возможно, даже получится не вполне бред) Ну, или что-то подобное кто-нибудь уже делал.

 
Полезная статья.
https://habr.com/ru/company/ods/blog/544208/
 
Mikhail Mishanin #:
Полезная статья.
https://habr.com/ru/company/ods/blog/544208/
Шляпа. Солянка из разных стат тестов
 
Maxim Dmitrievsky #:
Шляпа. Солянка из разных стат тестов

Как тема к размышлению/пониманию, что

Correlation != Causation

 1-4.

А тесты свои делать в любом случае. А так статья практически рекламная)

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