Блог им. afecn19
Из тестов которые я привел в прошлых постах, следует что для задач с ограниченной выборкой и моим виденьем рынка, следует использовать GB, как наиболее эффективный инструмент, далее близко идет RF, а а где то далеко позади, глотая пыль плетется нейросеть. Также следует необходимость чистки от левых фичей. В чем вообще вопрос?! Лишние фичи это возможность инструментам ML найти черную кошку даже если ее там нет, особенно феерически это показала нейросеть, которая при относительно небольшом числе примеров откровенно творит (от слова тварь). Давайте попробуем зациклить чистку фичей и сделаем это системно. Системно это в частности избежать заглядывание в будущее а танцев с бубнами. Мои данные это около 50 тысяч дневок для наиболее ликвидных российских фишек с 2010 по апрель 2018 года (2008 год безудержного падения, 2009 год безудержного роста, поэтому все что до 2010 года оставил за бортом, как заведомо простые для извлечения профита годы), заглянуть на них в будущее это в частности использовать для прогноза движения цен в 2011 году данные о ценности фичей за все года. Мы так делать не будем. Мы представим что переместились в начале 2011 года и имеем только данные за 2010 год. Для прогноза 2011 года используем данные о ценности фичей на тесте за 2010 год. Как используем? Да просто — из более чем трех десятков фичей используем только 5, 10, 20 наиболее информативных. Для прогноза 2012 года используем данные о ценности фичей на основе теста 2010-2011 годов итд. (Код разбухает, становится все менее читаемым, впору задумываться о ООП). После получения прогнозов, для удобство переведу их в столь любимое для трейдеров виде: профит на сделку, и сравню их с результатами если бы каждый раз использовались все доступные фичи. А их 34 штуки. Чистка фичей это будет во первых.
Во вторых попробую улучшить результат за счет скалерновской VotingClassifier, которая будет выводить нечто среднее из прогнозов RF и XGB.
Приступим с первого пункта.
RF | RF5 | RF10 | RF20 | |||||
Год | Колл | % сделка | Колл | % сделка | Колл | % сделка | Колл | % сделка |
2011 | 1026 | -0,09 | 1026 | -0,09 | 1026 | -0,09 | 1026 | -0,09 |
2012 | 195 | 0,98 | 1022 | 0,43 | 420 | 0,56 | 289 | 0,76 |
2013 | 315 | 0,36 | 425 | 0,25 | 424 | 0,27 | 366 | 0,23 |
2014 | 487 | 0,92 | 697 | 0,64 | 859 | 0,54 | 506 | 0,93 |
2015 | 320 | 0,76 | 1351 | 0,18 | 1001 | 0,31 | 351 | 0,74 |
2016 | 214 | 0,77 | 446 | 0,8 | 339 | 0,75 | 241 | 0,81 |
2017 | 230 | 0,42 | 419 | 0,37 | 363 | 0,44 | 259 | 0,46 |
2018 | 35 | 0,49 | 101 | 0,18 | 55 | 0,24 | 50 | 0,25 |
RF это если каждый раз использовать весь набор фичей, RF5 — если лучшие 5 фичей из последнего теста итд. Как видим никакого взрывного улучшения не произошло. Число сделок понятным образом увеличилось, а вот средняя профитность припала. Одним словом-фигня.
Кстати вот как от года к году менялся набор 10 самых значимых фич:
GEP 0.177 | GEP 0.189 | GEP 0.208 | Week 0.230 | |||
Min10 0.167 | tLow% 0.146 | Week 0.176 | GEP 0.223 | |||
tLow% 0.155 | Week 0.138 | tLow% 0.138 | Min10 0.126 | |||
Week 0.148 | Min10 0.109 | Min10 0.110 | tLow% 0.100 | |||
Cl/(minSMA) 0.118 | tHigh%-tLow% 0.091 | Cl/Low 0.085 | Cl/Low 0.081 | |||
Vol20/Vol200 0.093 | Cl/High 0.082 | Cl/High 0.067 | Vol20/Vol200 0.069 | |||
Cl/(maxSMA) 0.060 | Cl/w_Low 0.074 | Cl/(minSMA) 0.063 | Cl/SMA21 0.065 | |||
wdif 0.031 | Cl/SMA21 0.071 | tHigh% 0.055 | Cl/(minSMA) 0.038 | |||
dif 0.026 | Cl/(minSMA) 0.066 | Cl/SMA21 0.055 | SMA5-SMA21 0.034 | |||
Cl/w_High 0.026 | Vol20/Vol200 0.033 | tHigh%-tLow% 0.043 | tHigh%-tLow% 0.034 | |||
GEP 0.185 | tLow% 0.208 | tLow% 0.196 | ||||
tLow% 0.176 | GEP 0.144 | Week 0.188 | ||||
Min10 0.144 | Min10 0.144 | Min10 0.146 | ||||
Cl/High 0.098 | Cl/High 0.093 | GEP 0.134 | ||||
Week 0.094 | tHigh% 0.093 | tHigh% 0.068 | ||||
Cl/SMA21 0.083 | Week 0.090 | Cl/High 0.066 | ||||
Cl/Low 0.077 | Cl/SMA21 0.087 | Cl/SMA21 0.065 | ||||
Cl/(minSMA) 0.060 | tHigh%-tLow% 0.057 | Cl/Low 0.050 | ||||
tHigh% 0.051 | Cl/w_Low 0.052 | Cl/(minSMA) 0.047 | ||||
Cl/w_Low 0.033 | Cl/Low 0.030 | Cl/w_Low 0.039 |
Жирным я пометил фичу Min10 которая одна давала 100-150 сделок по +1% в год в период с 200-какого то там до 2016. RF ее на первое место ни разу не поставили, ранжируя ее значимость на «бронзу». А вот если не оставить ей выбора, оставив только одну Min10, получим следующее:
RF c Min10 | ||
Год | Колл | % сделка |
2011 | 410 | -0,33 |
2012 | 93 | 1,18 |
2013 | 93 | 0,6 |
2014 | 205 | 1,53 |
2015 | 252 | 1,11 |
2016 | 162 | 0,74 |
2017 | 129 | 0,46 |
2018 | 24 | 0,73 |
На минус в 2011 году не стоит обращать внимания, RF еще не настроилась имея мало данных, и на найдя правильный порог у Min10, ну а дальше сами видите. Ну это так, лирическое отступление....
А вот насчет VotingClassifier. Брал RF и XGB, то есть есть скрещивал ежа с ежом, нечто весьма похожее, логично получив те же яйца в профиль:
RF | XGB | VotingClassifier | ||||
Год | Колл | % сделка | Колл | % сделка | Колл | % сделка |
2011 | 1026 | -0,09 | 1210 | 0,18 | 1044 | 0,14 |
2012 | 195 | 0,98 | 277 | 0,69 | 244 | 0,69 |
2013 | 315 | 0,36 | 228 | 0,48 | 234 | 0,36 |
2014 | 487 | 0,92 | 472 | 0,54 | 446 | 0,89 |
2015 | 320 | 0,76 | 814 | 0,29 | 321 | 0,9 |
2016 | 214 | 0,77 | 160 | 0,91 | 181 | 0,76 |
2017 | 230 | 0,42 | 199 | 0,38 | 222 | 0,47 |
2018 | 35 | 0,49 | 30 | 0,2 | 32 | 0,28 |
В общем тоже никакого особого гешефта не наблюдаю.