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

 
forexman77:

Как определить "шумовые предикторы"? Пробовал выбрать по значимости и убрать таким способом, результат стал хуже.

Тут было полно рекомендаций.

Я пользуюсь очень простой схемой, не гонюсь за точностью, но очень наглядно.

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

Графики выкладывал здесь, был rsi в качестве предитора. Можно сделать меру расхождения гистограмм.


Это есть rattle - с нулевыми затратами можно проверить произвольное число предикторов по отношению в большому числу целевых переменных, что я иногда делаю в порядке любезности особо ленивым.

 
Aleksey Vyazmikin:

Не ясно, как читать Ваш индикатор.

Это не индикатор, а случайный лес...

Оценивать модели по OOB, RMS и т.п. можно, но понять результат модели не получится.

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

График сгенерирован с помощью https://github.com/Roffild/RoffildLibrary/blob/master/Include/Roffild/ToIndicator.mqh

 
Dr. Trader:

Filter_02 2016 arr_Buy

Там класс "1" по количеству даже превышает "0", так что ложных входов меньше по сравнению с чем раньше. Попробуйте это дерево в советнике пожалуйста? Самому интересно что на графике прибыли будет.


y_pred
y_true01
0
1


Первый столбец с цифрами - без фильтра, а второй с фильтром

Может я накосячил с логикой дерева?


void FilterTree()
{
int arr_DonProc=DonProcf();
int arr_DonProcVisota=DonProcVisotaf();
int arr_DonProc_M15=DonProc_M15f();
int Level_Support_D1=LevlSupportf(PERIOD_D1);
int Level_Support_W1=LevlSupportf(PERIOD_W1);
int arr_Regressor=RegressorP();
bool BlockBuy=false;

if (arr_DonProc>=2.5)
   {
   if (arr_DonProcVisota>=7.5)
      {
         BlockBuy=true;      
      }
   else
      {
       if (arr_DonProc>=6.5)
          { 
            if (Level_Support_D1>=-2.5)
            {
               if (Level_Support_W1<=1.5)BlockBuy=true;                  
            }          
          }
       else
          {
            if (arr_Regressor>=2.5)
               {
                  if(arr_DonProc_M15>=4.5)BlockBuy=true;
               
               }
            else
               {
                  if(Level_Support_D1<1.5)
                  {
                     if(Level_Support_W1<-1.5)BlockBuy=true;
                  }
               }
          }         
      }   
   
   }

if (BlockBuy==true)BuyNow=false;
SellNow=false;
}
 
Roffild:

Это не индикатор, а случайный лес...

Оценивать модели по OOB, RMS и т.п. можно, но понять результат модели не получится.

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

График сгенерирован с помощью https://github.com/Roffild/RoffildLibrary/blob/master/Include/Roffild/ToIndicator.mqh

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

Так что Вы хотели показать, как читать показания, что они дают?

 
Aleksey Vyazmikin:


Первый столбец с цифрами - без фильтра, а второй с фильтром

Может я накосячил с логикой дерева?


Там была ошибка, надо так

if (BlockBuy==false)BuyNow=false;


 
Aleksey Vyazmikin:

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

Так что Вы хотели показать, как читать показания, что они дают?

CDForest::DFProcess(forest1, netinputs, netoutputs);
indicSymbol.buffer(netoutputs[1] * 100.0, 0);

CDForest::DFProcess(forest2, netinputs, netoutputs);
indicSymbol.buffer(netoutputs[1] * 100.0, 1);
Если не верите, что на графике самый настоящий лес, то представление о лесах явно ошибочны...
 
Roffild:
Если не верите, что на графике самый настоящий лес, то представление о лесах явно ошибочны...

При чём тут вопрос веры? На графике я вижу загогулины - и не понимаю, как их интерпретировать - всё.

 

Dr. Trader, в общем надо дальше ветвить дерево, очень мало информации для принятия решения.

 
Aleksey Vyazmikin:

Первый столбец с цифрами - без фильтра, а второй с фильтром

Понятно. Дерево не смогло научиться качественно фильтровать, так что и результат заметно не улучшился с фильтром, просто сделок поменьше стало. По сути отфильтровалось случайным образом часть хороших и часть плохих сделок, 

Я дерево обучал на 2015 году только для malovhodov.
filter_02 и mnogovhodov_02 обучал на 2016, лучше в тестере сравнить 2016 и 2017 года (2017 - вообще новые данные которых небыло в архиве, вот это самое интересное посмотреть).

 
Aleksey Vyazmikin:

Dr. Trader, в общем надо дальше ветвить дерево, очень мало информации для принятия решения.

Дальнейшее ветвление у меня приводило к оверфиту. Для лучшей точности тогда уж надо переходить к более сложным моделям - лес или нейронка.

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

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