Building Jaeger: наша система распределения драйверов, использующая машинное обучение и функции реального времени для оптимизации множества бизнес-целей

Проблема размещения

GO-JEK - это торговая площадка с десятками продуктов, сотнями тысяч водителей и продавцов и миллионами клиентов. Мы решаем, какой драйвер «распределять» миллионы раз в день, и этот процесс принятия решения является центральным для нашего бизнеса. У нас есть огромные объемы данных для оптимизации наших решений, но мы должны учитывать множество динамических целей, чтобы сбалансировать потребности наших водителей и клиентов.

Это одна из первых проблем, над которой взялась команда GO-JEK Data Science. Нашим первым решением была автономная модель машинного обучения (ML) и веб-служба для ранжирования драйверов. Это открыло новые горизонты для компании, было внедрено в производство в течение нескольких недель и оказало большое влияние на бизнес.

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

Тщательно отслеживая рыночную эффективность и справедливость драйверов, мы обнаружили, что модель последовательно снижает приоритетность некоторых драйверов. По мере роста GO-JEK мы масштабировались на большее количество сервисов, городов и стран. Стало сложно обрабатывать и A / B тестировать разные версии модели. Мы также были ограничены в нашей возможности использовать функции реального времени для принятия более оперативных решений о распределении ресурсов.

Jaeger: многоцелевая система распределения

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

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

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

Поскольку мы всегда хотим выбрать лучшего водителя для работы, у Jaeger нет фильтров по типу автопарка. Например, если у нас есть велосипеды и мотоциклы во вселенной 2W, оба этих парка будут считаться одинаковыми. То же самое и с обычными автопарками GoCar и таксопарками во вселенной 4W. Эти модели работают, чтобы обеспечить преимущества для клиентов и водителей - более близкое расстояние до потребителя сокращает время ожидания, а обслуживание водителей на основе их оценок обеспечивает более качественное обслуживание. Этот процесс полностью автоматизирован с помощью алгоритмов.

Модели машинного обучения

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

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

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

Обучение и развертывание такого количества моделей для различных целей, типов услуг и городов было сложной задачей. Тем более, что период стационарности нашего обучения относительно короткий, поэтому важно часто обновлять модели. Мы выполняем все наши пакетные ETL и обучение моделей, используя собственную платформу планирования под названием Clockwork, расширение воздушного потока, которое работает в Kubernetes. Мы используем mlflow для отслеживания различных версий моделей, гиперпараметров и показателей производительности. После обучения и проверки мы автоматически запускаем развертывание обновленных моделей.

Системный дизайн

Jaeger - это система, состоящая из модульных и легко расширяемых компонентов. Мы извлекли пользу из потрясающей работы нашей команды Data Science Platform, которая построила многие из фундаментальных блоков. В ближайшее время мы планируем открыть исходный код некоторых из этих проектов. Некоторые из наших Open Source проектов.

Лассо

Эта служба действует как оркестратор для каждого запроса ранжирования драйверов. Lasso выполняет HTTP-вызовы к нескольким микросервисам, которые извлекают функции или обертывают модели, отвечающие за фактическую логику распределения, которую мы можем реализовать на наиболее подходящем для задачи языке (в настоящее время мы используем Go и Java). Рабочий процесс Lasso и настройки по умолчанию в случае сбоя определяются с помощью шаблонов yaml и Go. Это упрощает добавление дополнительных моделей по мере появления новых бизнес-целей. Lasso также обрабатывает журнал каждого запроса и ответа, важного для оценки и отладки производительности модели.

Праздник

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

Мейстер

Meister или master Jaeger (любое сходство с ликером чисто случайно 😉) - это последний микросервис, вызванный Lasso. Он объединяет результаты различных моделей ранжирования драйверов, используя целевое программирование для оптимизации для наших многочисленных бизнес-целей. Jaeger-meister также управляет нашей структурой A / B-тестирования и обеспечивает гибкость в настройке того, какие модели применять в определенных местах, в разное время и даже для разных сегментов клиентов. При необходимости мы можем, например, найти компромисс между эффективностью рынка и справедливостью драйверов, просто изменив конфигурацию.

Вавилон

Мы абстрагировали различные методы байесовского A / B-тестирования в виде библиотеки Python, которую мы используем в пользовательском веб-интерфейсе для оценки влияния Jaeger на ряд бизнес-показателей.

Моделирование распределения заказов

0. Сбор данных
a. Каждые 10-20 секунд приложения для активных водителей отправляют данные о своем распределении в «Местоположение водителя на дороге» («DLOR»); и
б. DLOR отправляет данные о местонахождении водителя в систему распределения заказов.

1. Клиент делает заказ через приложение клиента, и наша система проверяет следующую информацию: (а) место получения; (б) место назначения; (c) купон на скидку (если есть); и (г) вариант оплаты

2. Система распределения заказов уведомляет квалифицированного партнера-водителя, который находится поблизости. «Квалифицированный водитель-партнер» - это тот, кто указан в списке на основании: (а) истории утверждения водителя и (б) истории выполнения заказа водителем.

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

4. Система распределения заказов отправляет клиенту уведомление о том, что заказ одобрен принимающим водителем, и отправляет данные о водителе клиенту.

5. Затем водитель связывается с клиентом.

Воздействие и следующие шаги

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

Еще одним ценным аспектом оказалась гибкость, с которой мы можем настраивать наши цели.

«Игра меняется, мягко говоря… Jaeger теперь является нашей внутренней платформой, которая может изменять распределение во всех направлениях, в которых мы нуждаемся. Эта гибкость имеет решающее значение ». - Надием Макарим, основатель и генеральный директор GO-JEK

В качестве примера мы использовали Jaeger для развертывания нескольких новых моделей распределения для борьбы с мошенничеством. Гибкость, предоставленная Лассо и Мейстером, сделала это возможным за короткий период времени практически без дополнительного кода.

Для Jaeger это только начало. Команда Allocation Data Science продолжит разработку новых и существующих моделей, а также более разумных подходов к их объединению. Следите за обновлениями.

Оставьте 👏, если вам понравилось то, что вы прочитали. Пингуйте меня с предложениями, отзывами. А еще лучше присоединяйтесь к нам. У GO-JEK есть множество невероятно крутых задач, которые нужно решить, и воспользуйтесь этим шансом поработать в идеальной кондитерской 😉. Посетите gojek.jobs, чтобы узнать больше.

Спасибо всем замечательным людям, которые внесли свой вклад в этот пост: Jawad Md, Yaoyee Ng, Arfiadhi Nugratama, Seah Le Yi , Лео Го Цзюнь, Гэвин Липер, Хардиан Лоуи, Маниш Мишра.