Я работаю в iZettle около четырех лет. Я не начинал свой путь в этой компании в качестве инженера по машинному обучению, а скорее перешел на него по мере роста внутри компании.

Мое формальное образование - компьютерные науки / программная инженерия, и на самом деле я работаю разработчиком программного обеспечения около 8 лет. Все эти годы работы инженером-программистом дали мне некоторые навыки, которые сделали мой путь к ML Engineering довольно специфическим. Я хочу поделиться с вами тем, на чем я хотел бы больше сосредоточиться при подготовке к роли, а также о том, как, на мой взгляд, мой опыт помог мне в этом переходе.

Как это началось

Во-первых - почему? Был ли я недоволен своей работой в качестве инженера-программиста? Считаю ли я, что быть инженером машинного обучения лучше, чем быть инженером-программистом? Ни в коем случае! Это просто вопрос того, чем я люблю проводить время, и это данные. Я занимаюсь программированием с 15 лет, и мне это всегда нравилось. Но больше всего я люблю использовать свою работу, чтобы понять мир. Как и у многих людей, у меня есть много «любимых проектов» идей, которые никогда не воплощаются в жизнь, но, тем не менее, когда я читаю этот список идей, я нахожу такие вещи, как: Создать инструмент для использования twitter данные для обнаружения стихийных бедствий, анализ данных из моих учетных записей в социальных сетях, чтобы понять мое собственное поведение, определение настроения в чатах друзей и т. д. Вы видите закономерность? Все эти проектные идеи стремятся понять некоторую ситуацию, и все они сосредоточены на данных. В то время у меня всегда был большой интерес к данным, и около двух лет назад я принял решение, что это будет моей основной работой. Я хочу думать, что машинное обучение было моим личным выбором, но в духе управления данными я могу сопоставить свое решение с верхушкой ажиотажа в области машинного обучения в последние годы, когда каждая техническая статья, которую вы читали, была посвящена некоторые инновации в машинном обучении, так что, думаю, я никогда не узнаю.

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

Процесс обучения

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

Кроме того, в свободное время я ходил на некоторые онлайн-курсы, такие как Специализация Deep Learning в Udacity, участвовал в соревнованиях Kaggle (должен признать, без особого успеха) и пытался реализовать некоторые из этих проектов. Я упоминал ранее.

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

После более чем 6 месяцев интенсивного обучения я присоединился к команде машинного обучения в iZettle.

Какие курсы и книги не учат?

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

Когда вы делаете проект на основе курса или книги, наиболее важная часть этого проекта уже сделана за вас. То есть: Что именно вы пытаетесь сделать? В ходе курса вам дается набор данных, целевой показатель, и все, что вам нужно сделать, это «массировать» свои данные и обучить модели получить хорошие результаты по целевому показателю.

Есть пара вещей, о которых вы не узнаете или даже не подвергнете сомнению в этой ситуации:

Определение проблемы. Как сформулирована проблема, чтобы она имела смысл с точки зрения машинного обучения? Что касается проблемы банкротства, я был шокирован тем, как много вопросов внезапно возникло у меня в голове, почти из ниоткуда: что значит предсказывать банкротство? Значит ли это, что завтра купец обанкротится? В течение недели? В течении месяца? Как мне узнать, кто из наших продавцов уже обанкротился? Это недостаток активности? А как насчет сезонности? Это какая-то внешняя информация? Как мне сопоставить это с меткой, по которой мой алгоритм может учиться?… Я так привык получать помеченный набор данных, что никогда не думал, что просто создание этой метки требует много размышлений, знаний предметной области и бизнес-соображений. И что в зависимости от того, как вы определяете метку, проблема и функции, которые вы можете использовать, полностью меняются.

Данные: я уже намекнул, что будет дальше, и широко известно, что получение правильных данных - сложная часть проблемы машинного обучения. Тем не менее, когда вы впервые сталкиваетесь с этой проблемой, это все еще поражает. Данные сложно получить, они беспорядочные, и не стоит им слепо доверять. Создание ярлыка фактически происходит после получения источников данных. В моем первом задании у меня было два набора данных из разных источников, которые мне пришлось объединить и сопоставить с нашим собственным набором функций для каждого продавца. Для каждого нового источника информации, который вы вводите, вам необходимо убедиться не только в том, что качество данных приемлемо, но и в том, что вы не вносите какой-либо предвзятости или, по крайней мере, учитываете его.

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

Оценка: у нас есть набор данных и наш ярлык. Мы начинаем моделировать и… как мы измеряем производительность? Вопрос не только в том, какую метрику использовать, но и в том, имеет ли она смысл для бизнеса. Здесь большую роль играют компромиссы. Мне никогда раньше не приходилось думать о том, какую метрику использовать для измерения производительности моей модели, это было само собой разумеющимся. Я буквально ждал, что мне скажут: используйте точность / ROC-AUC / и т. Д. Когда этого не произошло, и мне пришлось подумать о метрике и ее значении, я понял, насколько важно тратить много времени на размышления об этом, и был немного разочарован. с тем небольшим вниманием, которое уделяется этой теме в любой моей книге или курсе. Подумайте об этом: в зависимости от того, насколько плохо предсказывать истину, когда она на самом деле ложь (то есть ложное срабатывание), или любой другой вариант, подобный этому, вы можете захотеть сохранить минимальную точность или отзыв, независимо от того, как ваша общая метрика ( скажем, ROC-AUC) повышается или понижается. Это всего лишь пример, их много.

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

Что помогло мне в моем путешествии

Конечно, были и хорошие неожиданные моменты, в которых я мог использовать навыки, которые я приобрел за годы работы в качестве инженера-программиста. Чтобы перечислить некоторые:

  • Общие методы разработки программного обеспечения: во многих курсах много времени тратится на объяснение общих практик разработки программного обеспечения: контроль версий, базовое программирование, сосредоточение внимания на одном языке программирования (90% времени этот язык будучи Python) и т. д. Я много лет работал с программным обеспечением, и это то, в чем я уже не только практиковался, но и просто «во мне». Это значительно упростило мне начало тестирования и реализации идей и, надеюсь, распространение этих практик и вдохновение в мою недавно присоединившуюся команду.
  • Чтение и понимание чужого кода. Поскольку я всегда этим занимаюсь, мне очень комфортно читать код других коллег и, надеюсь, дать конструктивный отзыв.
  • Гибкость, когда речь идет о «правильном инструменте для работы». Инженеры по машинному обучению, как правило, застревают в инструментах, которые они используют, в зависимости от того, что им удобно. Хотя у меня нет данных, подтверждающих это заявление, я кое-что заметил. Поскольку я работал со многими языками и фреймворками, мне относительно легко (и интересно!) Опробовать новые инструменты и библиотеки, что, надеюсь, дает мне более широкий кругозор и набор инструментов для работы.

Так что делать?

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

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

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

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