[RU] Data Science failures - part 2

This is a longreed where I honestly describe what people typically do not mention on their LinkedIn profiles – failures. This post is in Russian, originally posted in VK.com.


Лонгрид про мои проекты в формате «true story», то есть почти как в баре. По каждой из историй хочется сделать какой-то вывод, порефлексировать, так чтоб это было полезно не только мне, но и вам, моим читателям. Если вдруг предпочитаете видео, то они есть как на русском (DataFest, 30 мин.), так и на английском (DataTalksClub, 1 час). А ниже – все текстом, я лично предпочитаю текст.

1. Не добавлял в LI: грузчик в “Никс. Компьютеры и комплектующие”

Формально – мое первое место работы. В реальности: самый упоротый собес в моей жизни

Вроде как в НИКСе в совете директоров был выпусник МФТИ, своего рода технократ: считал, что если все сотрудники будут шарить в математике, физике и программировании, то все будут ответственны, честны, продуктивны, 5-летка за 3 года и вообще удой коров x4. А поэтому и собесы в компании были… физтеховские. Независимо от желаемой позиции.

Начинался этот марафон с задания на тупую внимательность. Перед тобой лист A4 c тремя столбцами, в каждой около 60-ти 7-8-значных чисел. Надо просто в каждом столбце посчитать сумму, многоразрядный калькулятор прилагается. На это уходит около 35 минут (в 1 из 3 ошибся), после которых перед глазами уже все плавает. Рядом со мной тетка пришла уборщицей устраиваться, держала калькулятор чуть ли не в 1.5 метрах от себя из-за дальнозоркости, бубнила вслух каждую цифру, потратила 1.5 часа - и все три столбца неправильно.

Далее матан, физика и «гномики». С матаном проблем не было, уравнение Шрёдингера даже вспомнил, а похожих гномиков мне тогда слили, вроде одного только не одолел (к слову об эффективности практики «гномиков» на собеседованиях). Типичные: есть там остров, бревно, по нему может с фонарем пройти только один человек, папа за 2 минуты, мама за 3., и т.д., за сколько все семейство переберется. Рядом чувак на программиста собеседовался, слышал, как он тоже мучился, Шрёдингера вспоминал. В конце 5-го часа донесся громкий мат и стук в дверь - это бомбануло у амбала, который на грузчика пришел устраиваться.

В-общем, взяли. А дальше философия компании такая: каждый сотрудник должен пропахать как минимум 2 недели, похавать жизни с самого низа (а дальше физтехов брали уже учиться прогать и якобы быстрый карьерный рост). Я бегал между складом и магазином с флешками, наушниками и прочей хренью. Публика конечно… базарчики только про компы, гамы и девушек. Ну и мы, физтехи :) На 3-ий день все должны были сдать анализ мочи и крови, наркоманов отлавливали. У моего друга типа нашли следы амфетамина в крови, уволили и еще фотку на доску позора повесили.

Дело было после 1-го курса, побегал я так 5 дней - и погнал в Карелию на байдарках гонять.

Вывод: соберите как можно больше информации о том, как работается в компании, куда вы хотите устроиться. Не стесняйтесь вытаскивать будущих коллег на напитки, узнайте все из первых рук. Вдруг передумаете.

2. LinkedIn: 3d virtual reality application developer at Moscow Radio-Technical Institute

В реальности: первые шаги в Python

Московский Радио-Технический Институт

Курсе на третьем я пошел заниматься виртуальной реальностью. Выбор был между 3dsMax и разработкой на Python.

Чисто интуитивно выбрал Python и не прогадал. Хоть это формально был радиотех-институт с дедами в свитерах, софтина была задротская (граф сцены контролировался на низком уровне на C++ и обертка на питоне), я полгода писал всего лишь модуль подключения к БД – я всего равно был рад, понял, что программирование – моё (тут избегу лирическое отступление про информатичку в школе, как там все вслух матюгались, а класс старше нас заломал ей руки и заставил порево смотреть). Сейчас вспоминаю, смешно, конечно. В 19 лет был еще дитем. Только подписал договор на жалкие 8 тыс. р. в месяц, тут же мне сказали, что денег на самом деле нет, а я не встал, не вышел. Еще прикол, как член нашей команды накануне защиты проекта стал шантажировать и в итоге отхватил бабла из других проектов. Ну да ладно, заработал я свой полтинник месяцев за 7, купил сноуборд, все гуд, провалом бы этот опыт не назвал.

Вывод: все же если вам 19 лет или около того, для погружения в Python лучше пойти на стажировку в классную IT-компанию. И тут речь не только о Python, но о разработке в целом и best practices.

3. LinkedIn: Oracle BI developer & Java developer at RDTEX

