Хабрахабр

Машинное обучение в Додо. Как запустить новое направление, если ты разработчик

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

Подготовка

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

Российская школа

Впервые я столкнулся с машинным обучением во ВШЭ — получал вторую вышку по направлению Big Data Systems, когда устраивался в Додо. Пройдя эту огромную хайповую тему по касательной, я не понимал, зачем вообще потратил три года жизни. И уж тем более не думал о том, как это может пригодиться в компании. Я тогда не был готов к этому вызову судьбы.

Чешский вояж

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

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

Американская мечта

Третья встреча стала судьбоносной. К нашей команде попала сложная, но интересная задача: разработать модуль кастомизированной пиццы для США. Это когда ты можешь заказать пиццу с любым набором ингредиентов, создать свой рецепт. В проекте надо было проработать всё: от изменений в архитектуре базы данных до клиентского кода на сайте. Мы вцепились в задачу и разработали продукт, который я считаю настоящей победой. Главная оценка прилетела в слак от Алёны, нашего CEO в США.

Что, если функциональность появится не в одной-двух пиццериях в штатах, а в большой сети? Модуль мы сделали, но я видел проблему в масштабировании. Я решил, что этот кейс может доказать необходимость развития машинного обучения в Додо. Как управлять таким продуктом, планировать запасы? Я чувствовал, что на этот раз и я, и компания готовы к запуску нового направления.

Один на один с машинами

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

Мне нужно было в быстром темпе погружаться в новую сферу. Мы с техдиректором понимали и не раз обсуждали, что мне нужно будет выйти из текущей команды и заняться развитием нового направления, показать, что это нам необходимо. Первый — вернуться к разработке в другой команде Додо. Я понимал, что если не получится, есть два пути. Не хотелось ни того, ни другого. Второй — обновить резюме на HH и искать новую работу. В этом состоянии я находился примерно три месяца, пока не зацепился за модуль дополнительных продаж.

Первый проект

Еще один спойлер: оказалось, что для запуска ML не нужно упарываться над чем-то сложным. Очевидно, не правда ли? Но это очень сложно понять в начале пути.

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

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

Цифры и пруфы

Я прикрутил логирование дополнительных продуктов и запустил новые предложения на выборке из 2 млн пользователей.

Надо было двигаться в сторону неавторизованных и новых клиентов. Выборка из пользователей — это лишь малая часть продаж. Выиграла идея рекомендаций на основе продуктов в корзине. Я перелопатил достаточно статей и литературы про Collaborative Filtering и разные алгоритмы предложений для пользователей. Item-Based-рекомендации и косинусная мера сходимости легли в основу новой, пусть и простой, но уже работающей модели.

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

Немного статистики.


10 самых продаваемых продуктов на сайте


10 самых продаваемых продуктов мобильном приложении


Рост продаж по неделям

Технический трейлер

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

Мы можем определить схожесть покупок одного пользователя с другим — для этого надо посчитать расстояние между векторами пользователей. Исходная таблица внизу показывает количество заказов с приобретённым товаром каждого пользователя.


Таблица продаж продуктов по клиентам

Расчёт евклидова пространства включает в себя вес и величину вектора:

где a и b это два разных вектора клиента из таблицы. Расстояние будет зависеть от выбранной метрики. Давайте посмотрим, как будет выглядеть это расстояние на абстрактном примере.

Построим матрицу их покупок.
Предположим, мы рассматриваем историю трех клиентов — a, b и c.

Рассчитав евклидовы расстояния между клиентами, мы получим следующие значения:

d(a,b) = 16,22;
d(b,c) = 13,38;
d(a,c) = 13,64.

Но если посмотреть на исходные данные, картина складывается противоположная. Эти значения показывают, что наиболее близки друг к другу клиенты b и c. Можем сделать вывод, что величина вектора имеет негативный эффект для расчета расстояний между клиентами. Клиенты a и b предпочитают заказывать больше Пепперони и периодически другие продукты, а клиент c предпочитает пиццу Супреме. Косинусная мера схожести как раз учитывает угол между векторами, отбрасывая значимость величины вектора:

Рассчитав по этой формуле расстояние, получим:
d(a,b) = 0,9183;
d(b,c) = 0,5848;
d(a,c) = 0,7947;

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

Это трейлер, подробности через два месяца.

Поиск своего

Сейчас мы находимся на стадии формирования команды, в которой будут специалисты по организации хранения данных, разработке моделей машинного обучения, вывода их в продакшн. Но главное, мы теперь лучше понимаем, зачем нам нужно всё это. Мы вольны делать по-настоящему крутые вещи, от организации интеллектуальной системы логистики и планирования запасов до фантастических идей автоматизации пиццерий с использованием технологий Computer Vision.

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

Показать больше

Похожие публикации

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»