Марат
Марат личный блог
28 ноября 2019, 18:10

Фичи решают.

  Берем RF загоняем в нее фичи:

'Min10',
'Cl/High',
'Vol20',
'tLow%',
'Cl/Low',
'tHigh%-tLow%',
'ATRP(14)',
'DIMinus(14)',
'RSI(Close.20)',
'MomentumPct(Close.14)',
'MFI(20)',
'KST(Close.10.10.15.10.20.10.30.15)',
'TRIX(Close.10)',
'Cl/w_High',
'DSS(10. 20. 5)

  Получаем следующие профиты:
Год Колл % сделка
2011 611 0,1
2012 440 0,34
2013 305 0,42
2014 420 1,17
2015 263 0,85
2016 248 0,74
2017 261 0,41
2018 46 0,34
 Mean: 323 0,66

  Если убрать прогноз на 2011 год (потому что строился он на основе обучения только за 2010 год и 2018, потому что там первые 3-4 месяца, а не весь год), то мы выходим на 323 сделки по +0,66% каждая. Это не тест, не трейн, это реальный прогноз полученный с помощью CatBoosting (отечественная разработки, не сочтите за рекламу).  Можно повысив порог, увеличить средний профит на сделку, уменьшив число сделок, тут уж как каждому нравится. 
  А теперь та же моделька, тот же период, но давайте воспользуемся арсеналом индикаторов предложенных WealthLab, вот их скромный список:
'WilliamsR(30)',
 'Volatility(24.12)',
 'VHF(Close.24)',
 'TRIX(Close.10)',
 'StochRSI(Close.14)',
 'StochD(14. 5)',
 'StochK(14)',
 'StdDev(Close.14.Population)',
 'RVI(20)',
 'RSquared(Close. 30)',
 'RSI(Close.20)',
 'ROC(Close.30)',
 'QStick(24)',
 'MomentumPct(Close.14)',
 'Momentum(Close.14)',
 'MFI(20)',
 'MACD(Close)',
 'LinearRegSlope(Close.20)',
 'KST(Close.10.10.15.10.20.10.30.15)',
 'HV(Close.20.252)',
 'EMV(14)',
 'EMMinus(Close.40)',
 'EMPlus(Close.40)',
 'DSS(10. 20. 5)',
 'DPO(Close20)',
 'CumDown(Close.4)',
 'CumUp(Close.4)',
 'CMO(Close.20)',
 'CMF(21)',
 'CCI(20)',
 'ATRP(14)',
 'ATR(14)',
 'AroonDown(Close.20)',
 'AroonUp(Close.20)',
 'ADX(14)',
 'ADXR(14)',
 'DIMinus(14)',
 'DIPlus(14)',
 'DX(20)'
   Само собой настройки индикаторов могут быть разными, я взял по умолчанию. На выходе:
Год Колл % сделка
2011 908 0,17
2012 472 0,23
2013 772 0,03
2014 305 0,82
2015 158 0,33
2016 115 0,05
2017 115 0,05
2018 9 0,82
 Mean: 323 0,25

   Есть разница? Есть. Модель та же, но стоит подсунуть разные фичи и как все чудно меняется. Поэтому хочу поговорить о фичах, тем более это то, единственное креативное что остается юзающему ML.
  А что если использовать по одной фиче для RF? Список лучших фичей:
Фича Max Min Ср% срКолл
 'Min10', 1,20 0,07 0,59 252
 'Vol20', 0,90 0,23 0,57 31
 'Cl/High', 0,67 0,15 0,50 299
 'ATRP(14)', 0,96 -0,04 0,45 175
 'tLow%', 0,79 0,18 0,45 644
 'MomentumPct(Close.14)', 0,71 -0,11 0,36 204
 'tHigh%-tLow%', 0,65 0,04 0,32 368
 'DIMinus(14)', 1,27 -0,94 0,32 222
 'Cl/Low', 0,52 0,16 0,31 535
 'TRIX(Close.10)', 1,27 -0,02 0,30 273
 'VHF(Close.24)', 0,46 0,03 0,27 190
 'CCI(20)', 1,10 -0,10 0,27 153
 'Cl/w_Low', 0,82 0,00 0,26 176
 'MFI(20)', 0,76 0,07 0,25 360
 'KST(Close.10.10.15.10.20.10.30.15)', 0,70 -0,04 0,25 423
 'Cl/(maxSMA)', 0,58 -0,18 0,23 308
 'wdif', 0,91 -0,16 0,23 213
 'ROC(Close.30)', 0,75 -0,10 0,20 434
 'StochK(14)', 0,40 0,00 0,16 186
 'Cl/w_High', 0,48 -0,14 0,16 129
 'CMO(Close.20)', 0,49 -0,12 0,14 360
 'DIPlus(14)', 0,79 -0,23 0,14 269
 'EMV(14)', 0,25 0,08 0,13 297
 'RSI(Close.20)', 0,33 -0,10 0,13 352
 'ADX(14)', 0,40 -0,17 0,13 57
 'SMA5-SMA21', 0,20 0,00 0,11 413
 'StdDev(Close.14.Population)', 0,30 -0,04 0,11 334
 'LinearRegSlope(Close.20)', 0,18 -0,01 0,11 450
 'HV(Close.20.252)', 0,24 -0,04 0,10 96
 'StochRSI(Close.14)', 0,17 -0,04 0,10 321
 'GEP', 0,31 -0,19 0,09 361
 'MACD(Close)', 0,22 0,03 0,09 584

   Как видим даже использовав единственную фичу можно вполне выйти на что то рабочее, это еще один камушек в пользу важности работы с фичами. А что если запихнуть все возможные фичи и всю эту кашу кинуть RF?! Получаем:
  