В реальности: коммивояжер

Далее был системный интегратор, где я начал ботать Hadoop (спроса это не нашло), посидел в корпоративном учебном центре почти год и пошел клепать BI-отчеты. Проектировать всякие логические схемы для отчетности даже более-менее понравилось, порой думать надо. Тем не менее BI да под заказ – тухлая тема, если у челов хреновые хранилища, тут из говна конфетку не сделаешь. Перешел учиться прогать на джаве.

Самый эпик в этой истории были командировки в Пермь (тогда я еще не был знаком с будущей женой пермячкой). Минус 30, в 7 утра темно, такси тебя забирает, в 7-8 вечера темно, такси тебя забирает. Окон нет, солнца не видишь. Возвращаешься в отель – тебе с ресепшн звонят “Отдохнуть не желаете?” У нас еще проджект обсчитался, арифметику плохо ботал, не учел, что в выходные нам тоже надо в отеле жить, финанcы стали не сходиться, нас заставили еще в выходные работать. Разок даже взбунтовался - в воскресенье пошел с пермской шпаной в хоккей играть.

В-общем, увидел я свой горизонт развития эдак лет на 30 вперед – и ушел фултайм в аспирантуру. Выбор противоречивый, но я не жалею. Аспирантуру в этом рассказе все же пропущу, оставлю только индустрию. Про аспу vs. индустрию можно отдельно столько же написать, не менее саркастически, чем у Стругацких в “Понедельник начинается в субботу”.

Вывод: аккуратнее с командировками! И не соглашайтесь грести в выходные.

4. LinkedIn: Data Scientist at Mail.Ru Group

В реальности: отличный опыт

В мэйл меня схантили ближе к концу аспирантуры, так что пришел я в большую компанию с синдромом Ph.D.-гая. Это мне и помешало закрепиться в первой команде в группе поиска и рекомендаций. Были и мои косяки, но и пришлось переоткрыть для себя правило “не работайте с чудаками”, про это, кстати, писал в своем “жизнеописании” в слэке ODS. Проект в целом не был зафейлен, просто прогресс шел медленно. Я про это дело подробно рассказывал на DataFest 2018 в Минске (а также – про прочие типичные косяки в проектах по анализу данных), так что вкратце, не смакуя подробности: был большой крутой поисковый бустинг, использовали его заодно в рекомендациях контента – вот эти самые “читайте также” на куче площадок (dev.by, lifehacker, коммерсант, to name a few).

Эвристика в таких задачах проста, как дверь – отсортировать по ClickThroughRate (заранее исключив сиськи и непотребный контент). И в проде как раз было что-то типа недельного CTR в комбинации с месячным, чтоб тренд типа учесть, да все разбито на 10 половозрастных категорий. Ясное дело, у деревянных моделей офлайн результаты были сильно лучше. Но в онлайн-эксперименте бустинг упорно проигрывал эвристике.

Я проверил кучу ML-гипотез: active learning, лоссы специфичные для ранжирования, фичи всякие само собой – так и не мог побить надежно эвристику. Месяца через 3 только понял, что дело в инфраструктуре, а не в эмэль части. Стресс-тест показал, что бустинг порой тормозил на инференсе, не укладывался в отведенные 80мс, в таком случае подставлялся костыль (в поиске это называли ППН – поиск последней надежды). То есть по сути я в онлайне гонял не бустинг, а смесь бустинга с костылем Пофиксил – все взлетело. Фикс заключался в том, чтобы бустингу на переранжирование просто подавать меньше документов, чтоб он не захлебнулся. Но было поздно, отношения с боссом испорчены. Надо сказать, что примерно тогда же я стартанул курс mlcourse.ai и еще много делал по диссеру, так что я просто много на себя взвалил. В этой команде надо было фигачить фултайм, прям работать, к такому я не был готов после аспирантуры.

Я перешел в команду предиктивной аналитики.

Во второй команде работал в “атмосфере стартапа”. Классный веселый менеджер, мотивировал постоянно: “давайте-давайте, пилим же классный продукт!” – средство для аналитики аудитории мобильных игр, я начал там всю историю с “предиктами” – LTV, прогноз платежа, retention, поиск платящих гамеров, позже антифрод. Было весело, куча идей, гипотез, все с нуля. Но вот так чтоб что-то зашло и тем более денег принесло – пожалуй, нет. Кажется, на момент моего ухода успехом был только антифрод, а его мой коллега писал, хоть и над фичами вместе порой думали. Это было круто, как детектив – расследуешь, как себя ведут боты, сочиняешь фичи. Но что касается уровня разработки – стыдно вспоминать: никаких тестов, таблички с прогнозами рсинкали на сервак разрабу, он ругался, что айдишники не матчатся, что-то на ходу в проде подправляли, вкорячивали какие-то хаки.

