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. Видимо мое резюме доросло до какого-то стартового предела и начался движ. Откликаюсь на аналитика и на HR. Везде свое резюме и сопроводительное письмо. Закинул резюме на hh. Мне начали писать HRы. Сами.
Тестовое задание по абстрактным временным рядам из Питера. Разобрал, попробовал и отбросил Ариму, побольше статистики и критериев, анализ остатков регрессии, базовое осознание гомоскедастичности. Накосячил со стратегией валидации. 2 часа технического интервью вместо запланированного часа. Лажанул на элементарных понятиях тервера. Проходил курс месяца 4 назад - уже повыветривалось. Отказ, есть более подходящий кандидат.
Собес и тестовое из известной IT компании на продуктового аналитика. Дана гиговая SQL база. Нужен отчет и прогноз продаж продукта на год. 3 дня на освоение SQL. Максимум статистики. Куча графиков. Регрессия на восстановленные признаки. Вышло хорошо, говорят впечатлил.
- "А откуда вы знаете такие техники?"
- "А как думаете, нужны такие статистические расчеты в реальном бизнесе?"
- "А вы готовы работать в режиме многозадачности, когда времени ни на что не хватает? А как?"
Пара дней ожидания. "Вам у нас будет скучно". Дежавю. Скучно! Ну ок
Тестовое на data scientist в местную сеть магазинов косметики и парфюмерии. Несмотря на неожиданное место, задачи вполне боевые и интересные. Тестовое - аналогичноe задаче M5 на kaggle от Wallmart. Разбираю, осознаю. Много предобработки данных. Параллельно идет предыдущее тестовое на прод. аналитика. Успеваю сделать приличный препроцессинг и EDA, но не хватает времени на нормальную модель. Делаю минимум, чтоб работало, описываю как космические корабли будут бороздить местный оперный театр, если применить хитрую метрику из М5 и доработать модель. Отказ. Есть более подходящий кандидат.
Еще пара приглашений совсем мимо специальности. Снова в Мегафон, только уже аналитик в экселе. И даже местный Водоканал. А я еще шутил, что пойду трубоукладчиком, если с data science не выйдет.
12. На этот момент ощутил, что надо перевести дух и за неделю до НГ ушел на отдых в осмысление произошедшего. Хэппи энда пока нет. Но динамика положительная. Погружаюсь в практику, резюме дописывается, еще бы платили…
Считаю, главное - идти вперед и не торопиться. Все будет.
Продолжение следует…