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

 
СанСаныч Фоменко:


Если взять практически любую книгу по datamining, то обязательно описаны процедуры по удалению коррелированных предикторов. 

Взаимодействующие предикторы не обязатльно будут коррелировать... Они взаимодействуют на целевку....

А наличие взаимодействия дает результаты вида:

> summary(lm(data = train_sample_list[[1]], price_future_lag_diff_6 ~ price_diff_lag_11 * price_diff_min_lag_16))


Call:

lm(formula = price_future_lag_diff_6 ~ price_diff_lag_11 * price_diff_min_lag_16, 

    data = train_sample_list[[1]])


Residuals:

      Min        1Q    Median        3Q       Max 

-0.035970 -0.000824  0.000001  0.000847  0.027278 


Coefficients:

                                          Estimate Std. Error t value Pr(>|t|)    

(Intercept)                              3.883e-05  3.146e-05   1.234  0.21714    

price_diff_lag_11                        4.828e-02  9.092e-03   5.310 1.12e-07 ***

price_diff_min_lag_16                   -3.055e-02  1.141e-02  -2.678  0.00743 ** 

price_diff_lag_11:price_diff_min_lag_16 -3.520e+00  3.515e-01 -10.014  < 2e-16 ***

---

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1


Residual standard error: 0.0024 on 10465 degrees of freedom

Multiple R-squared:  0.01611, Adjusted R-squared:  0.01583 

F-statistic: 57.11 on 3 and 10465 DF,  p-value: < 2.2e-16

 Все предикторы значимы (и их взаимодействие). Ф-статистика офигенная...

 
Alexey Burnakov:

Взаимодействующие предикторы не обязатльно будут коррелировать... Они взаимодействуют на целевку....

А наличие взаимодействия дает результаты вида:

> summary(lm(data = train_sample_list[[1]], price_future_lag_diff_6 ~ price_diff_lag_11 * price_diff_min_lag_16))


Call:

lm(formula = price_future_lag_diff_6 ~ price_diff_lag_11 * price_diff_min_lag_16, 

    data = train_sample_list[[1]])


Residuals:

      Min        1Q    Median        3Q       Max 

-0.035970 -0.000824  0.000001  0.000847  0.027278 


Coefficients:

                                          Estimate Std. Error t value Pr(>|t|)    

(Intercept)                              3.883e-05  3.146e-05   1.234  0.21714    

price_diff_lag_11                        4.828e-02  9.092e-03   5.310 1.12e-07 ***

price_diff_min_lag_16                   -3.055e-02  1.141e-02  -2.678  0.00743 ** 

price_diff_lag_11:price_diff_min_lag_16 -3.520e+00  3.515e-01 -10.014  < 2e-16 ***

---

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1


Residual standard error: 0.0024 on 10465 degrees of freedom

Multiple R-squared:  0.01611, Adjusted R-squared:  0.01583 

F-statistic: 57.11 on 3 and 10465 DF,  p-value: < 2.2e-16

 Все предикторы значимы (и их взаимодействие). Ф-статистика офигенная...

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

Vizard_:

Данные не скину ...

Нет данных, значит и обсуждать нечего.

Отдыхай...те!

 
Vizard_:
Юр, ну ты хоть не тупи) Просто забыл кто тебе в 9г.сказал что ты сеть не правильно сконфигурировал, а с полианалист можно вытаскивать формулу)))
Нет никаких притензий и секретов, юзаю стандартные инструменты дм, иногда с небольшими правками. Если интересны лишь реферамбы, слушай,
но реалии немного другие... Предыдущий экперимент был на реальных даных. Сделал на простых-исскуственных. Первый набор распознан абсалютно
правильно. Подмешал ........ Ответ должен быть 100%, но jPrediction 11 настолько акуенный "ии", что умудрился выдать))) Короче дорабатывай,

приблуда пока не рабочая. Данные не скину, понтуешься дохера, сам допрешь... Версии на 20 мож еще гляну, если "рекламма" будет как сегодня)))


А ты в курсе что при нескольких оптимизация получается всегда разный результат. Это же оптимизация, если бы она всегда приходила к однозначному ответу было бы конечно хорошо но уж больно странно, попробуй прооптимизировать несколько раз, еверен что 8 из 10 раз получиш свои 100% Так что как то так....
 
