Наука о данных (или DS) - важная горячая тема, в которой все еще определяется значительное количество «лучших практик». Не существует стандарта относительно того, как следует описать идеальный процесс разработки машинного обучения. В этом посте мы рассказываем, как мы с моей командой определили и настроили надежный конвейер для машинного обучения, чтобы масштабировать его здесь, в QuintoAndar! 🚀

Что такое информационный продукт?

В нашей компании вопрос о продукте данных - это продукт, основанный на машинном обучении 😄

Приведем простой пример:

Наш калькулятор арендной платы - это простой пример интересного информационного продукта, который мы разрабатывали до сих пор, и я собираюсь использовать его в качестве примера использования в этом сообщении в блоге 😃

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

Как насчет разработки чего-то (продукта), который рекомендует, за какую сумму следует арендовать недвижимость? Это идея нашего калькулятора арендной платы! 🎉

Машинное обучение - НЕ первый вариант

Если вы думаете, что машинное обучение даст вам 100% импульс, то эвристика поможет вам на 50%.

Следуя правилу №1 из 50 правил машинного обучения от Google, вам не нужно спешить за новейшими моделями, когда вы имеете дело с реальными проблемами. Более того, простая эвристика может дать вам много идей и помочь подтвердить вашу основную гипотезу. Например, в качестве интересующего вас дома можно взять среднюю арендную плату домов в аналогичном регионе.

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

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

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

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

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

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

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

Как уже говорилось, мы должны быть готовы отреагировать на эти изменения. Следовательно, как мы можем отслеживать все эти проблемы, эксперименты, гипотезы и модели и гарантировать, что мы движемся вперед быстро и воспроизводимым способом (вы знаете, «Это работает на моей машине» больше неприемлемо).

Представляем наш конвейер машинного обучения

Вдохновленные BigHead от Airbnb, Микеланджело от Uber и FBLearner Flow от Facebook, наша команда задумалась, как решить общие проблемы, которые обычно возникают при создании продуктов машинного обучения. На схеме показано, что у нас получилось:

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

Иногда создать функцию так же просто, как:

SELECT area 
FROM   house 
WHERE  id = 'someid'

или сложнее:

WITH base 
     AS (SELECT neigh.type, 
                Avg(c.rent / Cast(neigh.area AS DOUBLE)) AS region_avg_m2_rent 
         FROM   contract AS c 
                JOIN house AS neigh 
                  ON neigh.id = c.id_house 
                JOIN house AS h 
                  ON h.id_region = neigh.id_region 
         WHERE  h.id = 'someid' 
         GROUP  BY neigh.type) 
SELECT some_10_line_pivot_function(*) 
FROM   base

Несколько моделей машинного обучения могут использовать одну и ту же функцию. Таким образом, другим специалистам по данным / инженерам, возможно, потребуется выполнить такое же преобразование, чтобы использовать их в своих решениях. Другая распространенная проблема, которая может возникнуть, заключается в том, что разные люди могут работать над похожими идеями, используя немного разные данные, что приводит к избыточным функциям, используемым разными моделями, что иногда делает обслуживание трудноразрешимым. Следовательно, нам нужен был способ «централизовать» материал и сделать некоторые определения немного каноничными.

Магазин функций

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

Концепция магазина функций впервые была описана в 2017 году компанией Uber. Это централизованный и совместно используемый уровень данных, который содержит предварительно вычисленные готовые к модели функции, которые будут использоваться во время обучения или обслуживания.

Управление моделью

Красный прямоугольник обозначен как управление моделями, которое было разработано для улучшения управления и повышения качества моделей, развертываемых и используемых в производственной среде. Мы потратили некоторое время на разработку модельного шаблона машинного обучения, который заботится о стандартном коде и помогает специалистам по обработке данных сразу приступить к разработке модели. Нас очень вдохновил проект cookiecutter data science, но мы внесли в него некоторые изменения, чтобы он соответствовал потребностям нашего бизнеса.

С прошлого квартала мы разрабатываем внутреннюю библиотеку, которая нацелена на принятие большого количества распространенного кода DS (pandas; scikit-learn; библиотеки глубокого обучения) и создание конвейера машинного обучения на основе разработки функций. для моделирования развертывания и обслуживания. Это гарантирует воспроизводимость, и мы также можем проводить эксперименты менее болезненным способом.

Когда модель готова, мы запускаем ее в Model Training Service, также разработанную нами структуру, которая автоматизирует весь конвейер машинного обучения и автоматизирует DAG воздушного потока и выполняет следующие действия:

  • Он извлекает данные на уровне производства
  • Выполняет автоматическую настройку гиперпараметров с помощью байесовской оптимизации (предоставляется Amazon Sagemaker)
  • Обучает оптимизированную модель
  • Выполняет проверку модели (путем проверки переобучения и прочего)
  • Разверните его в производственной среде, сделав так, чтобы наш обслуживающий API указывал на недавно выпущенную модель.

Развертывание модели

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

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

Так что тяжелая «настройка» окупается!

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

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

Если вам понравился такой способ решения проблем машинного обучения, присоединяйтесь к нам!