Блог им. afecn19

Пространные рассуждения о ML

 Если вы посмотрите на выступление какого то гуру ML или разработчика софта под это дело, то высокий шанс увидеть мекающее и бекающее существо, рассуждающее в духе «ну мы точно не знаем как это работает, но эмпирически мы получили что вот если взять куриную косточку смешать ее с пеплом единорога и трижды ударить в бубен, то результат получится очень даже ничего...». ML новая область и многим фишкам применяемым там, нет какого то четкого математического обоснования. 
 Я само собой тоже шаманю, бью в бубны. Например-стоил ли взять максимально большой набор данных для train или лучше брать последние как наиболее актуальные. Или например работа с фичами-допустим посчитал я модельку для первых 2 лет, оказалось что так и так наиболее актуальны из них 10. Стоит ли в следующий train брать только их, или стоит опять брать полный набор фичей. Как насчет порога вероятности? Для модельки с одними параметрами, порог в 55% будет самое то, для другой лучшим будет 57,5%. Я не говорю о гиперпараметрах в самих модельках. То есть если прикинуть все возможные комбинации, то мы получим сотни если не тысячи  вариантов, и сразу возникает вопрос о подгонке. Впору забить на все эти ML и вернуться  к старомы доброму надра… ию в WealthhLab. 
 Вот например берем те же данные, но решает задачу прогнозирования в xgboost которая считается развитием RF. Опять не паримся по поводу гиперпараметров (хотя они конечно очень важны), а просто смотрим что у ней на train, что на test, а что на out. 
 Сразу бросается в глаза, что показатели accuracy у ней гораздо выше, если в предыдущем примере RF показывал на train что то вроде 60%-65%, то  xgboost легко выбивает под 70% (если усложнить можно нарисовать и 99%). Но при выборе условия на out для входа в сделку порога в 55%, мы получаем много много сделок (что похвально) с весьма низкими значениями средней профитности (что понятно иначе чем пачалькой не назвать). 
2011<br />count        2112.00           
mean           -0.01          
2012<br />count         211.00            
mean            0.72            
2013<br />count         928.00           
mean            0.18            
2014<br />count        1182.00            
mean            0.33            
2015<br />count         341.00            
mean            0.86              
2016<br />count         172.00              
mean            0.83           
2017<br />count         458.00             
mean            0.22           
2018<br />count          87.00             
mean            0.23 

 Ну что такое средний профит в 0,23%? Половину сожрет комиссия, половину проскальзывание. Зато в некоторые годы сделок очевидно слишком много, впору повышать порог входа. Вопрос как об этом знать заранее?! Ну допустим на основе accuracy на test периоде-начинаю бить в бубны, что в ML называют словом «эвристика». Когда нет четкого обоснования data scientists прикрывают свою голую жопу этим словом. Вот входы с порогом в 57,5%:

2011<br />count        1340.00              
mean            0.02            
2012<br />count          79.00            
mean            0.88           
2013<br />count         505.00             
mean            0.24             
2014<br />count         655.00              
mean            0.49            
2015<br />count         143.00           
mean            1.02            
2016<br />count          35.00             
mean            0.72             
2017<br />count         148.00             
mean            0.31             
2018<br />count          23.00            
mean            0.61            

  Если сравнить xgboost с RF то увидим одно очень неприятное явление, xgboost рулит на test, но когда приходится показывать себя в боевых условиях то говоря словами Леонова в фильме Афоня: «стабильности нет». Глядя по годам — то мало сделок, то много, то приличная средняя доходность то так себе. Классический пример overfittinga, когда лучше попроще.


★4
15 комментариев
фигасе цитата, как говаривал эфиоп «мороз»©
avatar
Почему все вообще упоминают результаты на train — это вообще внутренняя инфа, на тесте-то не всегда цифры репрезентатианы — из-за подгонки и т.д., а трейн то вообще «внутренний» показатель.