Год Колл % сделка
2011 963 0,06
2012 409 0,27
2013 508 0,17
2014 366 1,14
2015 198 0,79
2016 180 0,62
2017 153 0,66
2018 28 0,42
  302 0,61

  Ну видим лучше не стало, стало даже чуть хуже. Как же нам сделать так, чтобы за счет фичей улучшить результаты?
  Можно так: берем данные за 2010 год, строим модель, получаем оценку важности фичей, и уже по новой строим модельку с учетом лучших фичей. Лучшие фичи это например лучшие по списку, или из числа фичей, чьи показатели не меньше какого то порогового значения. Ну и делаем прогноз на 2011 год и смотрим профит. Для 2012 года берем оценку важности фичей за 2010-2011 годы… итп. итд. Гешефта не получилось. 
Вот например если брать лучшие 20 фичей: 

  RF20
Год Колл % сделка
2011 1026 -0,09
2012 289 0,76
2013 366 0,23
2014 506 0,93
2015 351 0,74
2016 241 0,81
2017 259 0,46
2018 50 0,25
  335 0,66
 Стало чуть больше сделок, но принципиально ничего не поменялось. Вот если взять фичи со значимостью более 0,04 
Нау RF фичи>0,04 +60%
Год Колл % сделка
2011 58 0,34
2012 195 0,81
2013 198 0,45
2014 271 1,16
2015 216 0,93
2016 148 0,84
2017 80 0,26
2018 19 0,86
               185   0,74

  Средняя выросла, но за счет резкого падения числа сделок. Ерунда.
  Но самая большая ерунда это то как RF оценивает важность фичей и то что мы получаем на выходе, в профитах. То как RF оценивает важность фичей, и то как повышают профитность те или иные фичи-это часто два большие разницы. Почему это происходит можно обьяснить тем что настраиваем мы модель на оценку угадал направление движения, а профитность на сделку это не только это но и то далеко рынок прошел по данному направлению. Наверняка многие имеют работающие системы за счет разных составляющих-в одной случаи за счет того что если сделок профитных немного, но их профиты велики (классический пример трендовых систем), а в другом случаи выхлоп профтных сделок и убыточных одинаков, но профитные составляют 75% от общего числа сделок. 

9 Комментариев
  • SergeyJu
    28 ноября 2019, 18:20
    У Вас не так уж много фичей. Вполне можно взять все пары и все тройки. Провести оптимиззацию на всех парах (тройках). И напрямую оценить, что с чем сочетается и что работает. Я, собственно, так и делаю. 
    Поскольку у Вас есть резалты на отдельных фичах, Вы сразу увидите, в какой паре есть синергетический эффект, а в какой резалт не дает принципиального плюса к лучшей фиче из этой пары.
  • bstone
    28 ноября 2019, 18:41
    Т.е. пришли в итоге к подгонке, обычной подонке фич?
    • SergeyJu
      28 ноября 2019, 19:12
      bstone, NN и есть подгонка. А уж какая в точности — глубокая, мелкая, градиентная, деревянная, это делали. 
      • bstone
        28 ноября 2019, 19:21
        SergeyJu, разве RF — это NN?
      • bstone
        28 ноября 2019, 19:23
        SergeyJu, c NN и так все понятно. Просто RF позиционируются обычно как более продвинутая версия деревьев, которая намного меньше подвержена подгонке.
        • SergeyJu
          28 ноября 2019, 20:07
          bstone, только за счет постоянного деления выборки на инсемпл и аутофсэмпл. В результате всегда есть контрольный расчет без подгонки. И можно как бы контролировать уровень подгонки. Но это в жизни не так работает, как в идеале. В любом случае контроль подгонки — ограничение степеней свободы, к сожалению, других способов не знаю. 
          • Sergey Pavlov
            29 ноября 2019, 05:04
            SergeyJu, так это та же самая подгонка, но под другим соусом. Если мы позволяем себе, получив плохой аутофсэмпл, переделать эксперимент до тех пор, пока аутофсэмпл не станет удовлетворительным, это всё оверфит. Неважно же, чем мы при этом варьируем, перебираем фичи, целевые функции, предобработку данных и тд. На мой взгляд, аутофсэмпл должен в нашей задаче фиксироваться на данном участке времени один раз. Что получили — то и получили. Иначе наши условия обучения и контроля будут настолько далеки от реальных торговых, что смысла никакого. 
            • SergeyJu
              29 ноября 2019, 11:11
              Sergey Pavlov, не надо быть пуристом. Предположим, одна фича существенно лучше другой на всем наборе данных. Без аутофсэмпл. Или одна пара фич порождает существенно лучшую систему, чем другая пара. 
              Следует ли из этого, что свойство «быть лучше» сохранится?  Имхо, да, с высокой доле уверенности. 
              На что я опираюсь в таком выводе в первую очередь? На том, что объем используемых данных запредельно превышает число степеней свободы у фичей и их комбинаций. Автор же показал, что случайные фичи — говно и их простые комбинации ничего не дают. Следовательно, дающие фичи — не случайны.
  • Xaba3abr
    27 декабря 2019, 15:09
    Весь топик гадал, что же такое колл? Коллы, путы, страйки? Но при чём здесь опционы? Коллайдер, коллоид, коллинеарность? Только в конце дошло, что это же наверное коЛЛичество?? Мда, тяжело быть гуманитарием…

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн