Продолжу изучение нейросетей. Для тех кто случайно наткнулся на этот пост, но не хочет ковырять предшествующие поясняю.
Был сгенерирована табличка в 50 тысяч строк и 103 столбцов. Один столбец это даты, еще один — таргет, который мы пытаемся предсказать (событие 1 и событие 0). 101 столбец изображают фичи, из которых 100 случайные величины от 1 до 10, а одна осмысленная (Week) принимает значение от 1 до 5. Для week от 1 до 4 равновероятно событие 1 и 2, для Week = 5 вероятность события 1 = 60%, 2 = 40%.
«Шо за фигня аффтор?!». Фигня не фигня, а я моделирую свое виденье рынка и своего подхода к поиску рабочих стратегий. Виденье рынка предполагает что рынок рандомно блуждает значительную часть времени (в моему случаи 80% времени), а оставшееся его можно описать несколькими хорошими фичами. Ну как описать? Не на 100%, ну а где то процентов на 60. Сравните с детерминированным подходом ученых столетней давности — «если нам дать все фичи и много много вычислительных мощностей мы вам все посчитаем, с точностью в 100% и для любого мгновения времени!». Понятно что после этого появилось много других идей, нелинейная динамика к примеру, которая именно предполагает принципиальную невозможность прогнозирования, а не потому что нам чего то в данных недодали. Ну и наконец постановка задачи: у нас есть 101 фича, и нам с помощью инструментов ML надо получить такой прогноз события 1, который бы бился с заложенной нами неэффектиностью. И тут не помогут завывания нейросетей-что мы «фичи кривые заложили, на которых совершенно невозможно работать!», что «просто рынок изменился!, не имезнился мы бы огого!». Нам совершенно плевать на accuracy на трейне и даже на тесте. Мы как тот глупый учитель, который может не очень то и соображает зато у которого на клочке бумажки записан правильный ответ, а напротив него ученик, в очечках, но у которого почему то при всех сплетнях что он в уме может перемножить трехзначные цифры, при сложения 1+1, получается то 5, то 6 то -32. Не, конечно вариант что мальчик в очечках не так уж и не прав возможен, может он считал в невклидовых метриках к примеру, или перемножать он умеет а вот что такое складывание ему просто не сказали.
Ну минута лирики закончилась, что у нас в итоге? В итоге у нас нейросеть совершеннейшим образом облажалась, запутавшись в 100 рандомных фичах и совершенно не заметив ту самую единственную стоящую. Что мы можем? Можем облегчить задачу уменьшив число рандомных фичей со 100 до 10 (10+1) а затем до 2 (2+1), а можно оставить нейросеть наедине со стоящей фичей (0+1), для смеха. А можем дать нейросетке работать не 50 тысячах примерах, а на нескольких миллионах.
Правильный ответ по Week:
Названия строк |
Колич |
target |
1 |
8254 |
0,50 |
2 |
8206 |
0,50 |
3 |
8145 |
0,50 |
4 |
8380 |
0,50 |
5 |
8231 |
0,60 |
Напомню нейросетка 100+1 предсказала событие 1 (с разбивкой по Week) так:
Названия строк |
Колич |
target |
1 |
4548 |
0,51 |
2 |
4944 |
0,51 |
3 |
5189 |
0,52 |
4 |
5803 |
0,52 |
5 |
6095 |
0,61 |
Общий итог |
26579 |
0,54 |
Нейросеть 10+1:
Названия строк |
Колич |
target |
1 |
3997 |
0,50 |
2 |
5216 |
0,49 |
3 |
6417 |
0,49 |
4 |
7435 |
0,50 |
5 |
7762 |
0,60 |
Общий итог |
30827 |
0,52 |
2+1
Названия строк |
Колич |
target |
1 |
3608 |
0,49 |
2 |
2749 |
0,50 |
3 |
4065 |
0,50 |
4 |
7099 |
0,50 |
5 |
7773 |
0,60 |
Общий итог |
25294 |
0,53 |
0+1
Названия строк |
Колич |
target |
3 |
1715 |
0,51 |
4 |
8380 |
0,50 |
5 |
8231 |
0,60 |
Общий итог |
18326 |
0,55 |
По мере уменьшения числа рандомных фичей, результаты типа улучшаются. Уменьшая число рандомных фичей, мы ограничиваем нейросеть в возможности фантазировать в поисках фальшивых закономерностей, и одновременно тыкаем ее носом в правильный ответ. Апофеоз наступает в последним примере. Я не разу не специалист в нейросеть, все это досужие фантазии от меня, но в ироническом стиле опишу как скрипит мозгами нейросеть: «так, мне чего то сунули. таргет, а вот фичи… ой, фича! почему то 1 фича… хмм… к чему бы это?! ну ладно, таргет у нас принимает два значения, причем на выборке событие 1 в 52% случаях. То есть если мы будем постоянно предсказывать событие 1, то у нас будет точность 52%. Ура! ну ладно попробуем что то выжать из фичи чтобы повысить точность....». Вот так я очеловечил рассуждения нейросети, то есть придал ей способность мыслить. А все потому что я заметил одну очень интересную штуку-в последнем примере нейросеть правильно отнесла все Week=5 к событию 1. Но после этого остались week от 1 от 4, и нейросеть могла поровну каждому варианту накидать по событию 1 и событию 2. Но она так не сделала. Она «поняв» что Week=5 дает повышенную вероятность события 1, стала повышать вероятность события 1 для Week=4 и Week=3, как ближе стоящему к Week=5, и уменьшать для Week=1 и Week=2. RF (бустинг) не может экстраполировать, она может только брать примеры из трейни, и осуществлять разбивку, а если на тесте встретить неизвестное из трейни значение фичи, то тупик-с. И разбивку Бустинг осуществил так:
Названия строк |
Коли |
target |
1 |
4891 |
0,49 |
2 |
4947 |
0,50 |
3 |
4739 |
0,49 |
4 |
5017 |
0,51 |
5 |
8224 |
0,60 |
Общий итог |
27818 |
0,53 |
он правильно указал на Week=5, но для него что Week=1, что Week=2, что Week=3, что Week=4 это все одна равновероятная каша, он их не отличает, поэтому он раскидал событие 1 ровненько. А нейросеть так:
Названия строк |
Колич |
target |
3 |
1715 |
0,51 |
4 |
8380 |
0,50 |
5 |
8231 |
0,60 |
Общий итог |
18326 |
0,55
|
и возможно я фантазирую, но тут нейросеть демонстрирует возможности экстраполяции, то есть рассудочной деятельности. Так что получается что бустинг это как калькулятор, который точно посчитает что вам надо, но никаких шаг вправо шаг влево, а нейросети как это как человек-гуманитарий которого попросили на экзамене что то там посчитать. Считать он не умеет, поэтому если ему накидают кучу цифр он запутается, и получит ответ кривой и косой, но так зато у него есть какая никакая логика, суждения, мыслительный процесс, и жизненный опыт он может прикинуться больным или может предположить что «если 5 это хорошо, о все что рядом с 5 тоже неплохо, а вот все что далеко от 5 это не очень». Так что покачиваясь в кресле можно порассуждать на тему «а что то в этих нейросетях есть».
И я опять попробую изобразить как нейросеть рассуждала после того как обнаружила что в week=5 что то есть: «оке, при пятере че то там есть. оке, когда week=5, кинем туда все события 1. ну вот у нас осталось еще куча других примеров, с ними то что делать?! как как раскидать по week&! ааа… ну понятно, что ближе к week=5?! week=4! вот и кинем все оcтальные события 1 в week-4! сколько еще остается событий 1?! 1715 штук! оке, кинем их все в week=3!» Впрочем очень может быть что все это мои больные фантазии
Интересно почему нейросетевеки не пытаются говорить что человеческий мозг это куча слабоструктурированных нейронов, уложенных слоями, это разве не подразумевается в их концепции?
Вы опускаете подробности того, что делаете, поэтому мне трудно уследить за ходом Вашей мысли...
Насколько понимаю, в МЛ всё очень просто: какая утилити, такой и ответ. Не может быть чисто случайно, что Вы задали какую-то «неправильную» утилити?
Например, Вы можете ввести в утилити штраф за лишние предикторы (критерий типа AIC). Тогда сеть няпряжется и постарается подавить лишние факторы, оставив только самый значимый...
Вот представь сколько есть способов взять проекцию 100-мерного пространства на скажем 50-мерное или 10-мерное подпространство. Простая комбинаторная интуиция подсказывает нам, что очень дофига )) и в этом очень дофига есть довольно много таких подпространств, в которых (совершенно случайно!) происходят гораздо более интересные перекосы, чем твой week с его 60/40 ))
Отсюда локальный вывод — надо считать статистическую значимость как-то.