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

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

По сути, вам нужно стремиться к достижению следующих 4 целей:

  1. Создайте модель машинного обучения, которая работает и подходит для поставленной задачи.
  2. Четко представить и проанализировать свои результаты
  3. Проявите свой интеллект и внимание к деталям
  4. Пишите чистый, простой для понимания, воспроизводимый, в основном безошибочный код

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

1. Создайте модель машинного обучения, которая работает и подходит для поставленной задачи.

В общем, эта часть действительно зависит от задачи, поэтому вам нужно знать свое дело.

Некоторые общие выводы:

  • Убедитесь, что вы понимаете задание. Если вы не уверены, что от вас требуется, обычно можно попросить разъяснений.
  • При необходимости выполните некоторую очистку данных и настройку функций. Не просто добавляйте свои данные в модель и надейтесь, что это даст вам хороший результат.
  • Всегда следуйте лучшим методам машинного обучения. Среди самых простых не забудьте разделить данные на наборы для обучения / проверки / тестирования, если это необходимо. Не используйте свой тестовый набор ни для чего, кроме окончательной оценки производительности вашей модели и убедитесь, что нет утечки данных из нее в обучающий набор. Не переоснащайте свои модели, используйте набор для проверки, чтобы знать, когда следует прекратить обучение.
  • Если вы сомневаетесь в том, какую технику машинного обучения использовать, всегда выбирайте подход, который вам достаточно знаком, чтобы избежать досадных ошибок. Не пытайтесь произвести впечатление на интервьюера новейшими технологиями или фреймворками, если вы не уверены, что понимаете их. Хорошо реализованная модель линейной регрессии (при условии, что она вообще подходит для этой задачи) лучше, чем полностью ошибочная сверточная рекуррентная нейронная сеть или что-то еще.
  • Обычно у вас не будет много времени на эти задания, поэтому старайтесь выбирать более простые решения, если вы не уверены, что у вас достаточно времени для реализации более сложных. В любом случае вы можете начать с очень простой модели, а затем использовать ее в качестве основы для дальнейших улучшений. Иногда вы обнаружите, что простой подход столь же хорош и более эффективен с точки зрения вычислений. Или, если вам не удастся закончить сложную модель, по крайней мере, вам будет что представить.
  • Если задача имеет практическое значение, подумайте о том, как будет использоваться ваша модель и имеют ли смысл ее требования к вычислениям и доступности данных. Это покажет, что вы знаете о реальных ограничениях и способны с ними справиться.
  • Если это не запрещено правилами задания, попробуйте выполнить поиск в Интернете, чтобы узнать, как другие люди решали аналогичные проблемы. Однако не следует просто копировать и вставлять их код, не анализируя его, даже не потому, что интервьюеры хотят видеть ваши собственные навыки кодирования (в конце концов, много шаблонного кода обычно используется повторно), но, что более важно, потому что код ML имеет тенденцию действительно зависеть от мелких деталей задачи и данных, и то, что работает для одной проблемы, вероятно, потребует некоторых корректировок для другой.

2. Четко представить и проанализировать свои результаты.

Вы не поверите, но у меня было несколько случаев, когда соискатель просто присылал мне свой код без каких-либо объяснений. Что они ожидали от меня, запустить его сам и проанализировать для них результат?

Представление и анализ результатов являются основными навыками для любого инженера машинного обучения или специалиста по данным, поэтому убедитесь, что вы уделяете достаточно времени, чтобы продемонстрировать их.

Особенно:

  • Укажите, чего вы пытались достичь.
  • Проведите хотя бы некоторый исследовательский анализ ваших данных и сообщите о любых соответствующих выводах. Это также поможет вам создавать лучшие модели.
  • Объясните, почему вы выбрали именно ту модель, которую использовали.
  • Четко укажите, какие показатели вы использовали и почему, и какая эффективность вашей модели была основана на этих показателях.
  • Оцените качество своей модели по ее характеристикам. По крайней мере, выберите простое базовое решение (скажем, всегда прогнозирование наиболее популярного класса в задаче классификации или самого последнего значения при прогнозировании временных рядов) и убедитесь, что ваша модель может превзойти этот подход.
  • Обязательно посмотрите на некоторые фактические прогнозы вашей модели и убедитесь, что они разумны. Иногда люди подают модели, которые не работают, и заявляют о хорошей производительности, потому что их функция расчета метрик также содержит ошибку 😄. Не будь этим человеком.
  • Если можете, создавайте классные визуализации, но убедитесь, что это не происходит за счет того, что у вас недостаточно времени для создания хорошей модели.
  • Будьте готовы подробно обсудить свою работу.

3. Проявите свой интеллект и внимание к деталям.

Умный и внимательный - одни из важнейших качеств специалиста по данным. Каждая нетривиальная проблема требует размышлений. Никто не хочет нанимать человека, который просто изучил кучу моделей черного ящика и закидывает им данные в надежде, что получится что-то хорошее.

Вот несколько способов продемонстрировать эти качества (большинство из них - просто хорошее машинное обучение):

  • Обязательно обратите внимание на каждую деталь в описании своего задания. Если вы в конечном итоге сделаете что-то отличное от того, что вас просили сделать, это будет не лучшим образом. Опять же, если сомневаетесь, спрашивайте.
  • Выполняя исследовательский анализ, ДЕЙСТВИТЕЛЬНО исследуйте свои данные. Если это изображения, посмотрите на их несколько. Если это текст, прочтите его. Если это табличные данные, создайте графики, чтобы увидеть, как они выглядят и есть ли какие-либо аномалии. Четкое понимание структуры ваших данных приведет к лучшему проектированию функций и заставит вас выглядеть умным.
  • Работая с отсутствующими или поврежденными данными, убедитесь, что вы используете свой мозг. Не заменяйте отсутствующие данные недопустимыми значениями (более чем несколько кандидатов в наших заданиях заполнили данные о частоте пульса нулями 😄).
  • Уделите достаточно времени обсуждению своих результатов. Как изменение вашей модели или ее гиперпараметров влияет на производительность? Какие вычислительные требования необходимы для его запуска? Какие подводные камни возможны при производстве? И так далее.

4. Пишите чистый, простой для понимания, воспроизводимый, в основном безошибочный код.

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

  • Запустите точный код, который вы отправляете, на своем собственном компьютере и убедитесь, что он дает требуемые вами результаты. Довольно часто люди отправляют версию кода, которая не работает.
  • Перечислите детали среды, которую вы использовали (например, Python 3.6.8, TensorFlow 2.3.0 и т. Д.), Чтобы интервьюер мог запустить ваш код.
  • Если какой-либо из ваших алгоритмов (например, нейронные сети или деревья решений) включает случайную инициализацию, обязательно установите конкретное случайное начальное число для воспроизводимости.
  • Помещение кода в Блокнот Jupyter обычно является хорошим выбором (если иное не указано в назначении), поскольку это позволяет отображать вывод каждой ячейки вместе с кодом.
  • Убедитесь, что ваш код хорошо организован и каждая часть проста для понимания. При необходимости напишите несколько комментариев. Не переусердствуйте, вам не нужно комментировать каждую строку (например, если ваша строка «x + = 1», не пишите комментарий «# Добавьте 1 к x», это выглядит глупо).
  • Удалите все функции или блоки кода, которые вы в конечном итоге вообще не используете в своем окончательном решении, если вы не хотите обсуждать их в своем отчете.

Я надеюсь, что приведенное выше обсуждение поможет вам преуспеть в следующем домашнем задании по ML! Удачи!