Все же хороший опыт. Сейчас периодически пингую ребят из этой команды – процессы наладили, какие-то из моделек даже денег приносят.

Вывод: Data Science проект – это не Jupyter Notebook (в отрыве от описанной истории – вывод кэпский). Советую познакомиться со всеми инженерами, разработчиками, MLops так или иначе связанными с вашей моделью. Разберитесь во всех тонкостях работы модели, чтобы понимать, где ожидать подводные камни.

5. Не добавлял в LI: ML expert at a fintech startup

В реальности: “атмосфера стартапа”

Мэйл, конечно, хорош тем, что там много сильных людей, и в какой-то момент нетворк работает. Параллельно меня сманили в стартапчик, который пилят мэйловцы в основном. Чуваки начинали с майнинга биткоина – накупили 4500 (!) GPU, потом вдруг поняли, что девать их некуда, а биток майнить надо не на GPU. Переключились на онлайн-банкинг, позволяющий в один щелчок покупать биток в мобильном приложении. Заодно решили добавить AI в питч-дэки, и так я с нуля начал предсказывать сентимент новостей о криптовалютах. Я сходу с порога сказал, что ввязываться в прогноз курса битка не буду, а вот тональность – почему бы и нет.

Было классно, чистый рисеч в NLP, это было еще до того, как HuggingFace сделал трансформеры доступными, так что в основном я страдал со всякими бесячими репами на гитхабе, где полдня пытаешься тупо что-то запустить, чтоб завелось. Кажется, едва-едва побил tfidf-logreg. Разметку делали какие-то друзья-австралийцы, эксперты в криптовалютах, чатик был очень бодрый, конечно, но дороговато, я решил все же пересесть на mechanical turk. Конец истории – у чуваков наступили сложности с финансированием, весь Эй-Яй прикрыли. Сейчас я даже не помню, сколько я от них получал, но с SotA в NLP поиграться было весело, заодно пощупал руками второй стартап, в котором не хотел бы работать.

Вывод: стартапу (да и любой компании тоже) далеко не всегда нужен ML.

6. Data Scientist at KPN

В реальности: много свободы, мало импакта

Переезд в Нидерланды был своего рода мечтой, уж если не для меня, то точно для жены. Так что завалив собес с букингом и не найдя общего языка с Ebay, устроился в KPN – топ-1 телеком-оператор в Нидерландах. В целом, конечно, DS в такой матёрой, чисто голландской компании с кучей менеджеров – это как крутая тачка: дорогая, модная, но зачем нужна и как ее водить – непонятно.

Менеджер: «Хм… Data Science, круто.»

В нашей DataScienceLab был один проект, стабильно приносящий деньги – bad debt, скоринг покупателей в магазинах KPN (тут мини-кулстори, как я сам пострадал от модели своих коллег – мне не одобрили кредит на айфон, потом по фичам пробивал, это из-за пермита меньше года). И в целом один успешный проект – это карт-бланш на весь прочий прикладной рисеч. Много свободы, но мало ощущения импакта. Поэтому я тащил простенький NLP-проект с классификацией чатов по темам, а остальное время опять рисечил соту в NLP, учился берты крутить. В рамках Amsterdam Data Science запустил “кружок” по трансфер-лернингу в NLP, это меня и вывело на следующую работу.

В KPN была лучшая команда по человеческим качествам, влился как родной. Еще меня приятно удивил уровень разработки, все прям грамотно, именно в этой команде я освоил докеры-кубернетесы, CI/CD и все лучшие практики. После “стартапа” внутри мэйла – прям что надо. Еще отличный менеджер, который своими руками всю команду выстроил, за каждого воевал как за родного сына, участвовал в персональном развитии, но… его сожрали и выгнали на мороз. В целом это мирок менеджерский, со всякой корп политотой, так что роста в компании я вообще не видел, поэтому и рисечил себе в удовольствие, выбил кэггл-мастера и стал присматривать другие места для работы.

Вывод: +1 хороший вопрос на собеседовании: «Какие проекты у вас приносят деньги и сколько?».

Мораль

Как таковой морали нет. Сделал только для себя несколько выводов:

  • если хочешь своим эмэлем прям денег принести компании – предсказывай что-то напрямую связанное с деньгами (кэп)
  • свой ML-стартап тащить не готов – разорюсь, понятно просто по истории моих проектов в индустрии.
  • самопиар, self-marketing – это именно маркетинг, то есть с кучей вранья, включая многие истории про проекты и их импакт. Тем не менее, самопиаром заниматься стоит.