За пультом фуд-диджей: как Кухня на районе научила роботов составлять идеальное меню

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

За пультом фуд-диджей: как Кухня на районе научила роботов составлять идеальное меню

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

Больше года меню и прогнозы делал человек, но потом эти задачи передали искусственному интеллекту. Аналитик Саша Сновский и глава отдела Data Science Антон Потапов рассказывают, что такое фуд-диджеинг и почему роботы справляются с ним лучше людей.

Зачем нужен фуд-диджей

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

На практике это означает, что еженедельно надо закупать на производство разные продукты: в меню заменяется 70 % позиций.При этом на все блюда разный спрос, и на каждые семь дней нужен прогноз, сколько порций оливье или роллов нужно приготовить для конкретного района. На основании этих цифр составляется план закупок — например, сколько потребуется килограммов лосося для поке.

«Нашим фаундерам все говорили: „Это нонсенс, так делать нельзя!“ И крутили пальцем у виска, — вспоминает Саша Сновский. — “Вы что, будете перестраивать производство раз в неделю? Повара будут учить новые рецепты? Да ничего не выйдет, будет страдать качество!” Но у нас получилось».

«Вы будете перестраивать производство раз в неделю? Повара будут учить новые рецепты? Ничего не выйдет!»

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

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

За пультом фуд-диджей: как Кухня на районе научила роботов составлять идеальное меню

Разобраться в теме было непросто: «У меня диджеинг занимал почти все рабочее время. Приходилось бессчетное число раз ездить на наше производство и ходить по кухням конкретных районов — смотреть на процесс готовки. Еще я подолгу обсуждал все с нашим основателем Антоном Лозиным, который лично занимался ротациями до меня. Вопросов было много: сколько в завтраке должно быть блюд из яиц, как часто заменять сосиски, чтобы они не надоедали, — ну, вы понимаете».

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

«Я был такой живой нейросетью», — говорит Саша.

Коэффициент борща и другие задачи «живой нейросети»

Упрощать и выражать в числах Саше приходилось буквально все: «Однажды после периода бурного роста в ротацию впервые за пару месяцев попал борщ. Его прошлые продажи были не очень релевантны, поэтому мы решили оттолкнуться от наиболее похожей на него солянки, которую ставили в меню совсем недавно. Насколько борщ похож на солянку? В среднем, борщ популярнее солянки, значит, надо вычислить, какой коэффициент к нему добавить. Получается, например, 1,4. Так и считали.

Приходилось делать много допущений — но это работало. Приведу пример. Допустим, мне нужно составить план продаж мясной лазаньи на кухне на Большой Дмитровке в первую неделю декабря. В последний раз лазанья продавалась семь дней в августе в группе «Паста». И продавалась очень хорошо. Смотрим на лучшие дни за ту неделю: 15 продаж, 18 и 17. В среднем получается 17.

Окей, но с лета прошло много времени. Как понять, сколько лазаньи поставить в план? Посмотреть на динамику роста всей кухни на Дмитровке. Проверяем на группе «Паста», в которую входила лазанья. В той августовской ротации эта группа принесла нам 1 миллион рублей, а в последней завершенной — уже 1,2 миллиона. Получаем коэффициент роста, равный 1,2. Умножаем среднее число августовских продаж в день на коэффициент — получается 20. Это мы прикинули, сколько порций лазаньи мы продадим на Большой Дмитровке в декабре за один день».

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

По каким параметрам фуд-диджей оценивает блюда:

💪🏽 Сила — скорость продажи блюд. Чем быстрее конкретную позицию сметают с полок, тем она круче. Этот показатель создали, чтобы сравнивать блюда, которые заканчиваются в разное время.

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

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

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

Тем временем открывались всё новые и новые кухни. Подросло и меню на день: компания начинала с 50 блюд, потом их число выросло до 120. Работы больше, а ресурсов — всё столько же.

Команда Кухни на районе пыталась оптимизировать усилия, чтобы справляться с новыми объемами задач. Сначала сделали единую платформу, из которой можно управлять всеми ротациями на всех кухнях одновременно — диджейский пульт.

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

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

