Про собесы



Я тут собесы проходил весь последний месяц. Получил много нового опыта. Например, впервые проходил секции по ML-design. Они мне показались самыми интересными среди всех секций, которые у меня были по ML.



Как готовился:



- Почитал гайды

- Посмотрел видосы про интервью в Facebook и Google

- Посмотрел видосы про ML-design с Бабушкиным

- Выписал десяток разных кейсов и накидал по каждому из них ML-design



Забавно, что в видосах выше, при обсуждении результатов, интервьюеры жалуются, что кандидаты никак не используют доску при структурировании своих мыслей. Я вообще не понимаю как без неё можно обойтись. Для себя решил, что буду структурировать свои мысли по следующей схеме:



- Что хотим?

- KPI и ограничения

- Бэйзлайн

- Формализация задачи

- Данные

- Модель

- Метрики

- Потенциальные проблемы

- Деплой



Выписывал схему в файлике, который мне интервьюер шарил для конспекта. Если интервьюер не шарил файл, просил создать его или демонстрировал экран с открытым блокнотом.



Дальше начинал накидывать на эту схему свои мысли. Шёл сверху вниз, иногда отскакивал назад либо забегал вперёд. Все мысли постоянно были перед глазами. Тезисно фиксировал их в соотвествующих разделах. Получалось примерно следующее:



🤔 Что хотим? Описывал как я понял задачу и хотелки заказчика. Уточнял у интервьюера так ли это.



🤔 KPI и ограничения. Прикидывал, есть ли требование держать высокую нагрузку, нужен ли реалтайм, какие метрики хотим вырастить, а какие нельзя ронять (про такие метрики часто забывают).



🤔 Бейзлайн. Перед тем, как строить звездолет, надо понять а надо ли вообще его строить. Собираем бейзлайн на эвристиках и смотрим есть ли какой-то профит в АБ. В этой части я описывал такой бейзлайн.



🤔 Формализация задачи. Любая задача допускает разные формализации. К тому же ранжированию можно подходить с трёх сторон: pointwise/pairwise/listwise. Я описывал разные способы, выбирал какой-то один, обосновывал выбор и останавливался на нём. Рассказывал как буду варить таргет. Если по логам, прикидывал формулу для этого. Если с помощью разметки, описывал как она будет устроена, обязательно упоминал про active learning. Это модно.



🤔 Данные. Рассказывал про то, откуда буду брать фичи. Какие буду считать по юзеру, какие по айтемам, какие по контексту (время суток,локация и тп). Рассказывал про нейросетевые фичи и матричные факторизации, если они к месту. Важно проговорить как дробим выборку на train/val/test. По юзерам/айтемам/времени, почему именно так.



🤔 Модель. Скорее всего, итоговая система будет состоять из нескольких частей. Что-то в стиле: отбор кандидатов —> тяжёлая формула—> реранкеры. Проговаривал как будет работать каждая часть, на какую функцию потерь будем учиться. Как оцениваем качество разных частей и системы целиком.



🤔 Метрики. Проговаривал как будем делать приёмку. Если возможно провести АБ, то его схему и метрики для приемки.



🤔 Проблемы. В этот раздел я закидывал проблемы, о которых надо будет обязательно подумать. Лики в данных, feedback loop, низкое покрытие базы, холодный старт, что делать с новыми айтемами, дрифт в данных и тп



🤔 Деплой. Как считаем фичи. Какими пачками. Как передаём их в модель. Вместе с запросом или из какого-то key-value хранилища. Какая примерно будет нагрузка на сервис. Сколько машин просить у разработки. Жизненный цикл модели. Когда она умирает, какими метриками и мониторингами покрыть. Когда обновлять.



Когда готовился, расписал это для десятка кейсов. Первые три взял из видосов Бабушкина, остальные из личного опыта либо других источников



- Персонализация рекламы в социальной сетке

- Прайминг в маркетплейсе

- Мэтчинг товаров в маркетплейсе

- Рекомендательная система с видосами либо товарами

- Антифрод-система для поиска роботов и накруток в инстаграме

- Как в комментариях найти спам

- Поисковая система по товарам/документам

- Выдача саджестов в поисковой системе

- Предсказание точки, куда поедет человек при вызове такси

- Предсказание времени доставки заказа из ресторана