Блог им. afecn19

ML - to be or not to be

Когда мы используем методы ML, получая унылые результаты при прогнозе, мы точно не знаем кто в этом виноват и что делать. Ведь вариантов может быть несколько:
1. ML говно
2. Данные говно
3. Рынок говно
4. Все вместе или попарно говно
5. Ты говно
6. Весь мир говно
  Последние варианты рассматривать не будет, конструктивно остановимся на первых. «Данные не те». Ну правда, метод может быть хорошим, рынок может по устойчиво демонстрировать прежние тенденции, но так как мы модель скормили мусором, то ничего кроме мусора не могли получить при прогнозе. Под мусором я понимаю размер данных и бессмысленные фичи. «Рынок не тот». Не в том смысле, что я весь такой Д`Артаньян, а вот рынок подкачал, а в том что тенденции сменились, ну вот 10 лет была одна манера поведения рынка, а потом в силу геополитики или макроэкономике или каких то институциональных изменений рынок изменился, и то что раньше было вкусно, питательно и сытно, нынче конкурирует с подбрасыванием монетки. «Метод не тот». А тут у нас типа руки растут из жопы и мы не понимаем как вообще все это работает, что такое валидация, тесты, подгонки, метрики качества. Где надо нейросети мы использует бустинг, где надо бустинг используем нейросети. Меня интересует больше ответ на вопрос «а этот ML вообще что то на фондовом рынке может?!» и чтобы ответить на него я сделаю так, чтобы не было никаких проблем ни с данными ни с рынком, то есть чтобы виновник сразу был очевиден.
  Я уже писал об этом так что просто вставлю копипаст на самого себя:
  Я сгенерировал DataFrame в 50 тысяч строк, где в качестве таргета использовал 1 или 0, а в качестве 100 фичей ряды из совершенно рандомных значений от 1 до 10. Но что я зверь какой то, чтобы предлагать спрогнозировать 1 или 0 на основе белого шума?! Нет, я сгенерировал один ряд осмысленный — день недели (Week). И когда тяпница я задал, что вероятность наступления события 1 равно 60%, а 2-40%. То есть классическая задача которую я решаю, под мое виденье что такое рынок: 80% времени белый шум, а в 20% случаях есть некоторая неффективность в размере 60 против 40 на получение конкретного значения. 
  Что мы ожидаем от ML если это нормальный инструмент а не танцы с бубнами?! Во первых мы должны получить то значение accuracy что и заложена в ряд. А это 60%*0,2+50%*0,8=52%. Вот наш реальный предел к которому мы и должны стремится, все что выше это «танцы с бубнами». Кроме того мы должны получить четкое указание на особую ценность фичи Week, и на близкую к нулю значимость всех остальных фичей.
  Сыпь гармоника!… То есть запускаю свой RF.
  У меня показатели accuracy по трем типам данных-Train, Test, Out. Out это прогноз. Первая закавыка возникала когда использовал глубину RF в 20. Тут Train accuracy подскакивала до 57%, то есть в ряде где осмысленность на 52%, она находила все 57%. Вот вам первый ответ почему у многих не получается в ML. ML такая штука что может найти черную кошку в черной комнате даже если ее там нет. 
  Как такое возможно спросите вы, вот попробую обьяснить на пальцах:
ML - to be or not to be
  X и Y это 2 наши фичи, черные точки событие 1, а красные событие 2. Вот мы хотим с помощью комбинации фичей разделить множество точек так чтобы по одну сторону линии было как можно больше красных, а по другую черных. То есть решаем задачу классификации. Зеленым я обозначил ту область где черные явно кучкуются, то есть можно предположить что при бОльших значениях X и Y вероятность черноты выше. А извращенцы из ML могут построить какую угодно сложную линию, например так что вообще все черные отделятся от красных:

ML - to be or not to be
 Accuracy 100%. Но вот мы полученную формочку пробуем натянуть на новые данные и получаем что то вроде 
ML - to be or not to be


  Ой, мы пытались спрогнозировать черноту а нашли красноту! Очевидно что тенденция сохраняется, черные точки кучкуются где то наверху, но так как мы переусложнили модель, то при прогнозе получили ерунду. И RF с глубиной деревьев 20 нарисовал изощренно сложные линии которые разделили точки с accuracy 57% то есть нашли то чего там и нет. А нейросеть позволяет достичь 100% accuracy на трейне и даже на тесте, ибо может, даже если фичи случайны. Таки дела.
 
to be continued…
★1
1 комментарий
Ну если бы все было так просто, то все сайентисты(да и не только) уже давно миллионерами были. Взял пару библиотек, сотню тысяч данных и волшебство — нейросеть нашла 100% входы.
avatar

теги блога Марат

....все тэги



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