Каково это - искать работу аналитика данных в ноябре 2022
Всем привет! Цель этого эссе - помочь аналитикам лучше подготовиться к собеседованиям и, по возможности, избежать ошибок, совершенных мною в ходе поиска нового работодателя.
Краткое содержание
- Подготовка
- Собеседования и примеры заданий
- Итоги
Так получилось, что в начале ноября 2022 мы с SegmentStream решили прекратить наше сотрудничество. Нельзя сказать, что это было нечто неожиданное для меня или для работодателя. Наоборот, понимание того, что в наших отношениях наступил кризис, пришло еще летом. Однако с обеих сторон были предприняты определенные шаги (как оказалось, не очень успешные 😌) для исправления ситуации. Тем не менее, еще с начала осени я стал лениво следить за появлением новых вакансий на HH и с бОльшим интересом отвечать на сообщения рекрутеров в LinkedInn.
Вероятно, виной всему была боязнь провала с моей стороны и/или увеличившееся количество предложений на рынке в связи с известными осенними событиями в стране, но к плановой дате расторжения договора у меня не оказалось оффера на руках. Однако благодаря достигнутым договоренностям с работодателем я мог спокойной посвятить следующие два месяца поискам работы, исключив необходимость пристально следить за балансом своего банкового счета. SegmentStream 🙏
Подготовка
Первым делом еще до официальной даты “ухода” я подготовил примеры кода и графиков, наглядным образом демонстрирующие, что именно и как я делал в SegmentStream. По сути, это был Jupyter notebook с расширенным описанием маркетингового эксперимента в Яндекс.Директ. Ноутбук содержал все шаги от описание дизайна эксперимента до подведения итогов с демонстрацией разницы распределения метрики в группах. Плюс, подготовил ответы на самые частые вопросы рекрутеров на русском и английском языках.
Второе - я составил список вакансий, на которые хотел откликнуться. При этом, список был в порядке убывания значимости для меня. Строго говоря, я наметил одну цель и решил готовиться к собеседованиям по ней, а остальные выбрал в качестве запасного варианта и дополнительной практики прохождения интервью.
Третье - исходя из требований по списку, упомянутого выше, я составил перечень областей, где мне однозначно требовалось освежить/получить знания (например, оконные функции в Clickhouse, уверенная трактовка статистических методов при проверке гипотез, использование dbt).
Наконец, после составления списка из п.3 я отобрал материалы, которые, на мой взгляд, помогли бы мне лучше подготовиться к техническим интервью.
Вот то, что я использовал для подготовки
SQL
По сути, достаточно корректно воспользоваться поиском (например, site:habr.com sql задачи) чтобы найти интересные (и не очень) задачи, которые используют интервьюеры. Кроме этого, имело смысл, как минимум, найти эквиваленты знакомых мне по BigQuery функций в Clickhouse, так как во многих описаниях к вакансиям были упоминания использования именно CH диалекта.
Python
Прямо обе части. Да, задач много, но они легко решаются. Тут, скорее, дело в вашей усидчивости и нацеленности на результат. Я решил заниматься до 3х часов в день с небольшими перерывами. Сразу напишу, что усилия надо было приложить к некоторым другим типам упражнений на Питоне. Об этом ниже. Однако эти задачи мне кажутся отличным выбором в качестве разминки.
Плюс, вот здесь хороший список задач - https://realpython.com/quizzes/
Ниже будут дополнительные ссылки на Python-задачи.
Мат.стат и эксперименты
Года два назад я прошел замечательный курс по АБ-тестированию от ExpFest. У меня сохранились все материалы, включая pdf презентации, так что ничего искать не пришлось. Кстати, Искандер и Виталий с тех пор сделали курс еще лучше. Настоятельно рекомендую курс не только тем, кто “плавает” в базовых вещах по статистике и мат. анализу, но и тем, кто хочет прокачать уровень.
Здесь, на всякий случай, повторил все, что было в курсе: от трактовки и использования ЦПТ в ходе анализа результатов до способов решения проблемы ratio-метрик (смещение среднего) и уменьшение дисперсии.
Отдельный пункт - несколько видео на канале Karpov Courses. Больше всего рекомендую вот это
Очередная замечательная идея команды Анатолия Карпова! С удивлением, смешанным с разочарованием в собственных знаниях, обнаружил, что, ответив корректно на вопросы уровня Middle/Senior (2-ое интервью), я не смог грамотно сформулировать ответы на простые вопросы в 1-ом интервью.
Кстати, в комментариях к видео есть ссылки на материалы, по которым участники готовились к съемкам. Очень рекомендую просмотреть их в рамках подготовки к собеседованиям
Собеседования и примеры заданий
Кроме тех вакансий, что я выбрал сам, после публикации своего резюме на HH я регулярно стал получать сообщения от рекрутеров.
В итоге, я остановился на 4х вакансиях, которые показались мне наиболее интересными и хорошо подходящими моему опыту. Требования были везде +/- одинаковыми, но вот сами ка
мпании сильно отличались друг от друга по сфере деятельности.
Не буду писать названия компаний, так как далее я буду приводить примеры задач и освещать детали переговоров с рекрутерами и интервьюерами в ходе собеседований. Безусловно, конфиденциальность здесь должна быть соблюдена.
Поэтому вместо имен кратко опишу каждую компанию.
Компания А - разработчик очень популярного веб- и мобильного приложение в музыкальной сфере с офисом на Кипре
Компания B - IT-гигант РФ уровня Mail RU, Yandex, Avito, Ozon и т.д. с удаленкой или офисом в Москве
Компания C - стартап в сфере переездов и релокейта с офисом в Португалии
Компания D - крупный маркетплейс услуг в РФ с удаленным офисом или офисом в Москве
При этом я сам подался только на вакансию в компании А, остальные “прилетели” от рекрутеров в telegram.
Далее постараюсь описать развитие событий по ходу общения с компаниям по каждой из вакансий.
Screening-интервью с рекрутерами
Напишу сходу, что мои заготовленные ответы на частые вопросы рекрутеров очень здесь пригодились. Особенно тогда, когда собеседование проходило на английском языке. Это не только способствовало грамотной речи, но и помогало удержать разговор в нужном русле, а также сохранять нужный тайминг.
Вот список вопросов, на которые я заранее подготовил ответы:
- почему решили сменить место работы
- чем занимается ваша компания и какова ваша роль в ней
- чем гордитесь и что сделали бы по-другому за период работы
- что вы ищете на новом месте работы
Все интервью (кроме компании D) я проводил с рекрутерами. В компании D первое интервью было с ходу с людьми, которые являются потребителями аналитических отчетов (иными словами, те, на кого работают аналитики). Мне это очень понравилось, так как сразу дало возможность оценить, насколько комфортно будет работать с людьми, которые, по сути, оценивают твою работу.
Технические интервью
Все скрининг-интервью я прошел успешно. Далее предстояли технические интервью и задания. Ситуация была следующей:
Компания А - одно тестовое задание без онлайн-кодинга.
Компания B - два технических и одно маркетинговое интервью (3 в общем)
Компания C - одно техническое интервью с руководителем аналитики
Компания D - одно технические интервью с руководителем аналитики
Меня заранее предупредили, что все технические интервью будут проходит с онлайн-кодингом. То есть, прямо в ходе интервью предстояло написать код для решения той или иной задачи.
Так уж сложилось, что с онлайн-кодингом у меня всегда были проблемы.😌 Мне сложно быстро писать корректный код, когда на меня в установившейся после краткого знакомства тишине наблюдают люди, которых я вижу впервые в жизни, и которые, при этом, оценивают каждую строку кода на предмет моей проф. пригодности.
С другой стороны, это был интересный вызов. Сломать, наконец, традицию заваливать такого рода интервью. Поэтому я с удвоенной силой взялся за подготовку.
Первое техническое интервью
Первое интервью мне предстояло с компанией D (крупный маркетплейс услуг в РФ). И, конечно, на интервью было целых два человека, которые наблюдали за моим кодингом. "Что же, тем интереснее будет" - подумал я.
Без лишнего текста сразу перейду к задачам.
Статистика
Ниже - правильный ответ. Скрыл его, если хотите сначала подумать сами 🙃
Чтобы корректно ответить на этот вопрос, достаточно представить, каким должно быть распределение метрики, о которой идет речь в вопросе, при заданных условиях. Ответ - да, возможно. При заданных условиях распределение метрики должно быть сильно скошено вправо. При этом дисперсия у бугра на графике должна быть не очень большая, а в выборке должны быть такие выбросы (оценка сильно ниже средней), которые позволяют утянуть среднюю оценку от бугра влево.
Ответ:
Очевидно, что это задача на проверку стат. значимости полученных результатов. Здесь достаточно будет применить критерий долей (или z-test) для оценки. Важно не забыть о выбранных уровнях альфа (значимости) и бета (мощности). Вот хорошее видео про эту задачу -
SQL
Задания на SQL оказались легче, чем я ожидал.
Решение:
В первом примере можно, конечно, обойтись без подзапроса и сразу посчитать кол-во событий, но я привожу код так, как я написал его в ходе интервью. Это потом можно порефлексировать и написать лучше 😏
Python
Вот здесь меня ждал сюрприз. Задача была такой - написать функцию, которая проверяет, является ли число простым.
С первого взгляда задача совсем не кажется сложной. Но она ввела меня в ступор. Не знаю, может быть мне так повезло, или я работал как-то не так, но мне ни разу не приходилось сталкиваться с такой задачей в работе.
Даже не буду приводить решение. Оно очень быстро гуглится.
После минуты попыток мое терпение закончилось, и я, недолго думая, быстро просто загуглил решение и вставил его в ноутбук, где проводился тест. Конечно, можно было "написать" решение, подглядывая в найденный документ. Но зачем?
Не то чтобы это был плевок в сторону интервьюеров, но это им явно не очень понравилось. Я объяснил свое решение тем, что если бы мне потребовалось выполнить эту задачу (в чем сильно сомневаюсь), я бы просто нашел в поиске корректное и наиболее оптимальное для текущих условий задачи решение.
Позже в тот же день до меня, конечно, дошло, что смысл был не в проверке того, как хорошо я умею писать циклы, а в способности писать алгоритмы. Это понимание потом сильно пригодилось для других интервью. Об этом ниже
Собственно, на этом собеседование было окончено.
Второе техническое интервью
Второе интервью было с компанией C (стартап в сфере переездов и релокейта)
Я заранее знал, что интервью может быть на английском, поэтому повторил нужные термины в словаре. Сразу к задачам.
SQL
По сути, интервью было не столько на кодинг, сколько на подходы к решению той или иной тех. задачи. Нужно было описать, какие функции SQL я бы использовал для
- удаление дублей
- поиска максимального чека по когорте
- фильтрации результатов запроса с учетом особенностей таблицы
- плюс, вопросы на автоматизацию регулярных запросов в GBQ
Python
Снова задача на алгоритмы. Но на этот раз я уже был подготовлен. 😁 Да и сама задача была не в написании алгоритма, а в оценке его сложности O(n) Снова хабр в помощь https://habr.com/ru/post/104219/
Куда больший интерес у интервьюера вызвал мой подход к выбору метрик для проекта.
Здесь очень помог доклад Виталия Черемисинова по метрикам для продукта, презентацию к которому я когда-то успел получить. Вот ссылка
Третье техническое интервью
Наконец, в полной боевой готовности я подошел к самым сложным интервью с компанией B (IT-гигант РФ). Здесь нужно было пройти целых три секции - мат. стат, маркетинговые инструменты, код. Кратко опишу каждое интервью, иначе статья рискует стать очень длинной.
Мат. стат и эксперименты - здесь снова очень пригодились знания, полученные на курсе ExpFest. Необходимо было не только выбрать правильные метрики, но и оценить их эффективность для проведения тестов, а также пользу и интерпретацию для бизнеса. Особенный упор был сделан на выбор стат. критериев для метрики.
Маркетинг - необходимо было продемонстрировать знания того, как работают платформы онлайн-рекламы. А именно: какие есть стратегии, в чем разница между ними, как посчитать эффективность рекламы, как понять, что стратегия работает или не работает, какие метрики добавить в отчет
Код - достаточно простые задачи на SQL (джойны и оконные функции) и ДА, снова алгоритмы на Питоне. 😌
И снова у меня были проблемы с алгоритмами. Чтобы не совершить мою ошибку, очень настоятельно рекомендую порешать вот эти задачи (самые простые).
https://leetcode.com/problems/merge-k-sorted-lists/
https://leetcode.com/problems/linked-list-cycle/
https://leetcode.com/problems/add-two-numbers/
https://leetcode.com/problems/reverse-linked-list/
Плюс, вот это видео (обе части!!!)
Так, интервью было три, а компаний - четыре. Где еще одна?
А компания A (куда я сам подавался), к моему большому облегчению, была против интервью с онлайн-кодингом. Вместо этого я получил вот такое тех. задание.
Весьма простое задание, как мне показалось. "Что же, здесь есть где развернуться и показать свои навыки" - подумал я.
Обратите внимание, вам не даны примеры таблиц в csv, даны только поля.
Я создал целый ноутбук в колабе, который самым подробнейшим образом расписывает решения обеих задач. Плюс, сам нагенерил примеры таблиц, упомянутых во втором задании, чтобы сделать иллюстрации и графики.
Вот мое решение
Настоятельно рекомендую попробовать сначала решить самостоятельно. Так же намного интереснее!
Итоги
По итогам прохождения вышеописанных интервью я получил следующие результаты
Компания А
Я был практически уверен, что здесь все будет хорошо. А как же могло быть по-другому? Я создал целый ноутбук, расписал всю логику решений, создал графики, демонстрирующие подход, наконец, сам нагенерил данные для демонстрации. В итоге я получил вот такой фидбек:
Вот так! Получилось, лучшее - враг хорошего. Было, конечно, обидно. Но я подозреваю, что я слишком долго тянул с откликом на эту вакансию (пока готовил ответы на вопросы и свой ноутбук). Тем временем у команды появились другие кандидаты, которые решили задачи ничуть не хуже. Просто проще и быстрее.
Компания B
Несмотря на мои проблемы с алгоритмами, я получил приглашение на финальное интервью, а затем - оффер 🏆
Компания С
Приглашение на финальное интервью (на английском) и оффер.
Компания D
Отказ. Полагаю, весьма справедливо, так как я внаглую скопировал нагугленное решение прямо в ходе интервью, да еще и недвусмысленно поставил под сомнение целесообразность задачи 🙈
Итог - 2/4 - 50%. Так себе статистика, мягко скажем.
Спасибо огромное, если дочитали эту статью до конца. Я не планировал делать ее такой объемной, но аппетит, как известно, приходит во время еды.
Еще раз подчеркну следующее. Цель этого эссе - помочь кандидатам лучше подготовиться к собеседованиям на примере моих ошибок, а не раскрывать детали задач на тех. собеседованиях. Как видно из содержания статьи, ошибок я сделал немало! 😏
Всем добра!
P.S. Пока писал статью, от ещё одной компании прилетело предложение сделать тех. задание. Не буду подробно его расписывать, ограничусь кратким изложением каждого из пунктов.
- Дан csv файл, в нем перечислены маркетинговые кампании А,B,C,D. Для каждой кампании указан расход и кол-во лидов по воронке (stage 1, stage 2, stage 3). Вопрос - "какие выводы вы можете сделать по работе рекламных кампаний"
- На основе csv из пункта 1 создать дэшборд (хоть в google sheets) для демонстрации выводов.
- Написать возможные причины, по которым рекламные переходы в GA стали попадать в `direct / none`
- Простая SQL-задача на джойны и оконные функции
Добрый день. Спасибо за статью. Могли бы вы написать как вы пришли к профессии аналитика?
Татьяна, спасибо за оценку статьи.
Пришел к профессии через производственную необходимость, если так можно написать. Работая в SEO, мне нужно было регулярно предоставлять отчеты об эффективности своей работы, а также искать дальнейшие действия для роста траффика. Так и пришел к тому, что без анализа данных никуда :)
Добрый день, Дмитрий! Куда в итоге пошли? Кажется знаю компанию C, но не буду раскрывать интригу, уж очень было интересно читать, спасибо.