Причина написания этой статьи - существующая неразбериха с терминами. Она особенно заметна в процессе поиска работы и релевантных вакансий. Одно и то же название может обозначать принципиально разные роли, и, наоборот, одна и та же по смыслу роль меняет свое название от компании к компании. Было бы классно иметь систему названий без таких конфликтов.

Disclaimer: разделение ниже - это мое личное мнение, которое далеко не всегда совпадает с реальным положением вещей. Это лишь мое предложение, как разные роли можно разделить.

ML-engineer vs Data Scientist

Начну с ролей, которые, согласно моему опыту, путают чаще всего. Одна и та же позиция может в разных компаниях называться и как Data Scientist, и как ML-инженер. В результате, когда я недавно искал работу, приходилось указывать оба эти названия. Иначе был риск пропустить что-то интересное и подходящее просто из-за путаницы в названиях. Если текущее состояние “неправильное”, то где должно проходить разделение между терминами?

Мне кажется, что ключевое отличие между ролью ML-инженера и Data Scientist-a - в том, что считается целью и главным результатом работы.

  • Data Scientist “производит” публикации в научных журналах, как и другие ученые. Это объясняет слово “Scientist” в названии. Его основная цель - находить ответы на вопросы в науке о данных или корректно формулировать их. Например, предложить архитектуру глубоких сетей, лучше всего подходящую для улучшения качества изображений, описать наиболее эффективные техники аугментации данных для лучшей генерализации алгоритмов и т.д. На практике такие позиции часто имеют слово Research в названии. Applied Researcher, Research Data Scientist и т.д.

  • ML-инженер производит код, который решает задачи, используя машинное обучение. Это по определению более прикладная роль. Задачи здесь, это конкретные задачи компании, которые эффективнее всего решать с помощью машинного обучения. Важно отметить, что решением является не отдельная обученная модель, а именно код, система, куда входит и процесс подготовки данных, и метод обучения и дообучения моделей, и интерфейсы взаимодействия с уже существующими компонентами.

Отличие целей проявляется и в обязательных критериях успешности проекта. Например, для работы Data Scientist-а важна новизна предложенного подхода (нет смысла публиковать научные статьи, которые копируют результат более ранних статей). Для ML-инженера важнее не новизна, а эффективность решения. Даже наоборот, лучше использовать проверенные подходы, а из всех решающих задачу алгоритмов выбирать самый простой и популярный. Потому что обычно задача ML-инженера не просто найти ответ на вопрос здесь и сейчас, а предложить решение с продуманным будущим: как использованные ML-модели будут дообучаться, насколько они устойчивы к изменению распределения признаков в данных, доступны ли вообще необходимые данные в production-среде и т.д.

Еще одно важное замечание касается используемых данных. Поскольку в научной среде необходимо иметь возможность воспроизводить результаты и корректно сравнивать разные решения, для многих задач существуют benchmark датасеты. Т.е. довольно часто входные данные для задач Data Scientist-а определены и фиксированы. Для ML-инженера данные практически всегда не подготовлены заранее. Извлечение данных (как исторических, так и real-time), их предобработка, доступность и качество - открытый и нетривиальный вопрос. Именно его решение занимает львиную долю времени и часто улучшения именно здесь дают наибольший эффект.

ML-engineer vs Software Engineer / Software Developer

Если результатом работы и ML-engineer, и Software Engineer является код, то в чем разница между этими ролями? Очевидное различие, что ML-engineer использует ML для решения задач в дополнение к разработке ПО. Чуть менее очевидна разница в типичном процессе создания решения. Обязательной частью разработки решения с использованием ML является изучение данных (data exploration) и фаза экспериментов. Данные сами по себе - большой источник неопределенности. К сожалению, часто невозможно предсказать заранее, какое из решений даст лучший результат, пока они не протестированы на реальных данных. Это означает, что в планировании ML проектов необходимо закладывать время и ресурсы на эксперименты и на изучение данных. Это неизбежно, что часть разработанного кода в итоге не будет использоваться, само по себе это не является ошибкой планирования. Другое дело, что чем более опытный и квалифицированный ML-инженер, тем эффективнее идет процесс экспериментирования. Меньше времени уходит на тестирование подходов, которые точно не дадут нужного уровня качества, не смогут быть использованы из-за органичений на скорость и память, не совместимы с архитектурой уже существующих сервисов и т.д.

ML-engineer vs Data Analyst

Эти два названия не так часто используют для описания одних и тех же позиций, но все же хочется провести границу и здесь. Да, и ML-инженер, и Data Analyst в первую очередь работают с данными. Но если ML-инженер решает конкретную проблему или добавляет новую функциональность, то Data Analyst в первую очередь ищет в данных ответы на вопросы. Хорошие ответы на вопросы позволяют принимать качественные решения.

Особый случай, когда Data Analytics не только реагирует на вопросы от бизнеса, но и действует проактивно. Т.е. строит систему аналитики, которая позволяет находить ответы на такие вопросы еще до того, как они будут конкретно сформулированы. Хорошая система аналитики - это эффективные органы чувств, позволяющие компании ориентироваться в реальном мире и правильно действовать с опорой на факты об этом мире, т.е. на релевантные данные. Тогда тоже можно сказать, что Data Analyst производит код, а не ответы на вопросы.

Заключение

Еще раз скажу, что мое мнение не претендует на абсолютную истину. Моей целью было предложить разделение понятий, чтобы меньше было путаницы и непонимания. И нам всем приходилось тратить меньше времени и сил на просмотр нерелевантных вакансий.

Комментарии (1)


  1. Lelant0s
    24.07.2022 10:40
    +1

    Всё очень просто и логично: Data Scientist (несмотря на название) не имеет никакого отношения к публикациям в научных журналах, а занимается созданием ML-моделей. В его задачи входит обеспечение качества их работы с т.зрения используемых алгоритмов и технологий обработки данных.

    ML-engineer - это человек, который переносит созданную Data Scientist ML-модель на "промышленные рельсы", т.е. обеспечивает ее работу в рамках всей инфраструктуры, переписывая с условного Python или R на код, совместимый с остальной инфраструктурой.

    Data Engineer - это тот, кто и для Data Scientist и для ML-engineer подготавливает данные: выбирает источники, осуществляет разметку, настраивает "маячки" для оперативного отслеживания изменения структуры входящих данных и т.д. Его роль в маленьких проектах чаще всего выполняет сам Data Scientist.

    В свое время очень нужно было разобраться в этой классификации, заняло 1 день вдумчивого чтения источников на англ.языке. Согласен, что разброда в названиях много, но читая статьи на эти темы, важно иметь критический взгляд, и тогда будет понятно почему Scientist это именно Scientist (он создает модели, он изучает алгоритмы и их сочетания, он - математик), а Engineer это именно Engineer (он выстраивает структуру и увязывает работу систем).