За пультом фуд-диджей: как Кухня на районе научила роботов составлять идеальное меню

Трудности перевода

Как ни странно, планирование — задача очень сложная для человека — оказалось для робота не такой большой проблемой. А вот сбор меню стал делом непростым.

Чтобы алгоритм научился понимать меню, все позиции разложили по разным «полкам»: «Домашняя еда», «Перекусы», «Кулинария», «Завтраки», «Обеды», «Ужины», «Паста» и так далее. Для начала робот учился делать меню на самых простых кейсах и с поддержкой людей.

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

Для робота логично было летом поставить в меню селедку под шубой

На этом нюансы не закончились. Например, была проблема с внешне похожими блюдами: «У нас есть тыквенный крем-суп и азиатский крем-суп с лососем. По составу это абсолютно разные вещи, для робота это блюда из параллельных вселенных. Но выглядят они почти идентично. Когда у человека на кухне есть всего пара минут, чтобы собрать приготовленное по пакетам, одинаковые на вид супы очень легко перепутать. Если поставить их в одну ротацию, клиенты будут получать не то, что заказывали. Такая же история с блинчиками: нельзя, чтобы одновременно в меню были блины с мясом и с яблоком. Для робота все это совсем не очевидно».

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

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

Все эти крупицы опыта команда пыталась вложить в робота. Рассказывает глава отдела Data Science Антон Потапов, также известный в компании как Палыч: «Начиналось все с того, что робот составлял меню, мы шли к бренд-шефу Наташе, а она нам говорила: „Ребят, у вас всё меню из одной курицы, никакого разнообразия“, — и мы всё переделывали. Комментарии от шефа мы превращали в новые правила для робота.

Теперь сгенерированное роботом меню на 120 позиций практически без изменений становится тем, что мы готовим для пользователей».

Сейчас в Кухне на районе робот-диджей автоматически составляет меню, планирует продажи и закупки — и всё это с минимальным вмешательством человека.

Робокоманда

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

Начинал робот-планировщик, как и робот-составитель меню, с малого: обучение проходило на фиксированных позициях. «У нас есть напитки в „Баре“. Они от недели к неделе почти не меняются — данных много, поэтому планировать их просто. На них робот тренировался. Довольно долго он был под полным Сашиным контролем: прежде чем выпускать его в самостоятельное плавание, пришлось добиться того, чтобы он работал как минимум не хуже, чем человек», — объясняет Антон.

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

Без метрик войну роботов не устроить

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

«Если за неделю на точке продалось сто борщей, а на следующие семь дней у нас там в меню солянка, то робот учитывает продажи борща, а также историю продаж солянки за все время плюс историю продаж всех супов на этой кухне. Эти данные позволяют с достаточной степенью точности сказать, как будет выглядеть план продаж на этой неделе. Такие подсчеты делаются под каждую кухню, каждый день и каждое блюдо», — говорит Потапов.

За пультом фуд-диджей: как Кухня на районе научила роботов составлять идеальное меню

Робобудущее

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

«Мы меряем богатство витрины в блюдо-часах: сколько какое блюдо провисело в приложении. Если у супа в идеале должно быть, условно, 40 блюдо-часов, то от него мы и отталкиваемся при аналитике. И результат стал лучше в разы», — говорит разработчик.

Автоматизация дает возможность персонализировать меню на каждую точку. «Если в каком-то районе борщ популярнее солянки, там мы будем ставить в меню борщ, а в соседнем — солянку, — объясняет Антон Потапов. — Автоматизация позволяет сравнивать блюда, меню и расписания, чтобы выяснить, что больше подходит клиенту.

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

2626
8 комментариев

Ребят, тут в сеть утекло рабочее место фуд-диджея

11
Ответить

Комментарий недоступен

5
Ответить

В фантазиях фуд-диджея, видимо, приняли волшебную таблетку)

5
Ответить

Аналогично. Меню не меняется.

3
Ответить

Комментарий недоступен

2
Ответить

Надо же как то отдел датасайнса окупить) вот имхо там не столько данных чтобы хайповать с датасайнтистами)

2
Ответить

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

Ответить