СанСаныч Фоменко:
Ну, может быть, просто у меня было другое представление о значении слова "взаимодействие".


Есть ясные правила трактовки взаимодействий в линейных моделях. Они немного посложнее трактовки линейной комбинации: https://www.r-bloggers.com/interpreting-interaction-coefficient-in-r-part1-lm/

 

Но чтобы найти значимые взаимодействия надо перекопать много комбинаций. Вот это засада. 

Interpreting interaction coefficient in R (Part1 lm)
Interpreting interaction coefficient in R (Part1 lm)
  • grumble10
  • www.r-bloggers.com
Interaction are the funny interesting part of ecology, the most fun during data analysis is when you try to understand and to derive explanations from the estimated coefficients of your model. However you do need to know what is behind these estimate, there is a mathematical foundation between them that you need to be aware of before being able...
 
Mihail Marchukajtes:
А ты в курсе что при нескольких оптимизация получается всегда разный результат. Это же оптимизация, если бы она всегда приходила к однозначному ответу было бы конечно хорошо но уж больно странно, попробуй прооптимизировать несколько раз, еверен что 8 из 10 раз получиш свои 100% Так что как то так....

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

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

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

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

 
Yury Reshetov:

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

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

 
Andrey Dik:
Может быть нужно делать обучение несколько раз и при этом каждый раз делить выборку случ. образом? А уже из этого готового набора обученных моделей выбирать и вообще оценивать можно насколько модель годная. 
Таким образом мы можем свести на нет вероятность получения случайно подогнанной модели и при этом не стане  заложниками детерминированности. 

Это уже реализовано в jPrediction, т.е. на разных ядрах CPU параллельно вычисляются несколько разных разбиений выборки (два бинарных классификатора - это один террарный на одно свободное ядро). Процессор получается загруженным на 100%. Проблема в том, что количество ядер в CPU ограниченно, поэтому вероятность неравномерного распределения паттернов можно только уменьшить, но свести их на нет весьма проблематично. Разве только если обучать модели на суперкомпьютерах, а не на персоналках.

Например, если вычислять модели на китайском суперкомпьютере Tianhe-2, то там 3 120 000 ядер. Вероятность неравномерности распределения паттернов по частям выборки будет ничтожно малой. Если вычислять модели на 4-х ядерной персоналке (да ещё и пару ядер зарезервировать под другие задачи), то ничего удивительного, что рано или поздно можно будет нарваться на неравномерность.

 
Про равномерное разбиение выборки напомню, что никто меня так и не спросил зачем это делать, НО я делаю такой выходную переменную, чтобы количество единичек и нулей было равным. Делаю я это с помощью регулирования прибыли сигналов, от -10 пипсов до + 50. При равном количестве единичек и нулей, модель разбивается не редко пополам. И ещё раз напомню, не важно как делить, важно чтобы деление было стабильным.....
 
Yury Reshetov:

Это уже реализовано в jPrediction, т.е. на разных ядрах CPU параллельно вычисляются несколько разных разбиений выборки (два бинарных классификатора - это один террарный на одно свободное ядро). Процессор получается загруженным на 100%. Проблема в том, что количество ядер в CPU ограниченно, поэтому вероятность неравномерного распределения паттернов можно только уменьшить, но свести их на нет весьма проблематично. Разве только если обучать модели на суперкомпьютерах, а не на персоналках.

Например, если вычислять модели на китайском суперкомпьютере Tianhe-2, то там 3 120 000 ядер. Вероятность неравномерности распределения паттернов по частям выборки будет ничтожно малой. Если вычислять модели на 4-х ядерной персоналке (да ещё и пару ядер зарезервировать под другие задачи), то ничего удивительного, что рано или поздно можно будет нарваться на неравномерность.

То есть, это полезно делать. Значит вместо 4-х разбиений, очевидно что это мало, нужно делать 40 разбиений. Для 4-х ядер будет в 10 раз дольше считаться, но полагаю, что временем можно пожертвовать в пользу робастности.

"Если это можно сделать и если от этого будет толк, то это нужно сделать". (c) Папо Карло Альбертович.