Boostaurant — цифровая платформа предиктивной персонализации клиентского обслуживания в общепите

Проект реализуется при поддержке Фонда содействия инновациям в рамках программы «Студенческий стартап». Договор 1105ГССС27/106900 от 17.10.2025.

Аннотация

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

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

Продукт не заменяет систему учёта или программу лояльности: он работает поверх данных системы учёта и добавляет получателя, которого у этих данных не было.

Область применения

Рестораны с полным обслуживанием, использующие систему учёта iiko, с базой от 500 постоянных гостей или от 1 000 заказов в месяц.

Состояние

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

Технические характеристики

Интерфейс официантаБот в мессенджере (прототип — Telegram, aiogram 3.x); установка приложений не требуется
Сервис рекомендацийПрограммный интерфейс на FastAPI
ХранилищеPostgreSQL; структура таблиц повторяет формат выгрузки iiko
Рекомендательные моделиSVD (библиотека Surprise), k-means (scikit-learn)
Выдача5 позиций меню с категорией, ценой и указанием основания рекомендации
РазвёртываниеDocker; отдельный экземпляр с собственной базой и моделями для каждого ресторана
Сетевая доступностьНи один порт не открыт во внешнюю сеть; бот работает в режиме long polling
Обновление моделейПереобучение по расписанию
Требования к серверу2 vCPU, 4 ГБ ОЗУ, 20 ГБ SSD, Ubuntu 22.04/24.04
Персональные данныеИмя, пол, e-mail, карты лояльности и бонусные балансы не собираются и не хранятся

Показатели прототипа

97,1 %

Доля корректных рекомендаций для гостя с историей заказов (целевое значение — не менее 80 %)

84,4 %

То же для гостя с единственным визитом

97,2 %

То же для гостя с тремя визитами

Синтетические данные: 300 гостей, 56 блюд, 12 категорий меню. Корректной считается позиция первой пятёрки, относящаяся к категориям меню, характерным для поведенческого типа гостя.

Особенности разработки

Три слоя рекомендаций

Матричное разложение применяется к гостю, включённому в обученную модель. Гостю с одним и более заказом, ещё не вошедшему в модель, рекомендации строятся по группе гостей со сходной структурой заказов (k-means). Гостю без истории выдаются популярные позиции. Официант видит, какой слой сработал.

Оценка — доля блюда в заказах гостя

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

SVD без учёта смещений

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

Признаки кластеризации

Средний чек и доли 12 категорий меню. Признаки давности и частоты визитов исключены: для нового гостя они вырождены и группируют гостей по активности, а не по вкусу.

Исключение аллергенов

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

Интерфейс отделён от расчётной части

Бот не содержит прикладной логики и обращается к сервису рекомендаций по HTTP. Замена мессенджера затрагивает только клиентский модуль.

Схемы

Архитектура платформы
Архитектура платформы
Схема базы данных
Схема базы данных
Определение гостя по номеру столика
Определение гостя по номеру столика через API iiko (проектная схема; в прототипе связь «столик — гость» имитируется)

Интерфейс официанта

Главное меню бота
Бот официанта: три действия
Профиль гостя
Профиль гостя по номеру столика
Рекомендации
Персональные рекомендации
Заметка официанта
Заметка официанта: типовые ограничения и свободный текст
Рекомендации после отметки аллергии
После отметки аллергии на молочное такие позиции исключены из выдачи

Экраны прототипа. Данные гостей синтетические.