И мне кажется что не надо воспринимать ML как волшебную пилюлю, как все или ничего. Можно использовать ML не вместо, а вместе с прочими подходами.
avatar
«то высокий шанс увидеть мекающее и бекающее существо»
это не всегда так, но есть очень простое объяснение, которое наблюдается постоянно — людям, которым есть что сказать, очень претит объяснять сложные вещи на пальцах тем, кто даже базовые термины не понимает :)
а еще презентацию надо нарисовать, в тайминг уложится, все это очень затратно и… бессмыслено ;)

по этому на сцену зачастую попадают либо те, кто не особо понимает, но умеет красиво говорить, либо те, кто как собака Павлова, все понимает, но сказать не может.

ну и как следствие, получается что-то вроде этого
«ML новая область и многим фишкам применяемым там, нет какого то четкого математического обоснования»

avatar
Les Paul, вопрос опыта. Углубленный математик (программист, физик) имеет до некоторого возраста малый опыт написания документов, публичных выступлений, вообще гуманитарного аспекта деятельности (исключения возможны). Поэтому мэкают и бэкают. 
С возрастом преподавательская деятельность и организация деятельности подчиненых заставляет их привести в порядок свои коммуникативные навыки. Но в это время они уже не кодеры. 
avatar
SergeyJu, так и я об этом, у молодых дарований нет мотивации к развитию коммуникативных навыков. :)
avatar
Новое это хорошо забытое старое.
Подросло новое поколение, которым тоже стало интересно.
Назвали всё новыми модными словами, прикольно должно быть :)
avatar
Simix, да, уж…
avatar
Simix, прогресс в ML идет очень быстро. Наш круг деятельности на обочине этого прогресса. Да и прорывы, если они есть, не становятся достоянием ширнармасс в силу высокой ценности для тех, кто эти прорывы сделал. 
avatar
Стабильности не было вроде как в «Москва слезам не верит».
Ну, и максимальный набор данных, конечно же, наиболее верный для выводов.
avatar
Фраза такая есть, но только из другого фильма:
avatar
Бустинг надо регулиризовать и стрэпить. В RF это делается само сабой.

А то, что бустинг есть продолжение форестинга… это что-то странное...

Принципиально бустинг — обычная декомпозиция, как фурье или ARIMA, а форест это нифига не декомпозиция, это… да по сути это простая модель много раз построенная на рекомбинированных данных, чтобы не было оверфитинга. То есть бустинг — много моделек, нелинейно усиливающих друг друга, а  форестинг — одна. Хотя в лесу, якобы, деревьев много — но все они что-то одинаковые... 

avatar
«ML новая область и многим фишкам применяемым там, нет какого то четкого математического обоснования. »
ML уже далеко не новая область, она просто стала популярна в последнее время в виду существенно роста вычислительных мощностей (раньше на обучение модели могли уходить месяцы на суперкомпьютерах, а сейчас минуты на средненьком ПК, а так же доступности для широких масс высокоуровневых, например того же TensorFlow.
Что касается четкого математического обоснование, то с этим все в порядке. Другой вопрос, чтобы его осознать, нужно быть не меньше чем кандидатом математических наук.
Но есть достаточно доступные курсы, которые дают общее понимание математического аппарата, который лежит в основе, например вот этот: https://www.coursera.org/learn/machine-learning/home/welcome

>>«Для модельки с одними параметрами, порог в 55% будет самое то, для другой лучшим будет 57,5%. Я не говорю о гиперпараметрах в самих модельках.»

 

О да, для меня это целое направление анализа. Смотрю как распределяется вероятность… получить вероятность от модели, мат. ожидание этого распределение и как выглядит — это в том числе использую и для оценки качества модели и для определения порогов, но пока не все мне ещё ясно, думаю, для меня там ещё остались резервы для роста.

avatar

 >>«Если сравнить xgboost с RF то увидим одно очень неприятное явление, xgboost рулит на test, но когда приходится показывать себя в боевых условиях то говоря словами Леонова в фильме Афоня: «стабильности нет»»

 

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

avatar

UPDONW
Новый дизайн