Хороший подход. Я делаю похожее для слов и текстов. У вас следующим шагом может быть кластеризация пользователей с использованием векторов просмотренных товаров. Могу подсказать вариант как сделать.
Это действительно отличный пример долговременной авто-торговли. Меня смущает, однако, то, что предыдущая просадка длилась примерно 1.5 года. Без средств инвесторов, которые норовят зайти просадке, такая динамика совсем не располагает к жизни на пассивный доход.
Я посмотрел на сайтах мониторинга ЗП в Праге на свою должность. Оказалось, что вилка ЗП ниже, чем я получаю в России (Питер). При этом однушку снять там не 30 т.р. (40 в Москве), а 70…
Почему-то подобный опыт возможен и в американских IT компаниях. А точнее, в их представительствах в РФ. Гонка за бонусами / stock. Желание побыстрее взобраться по карьерной лестнице. Что при этом происходит уровнем ниже — ну, там неудачники, которые не умеют расти в таких компаниях. Пусть код пишут как надо, и хватит им. (Собственный опыт с позиции синиора).
Отличная статья. Обязательно перечитаю на досуге вдумчиво. Gini очень популярен в банковской сфере. Очень часто на конференциях или собеседованиях идет речь про него.
Хороший программист должен уметь хорошо писать код. Подставьте здесь ваши любимые критерии хорошего кода, которые уже много раз обсуждались. А хорошо идти по карьерной лестнице — это совсем (!) другое умение. Идя по карьерной лестнице, программист не баги чинит, а, в первую очередь, подстраивается под правила игры, придуманные людьми и с этими людьми учится договариваться (под их правила плясать — как один из вариантов).
Статья все-таки изначально про «наивного батрака» (молодого?), решившего, что умение чинить баги открывает дверь в область людских игр, связанных с продвижением по карьере, да еще и в высоко-конкурентном окружении. И он понял таки, что подход не верен, повзрослел. Вся мораль!
Просто, кто-то приспособился лучше к системе карьерного роста и стал повыше. Но ты, специалист по хорошому коду, от этого не становишься худшим программером.
Как-то так. Никто ж не говорит, что мир справедлив для каждого.
Видел примеры повышений и неповышений в крупной компании, которые сильно демотивируют.
Пример 1: человек пришел уже старшим разработчиком, за год работы выяснил, что вокруг сидят десятки дядек с многолетним — многодесятилетним — опытом на той же позции сениора. Уточнил про повышение, а ему в ответ — это очень сложно, потому как надо доказать. Промежуточных уровней также вводить не планируем. И дядьки вокруг глумяться. Человек уходит через 1.5 года на гораздо более высокую ЗП.
Пример 2. Старший директор по R&D рассуждает о том, что повышают дескать тех, кто заслужил, приводит пример: поработал разраб. 8 лет — стал сениором (истинно мол заслужил). И делает оговорку, но не всегда так. Бывает и быстрее. Прямо в то же время ты наблюдаешь, как на должности тим.лидов и даже менеджеров переводят сотрудников, проработавших 2.5 — 4 года, быстро перешедших уровень сениора. WTF? А бывает, что и пришел человек на тим.лида, а его через полгода в менеджеры (и, кончено, проектов с горкой подкидывают). Все решается менеджерами тех чуваков, и которые могут поспособствовать очень явно в повышении. Педалируют важность проектов где надо, уповают на офигительные лидерские качества любимчика, участвуют напрямую в реструктуризации. Вот и получается такая фигня.
В целом, это демотивирует, когда, конечно, тебя самого так не разгоняют. И такой бред полно даже в формальных, крупных, западных компаниях.
Такая ракета пожет прилететь прямо под стул президента СШ в овальном кабинете и вызвать падение морального духа всей страны. А вы все ё-мобили поминаете…
Делал для форекса предсказатель. Если представить, что накладные расходы на трейд = 2 пункта, то без учета накладных расходов получалось довести мат.ожидание на отложенных выборках (на 50 разных выборках, для получения выборочного значения точности) до примерно 1-1.5 пунктов. Предсказуемость есть, но сделать прибыльную предсказательную систему сложно.
Вот так, сравнение выборки точности на валидационных фолдах (на 50 выборках) и на отложенных. Для некоторых горизонтов очевидно в плюсе. Это nested crossvalidation:
Я изучаю RL на языке R )) Пишу с нуля обертки для НС, которые реализуют логику. Получается нормально, но A3C это очень сложно (у меня одна НС обучается на всех воркерах), а сделать параллельно разные НС — задачка сложная.
Спасибо. Я ещё и практик. Описанный подход пробовал. Но он не даёт то, что даёт RL, а именно, непрерывный контроль. Точка входа это одно, а внутри тоейда нужен контроль за состояние float profit и на каждом баре оценка возможности закрытия. RL именно это делает (круто в теории). То есть последовательность действий из алфавита buy, hold, sell, приводящая к большому положительному непрерывному return. И это же эпизод.
Returns прогнозировал тоже с помощью много чего: RF, GBM, GLM. На практике переобучается и не выводит матожидание в плюс. Ноль в лучшем случае.
Правда подумал, может предобучить сеть предсказывать хорошие входы, а потом дообучить как RL.
1) Это я частично применяю, но не пробовал предобучить сеть на этом шаге, чтобы в дальнейшем использовать на более дальних примерах. Все это опять же нужно делать с промежуточными ручными проверками «а кто это у нас тут так плохо сошелся».
2) Частично это делается случайным заполнением буффера и использованием e-greedy (Boltzmann's exploration, etc.).
3) Вот это круто звучит, можно попробовать. hierarchical RL.
На простых моделях мира работает норм, на сложных — плохо.
Моя игрушка: обучение трейдингу на функции синуса )
данные:
трейды на обучении (нижние ряды — хорошо обученный агент):
А если сделать длину трейда 50-100 шагов, то сходимость будет гораздо хуже.
Я больше всего фрустрирую из-за огромного пространства гипер-параметров. Перечислю только некоторые, которые есть в моем скрипте RL (для Double Q Learning, e-greedy, with prioritization of learning samples):
размер буффера,
количество нейронов в (1 пока) скрытом слое,
надо ли добавить второй,
надо ли вставить drop-out,
скорость обучения,
надо ли ее делать переменнной,
gamma,
epsilon (greedy),
feature engineering (что? где? когда?),
коэффициент alpha для выравнивания приоритизации,
если это не приоритезация, надо ли выбирать образцы из буффера равномерно или ближе к последнему образцу политики?
И это еще не все. (
А самое главное, сходимость можно оценить далеко не через 5 минут. Обычно, занимает несколько часов.
Ну, да! Понимание физики, восприятие объектов в пространстве вообще. Динамика тел. Это у нас с детства закладывается (плюс эволюционно — бананы ловить с пальмы, и т.д.). А тут на тебе — несколько миллионов векторов сырых пикселей — и готово!
Поумничаю. Я сам уже около года делаю свою RL машину. Если вознаграждение разрежено и, в конкретном случае, дается агенту по окончании эпизода (пример из Pong): left-left-left-left-left-left-left-left-left-left-left-left-left-мleft-left-left-left-left-left-left-left-left-left-left-left-left-left-left-left-left-left-left-REWARD == +1, то для многих задач эта задержка создает большие проблемы в сходимости. По сути, человек дает машине огромное право выбора, что делать, но только чтобы сумма вознаграждений стремилась к своему возможному максимуму. Хоть чечетку пляши 50 итераций, но на 51 нужен +1.
Если дать машине мнгновенные вознаграждения, типа расстояние до мяча в Pong left-0,99-left-0,98-left-0,95-left-0,9-left-0,85-left-0,81-left-0,7-...left-0,01-REWARD == +1, то здесь еще одна большая проблема. От размера многвенных вознаграждений зависит та политика, которую агент усвоит. Он всегда будет стремится максимизировать сумму дисконтируемых вознаграждений, и если промежуточные значения слишком высокие — а точнее, если они пробивают какой-то заранее неизвестый порог, — то агенту проще максимизировать их, а не отложенное вознаграждение.
Для того же примера понга это может привести к тому, что (фантазирую), отбивая мяч он положит серию увеличивающся до него расстояний и будет получать меньше вознаграждения. А поэтому совсем не обязательно (не ОЧЕВИДНО), что он будет стараться мяч именно отбить.
Вот про эту сложность автор пишет много и подробно. И это очень нетривиально.
Хороший подход. Я делаю похожее для слов и текстов. У вас следующим шагом может быть кластеризация пользователей с использованием векторов просмотренных товаров. Могу подсказать вариант как сделать.
LOL: дата сатанисты. Это даже круче, чем сайентологи.
Статья все-таки изначально про «наивного батрака» (молодого?), решившего, что умение чинить баги открывает дверь в область людских игр, связанных с продвижением по карьере, да еще и в высоко-конкурентном окружении. И он понял таки, что подход не верен, повзрослел. Вся мораль!
Просто, кто-то приспособился лучше к системе карьерного роста и стал повыше. Но ты, специалист по хорошому коду, от этого не становишься худшим программером.
Как-то так. Никто ж не говорит, что мир справедлив для каждого.
Пример 1: человек пришел уже старшим разработчиком, за год работы выяснил, что вокруг сидят десятки дядек с многолетним — многодесятилетним — опытом на той же позции сениора. Уточнил про повышение, а ему в ответ — это очень сложно, потому как надо доказать. Промежуточных уровней также вводить не планируем. И дядьки вокруг глумяться. Человек уходит через 1.5 года на гораздо более высокую ЗП.
Пример 2. Старший директор по R&D рассуждает о том, что повышают дескать тех, кто заслужил, приводит пример: поработал разраб. 8 лет — стал сениором (истинно мол заслужил). И делает оговорку, но не всегда так. Бывает и быстрее. Прямо в то же время ты наблюдаешь, как на должности тим.лидов и даже менеджеров переводят сотрудников, проработавших 2.5 — 4 года, быстро перешедших уровень сениора. WTF? А бывает, что и пришел человек на тим.лида, а его через полгода в менеджеры (и, кончено, проектов с горкой подкидывают). Все решается менеджерами тех чуваков, и которые могут поспособствовать очень явно в повышении. Педалируют важность проектов где надо, уповают на офигительные лидерские качества любимчика, участвуют напрямую в реструктуризации. Вот и получается такая фигня.
В целом, это демотивирует, когда, конечно, тебя самого так не разгоняют. И такой бред полно даже в формальных, крупных, западных компаниях.
Вот так, сравнение выборки точности на валидационных фолдах (на 50 выборках) и на отложенных. Для некоторых горизонтов очевидно в плюсе. Это nested crossvalidation:
Я изучаю RL на языке R )) Пишу с нуля обертки для НС, которые реализуют логику. Получается нормально, но A3C это очень сложно (у меня одна НС обучается на всех воркерах), а сделать параллельно разные НС — задачка сложная.
Returns прогнозировал тоже с помощью много чего: RF, GBM, GLM. На практике переобучается и не выводит матожидание в плюс. Ноль в лучшем случае.
Правда подумал, может предобучить сеть предсказывать хорошие входы, а потом дообучить как RL.
2) Частично это делается случайным заполнением буффера и использованием e-greedy (Boltzmann's exploration, etc.).
3) Вот это круто звучит, можно попробовать. hierarchical RL.
На простых моделях мира работает норм, на сложных — плохо.
Моя игрушка: обучение трейдингу на функции синуса )
данные:
трейды на обучении (нижние ряды — хорошо обученный агент):
А если сделать длину трейда 50-100 шагов, то сходимость будет гораздо хуже.
размер буффера,
количество нейронов в (1 пока) скрытом слое,
надо ли добавить второй,
надо ли вставить drop-out,
скорость обучения,
надо ли ее делать переменнной,
gamma,
epsilon (greedy),
feature engineering (что? где? когда?),
коэффициент alpha для выравнивания приоритизации,
если это не приоритезация, надо ли выбирать образцы из буффера равномерно или ближе к последнему образцу политики?
И это еще не все. (
А самое главное, сходимость можно оценить далеко не через 5 минут. Обычно, занимает несколько часов.
Если дать машине мнгновенные вознаграждения, типа расстояние до мяча в Pong left-0,99-left-0,98-left-0,95-left-0,9-left-0,85-left-0,81-left-0,7-...left-0,01-REWARD == +1, то здесь еще одна большая проблема. От размера многвенных вознаграждений зависит та политика, которую агент усвоит. Он всегда будет стремится максимизировать сумму дисконтируемых вознаграждений, и если промежуточные значения слишком высокие — а точнее, если они пробивают какой-то заранее неизвестый порог, — то агенту проще максимизировать их, а не отложенное вознаграждение.
Для того же примера понга это может привести к тому, что (фантазирую), отбивая мяч он положит серию увеличивающся до него расстояний и будет получать меньше вознаграждения. А поэтому совсем не обязательно (не ОЧЕВИДНО), что он будет стараться мяч именно отбить.
Вот про эту сложность автор пишет много и подробно. И это очень нетривиально.