4 месяца борьбы за место DS джуна (перекатиться в 37 лет)
Делюсь собственным опытом, т.к., наверняка, это будет интересно таким же как я, но может и не только. Заранее предупрежу, многие термины и сокращения будут понятны только тем, кто имеет базовые знания и какой-то опыт в Data Science и Машинном обучении.
Итак, в наличии на август 2020:
8-летний бэкграунд в интернет-торговле и таргетированной рекламе
4 курса известной в ds-тусовке Machine Learning специализации Яндекса на курсере
пара курсов по нейронным сетям на «стэпике»
слегка взъерошенный в памяти вышмат
пара сертификатов по питону
Вот с таким багажом начал подбирать подходящие вакансии и готовиться отбиваться от предложений.
1. Поизучал резюме коллег по поискам, закинул пару тем и само резюме в ветку карьеры в slack Open Data Science (ODS) — получил обратную связь и вердикт, что такой джун никому не нужен. Поправил резюме, стало хотя бы визуально приятно. Но явное отсутствие практики бьет прямо в сердце. Откликнулся на несколько стажерских вакансий. Тишина, один отказ.
Тем не менее, легкий самопиар не проходит даром. Где-то упомянул, что проанализировал частоты упоминания необходимых технологий в текстах вакансий из ветки jobs в том же слаке ODS. Местный рекрутер просит скинуть резюме. Есть nlp вакансия в Гомеле. А там как раз повсеместные протесты и винтилово, видимо нормальные кандидаты ехать не хотят… я бы поехал, «но у меня нет знаний в nlp, даже вид сделать не могу». Мимо. Получил рекомендации по содержанию резюме.
2. То было время датафеста ODS и стажерского чемпионата от Мегафона на каггле. Это мой шанс…
Абстрактный, как мне показалось, рукотворный набор данных, 3 несбалансированных класса и метрика f1-макро. Идея: отбор фич по корреляциям с учетом множественной проверки гипотез, рандом форест и максимум внимания пропускам. На каждой фиче с пропусками своя регрессия, которая эти пропуски заполняет. Кажется я в топ-10…
3. Заглянув в телеграм чат DS в своем городе, обнаружил намечающуюся через неделю тусовку. И, о чудо, один всем известный в ODS человек как раз едет к нам и просит оказать ему услуги гида по городу. Ну т.е. просил 2 дня назад…, но мы ж все интроверты тут) пишу — я готов, если никого не нашел. Конечно, не нашел.
Через неделю забираю его от гостиницы, полдня катаемся по городу, общаемся, а вечером — в кальян бар, принадлежащий, кстати, на правах хобби ds-тимлиду местного банка. Все, естественно, пьют и в какой то момент начинают обсуждать судьбы джунов в моем конкретно взятом лице. Таня печалится, что джуны сбегают после первой же запиленной модели, хотя компания комфортная и вполне известная в узких кругах. «Я не сбегу — честно)».
4. Обьявлены результаты в Мегафоне. 14е место из около 100. Обидно. К тому же еще и днем сдачи ошибся. Думал что день еще есть. Пара часов экспериментов — усреднил 10 сидов своего же «леса» и обошел на привате победителя с каким то диким стекингом. Ну хотя бы так. Выложил итоговый ноутбук с указанием скора. Добавил в резюме и 14е место и наличие решения топ1.
5. Внезапно приходит приглашение на собес в Мегафон. Готовлюсь. Мой первый собес по специальности. За день перебираю все изученное ранее. В голове конечно же каша. Беседа на 1 час. Свяжемся с вами. Всю неделю гоняю в голове свои ответы. Статистика, p-value, гипотезы — вроде все ок. ROC AUC… «а что если она меньше 0.5?» — как же я затупил! Позорище… про регрессию пропусков почему то не рассказал… ладно. Приходит ответ: в 2х словах, иди еще поучись.
6. Пошел поучиться. Вписался в Deep Learning School МФТИ. Вдруг пишет Таня: «пришли резюме и немного о себе в свободной форме. Только учти, у нас решения долго принимают, к тому же в явном виде вакансий нет, нужно под тебя найти задачу. А кстати, не хочешь с нами в хакатоне поучаствовать?»
Конечно, хочу!
Начинается неделя подготовки к региональному этапу «Цифрового прорыва». Выбираем наиболее интересную задачу из имеющихся. Гео-ML. Таня вспоминает, что похожие задачи решались в соревновании на площадке «бустерс». Ушел искать. Отлично, есть видео с разбора топ-3 решений по поиску мест для банкоматов. Все законспектировал. Разобрался с библиотекой парсинга beautiful soup и с пакетным геокодированием, нашел бесплатный сервис для разработчтков, api, примеры. Качество чуть похуже Яндекса, зато бесплатно, быстро и много (100 тыс точек за пару минут — изи).
7. Хакатон. 48 часов решаем задачу для Почты России. Спим по 3 часа. Определить наилучшие места для размещения постаматов в Хабаровске, лучшие места для отделений почты, что еще можно продавать в отделениях. На выбор. Есть база всех строений города с координатами, с приписанным населением и типами организаций/обьектов в этом строении (магазины, банки, тюрьмы, библиотеки и тп). Критериев успешного решения нет. Каких либо финансовых данных для трейна нет. Придумайте сами… Прикольно.
Делаем ставку на максимально простое, но работающее и интерпретируемое решение. Интерактивная карта. Рекомендации по местам. Визуализация, какие соседние обьекты влияют на рейтинг каждого места. Все работает. На мне — обработка данных и банальная KNN модель. Спотыкаюсь на каждом шагу… работа с json форматами, парсинг, генерация фич с KNN — ощущаю себя невероятно тупым. Cтранно, но что-то в итоге получилось.
Смотрим презентации. Единственные, у кого все работает — мы. У соперников работают лишь презентации, как «космические корабли будут бороздить Большой театр». 5 место из 7 и приглашение во всероссийский финал. Очень странно, ну да ладно.
8. Улеглись страсти по хакатону, а я сел допиливать решение для Почты. Просто чтоб было и чтобы не чувствовать себя тупым, если снова встречусь с чем-то похожим. Разобрался со всем, где споткнулся. Json, knn, генерация фич, регулярки, github, catboost. Через неделю готова нормальная модель, прогнозирующая вероятности успешного размещения постаматов исходя из размещений постоматов конкурентов и всех прочих данных в наличии. Красивая карта с плавно перетекающими цветовыми оттенками вероятностей. Не стыдно показать. Заливаю на github. Добавляю в резюме.
9. Скидываю полюбоваться команде и на след. день получаю приглашение на собес в Танину компанию. Общаемся: я, Таня, ее босс и hr. «Обьясни как работают сверточные нейросети обычному человеку». Объясняю на примере красной кофточки hr. Hr смущённо улыбается. Остается впечатлить босса. Но его что-то смущает. Забавно, но вакансия опять в nlp. Морально я уже готов вливаться, чуть ли не на любых условиях, но виду не показываю. Ответим через неделю. Пишу Тане: «все плохо?». «Нет, наоборот. Но все зависит от решения босса.»
Через неделю босс решил, что человек на данную позицию в принципе не требуется.
10. Новый виток. Учусь в DLS МФТИ, прошел курс по основам linux, поставил себе kubuntu и напрочь забыл про винду, посмотрел о чем там вобще git. Разослал свежее резюме по всем джуновским вакансиям из ветки jobs за последний месяц, включая data аналитиков.
Собес в известном банке, построение риск моделей. В письме любезно указывают имена интервьюеров. Нахожу своего возможного начальника на ютубе с выступлением на 3хчасовой конфе о валидации риск моделей в банках. Узнаю, что «валидация» в банке имеет совсем другой смысл, и что в качестве метрики все используют Джинни, причем исключительно на регрессионнных моделях, потому что в случае отказа кому-либо надо уметь пояснить центробанку причины этого отказа. И модель худо-бедно должна их давать.
Собес. Аж 5 начальников. Самая главная начальница спрашивает исключительно о прошлом опыте в бизнесе. Изредка прилетают вопросы, типа «какие метрики качества ты знаешь?». В конце самая главная начальница заключает, что скорее всего мне у них будет скучно, но они подумают. Если через неделю ответа не будет, то не будет никогда. «Вы уж извините.» Прикольно)
11. Видимо мое резюме доросло до какого-то стартового предела и начался движ. Откликаюсь на аналитика и на ds. Везде свое резюме и сопроводительное письмо. Закинул резюме на hh. Мне начали писать HRы. Сами.
Тестовое задание по абстарктным временным рядам из Питера. Разобрал, попробовал и отбросил Ариму, побольше статистики и критериев, анализ остатков регрессии, базовое осознание гомоскедастичности. Накосячил со стратегией валидации. 2 часа технического интервью вместо запланированного часа. Лажанул на элементарных понятиях тервера. Проходил курс месяца 4 назад — уже повыветривалось. Отказ, есть более подходящий кандидат.
Собес и тестовое из известной IT компании на продуктового аналитика. Дана гиговая SQL база. Нужен отчет и прогноз продаж продукта на год. 3 дня на освоение sql. Максимум статистики. Куча графиков. Регрессия на восстановленные признаки. Вышло хорошо, говорят впечатлил.
— «А откуда вы знаете такие техники?»
— «А как думаете, нужны такие статистические расчеты в реальном бизнесе?»
— «А вы готовы работать в режиме многозадачности, когда времени ни на что не хватает? А как?»
Пара дней ожидания. «Вам у нас будет скучно». Дежавю. Скучно! Ну ок
Тестовое на data scientist в местную сеть магазинов косметики и парфюмерии. Несмотря на неожиданное место, задачи вполне боевые и интересные. Тестовое — аналогичноe задаче M5 на kaggle от Wallmart. Разбираю, осознаю. Много предобратотки данных. Параллельно идет предыдущее тестовое на прод. аналитика. Успеваю сделать приличный препроцессинг и eda, но не хватает времени на нормальную модель. Делаю минимум, чтоб работало, описываю как космические корабли будут бороздить местный оперный театр, если применить хитрую метрику из М5 и доработать модель. Отказ. Есть более подходящий кандидат.
Еще пара приглашений совсем мимо специальности. Снова в Мегафон, только уже аналитик в экселе. И даже местный Водоканал. А я еще шутил, что пойду трубоукладчиком, если с data science не выйдет.
12. На этот момент ощутил, что надо перевести дух и за неделю до НГ ушел на отдых в осмысление произошедшего. Хэппи энда пока нет. Но динамика положительная. Погружаюсь в практику, резюме дописывается, еще бы платили…
Считаю, главное — идти вперед и не торопиться. Все будет.
Продолжение следует…