УДК 004

Составление рекомендательной системы для пиццерии

Негина Дарья Вячеславовна – студент Сибирского государственного индустриального университета.

Курьян Илья Сергеевич – студент Сибирского государственного индустриального университета.

Костырева Софья Андреевна – студент Сибирского государственного индустриального университета.

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

Ключевые слова: рекомендательная система, программирование на Python, программирование, Python.

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

Исследуемый набор данных содержит информацию о продажах вымышленной пиццерии за год. Датасет состоит из 4 таблиц в формате CSV [1]:

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

Перед началом работы необходимо загрузить необходимые библиотеки. В ходе работы потребовалось использование Pandas для создания, обработки и анализа данных в табличном формате [2] и Collections, который значительно упрощает подсчет объектов в коллекции [3]. На рисунке 1 представлен список библиотек.

1

Рисунок 1. Список загружаемых библиотек.

Первым делом необходимо загрузить 4 таблицы из датасета по отдельности, а после соединить их. На рисунке 2 показан код загрузки и объединения таблиц.

Первые четыре строки кода считывают информацию из соответствующих файлов orders.csv, order_details.csv, pizzas.csv, pizza_types.csv и сохраняют ее в отдельные датафреймы df_orders, df_order_details, df_pizzas и df_pizza_types. Далее происходят слияния таблиц методом merge() [4].

2

Рисунок 2. Код загрузки датасета.

Сначала объединяются датафреймы df_pizzas и df_pizza_types по общему столбцу 'pizza_type_id'. Результат сохраняется в масиив данных df_pizza. Затем объединяются датафреймы df_order_details и df_pizza по общему столбцу 'pizza_id'. Результат сохраняется в масиив данных df_order. В конце объединяются датафреймы df_orders и df_order по общему столбцу 'order_id'. Результат объединения сохраняется в масиив данных df. В результате получается единая таблица, содержащий информацию обо всех заказах, в том числе о типах пицц, их ингредиентах и количестве. Полученный набор данных содержит 12 столбцов и 48620 строк, он продемонстрирован на рисунке 3.

Рекомендательные системы - приложения, которые анализируют профиль клиента, чтобы определить, какие объекты могут заинтересовать их. Они необходимы для улучшения пользовательского опыта, с их помощью потребителю гораздо проще находить продукты, которые соответствуют их предпочтениям. Кроме того, рекомендательные системы могут сократить время, затрачиваемое на поиск нужных товаров, что повышает удобство использования сервиса [5, c. 278].

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

3

Рисунок 3. Рекомендательная система для пиццы по ингредиентам.

Первое, что делает система – выбирает необходимые для анализа столбцы, в данном случае в коде будут использоваться два столбика: наименование пиццы и ингредиенты, из которых эта пицца состоит. Выборка столбцов происходит при использовании функции iloc [6]. После этого происходит удаление дубликатов помощи команды drop_duplicates [7]. Всего программа выделила 32 различных пицц.

Далее проводится проверка на то, входят ли представленные пользователем ингредиенты в состав каждой пиццы, в случае если входят, они записываются в специально подготовленный DataFrame, проверка происходит при помощи команды contains [8]. После того, как были рассмотрены все пиццы из перечня, проходит проверка результата на пустоту, если в массиве имеется хотя бы один элемент – он выводится, иначе же пользователь увидит сообщение о том, что подобной пиццы не найдено.

Результат работы рекомендательной системы для пиццы по ингредиентам представлен на рисунке 4.

4

Рисунок 4. Результат работы рекомендательной системы по ингредиентам.

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

5

Рисунок 5. Программный код рекомендации по категории и размеру.

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

Затем система выбирает необходимые для анализа столбцы, в данном случае в коде будут использоваться четыре столбика: идентификатор заказа, размер пиццы, ее наименование и категория [6]. После этого происходит фильтрация по заказу, таким образом, из всех имеющихся данных остается только информация об искомом пользователе.

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

Далее составляется перечень пицц по заданной категории, для этого сначала берутся необходимые столбики – наименование и категория пиццы, а затем они чистятся от дублирующих значений [7]. После этого следует проверка на то, входят ли пиццы в самую популярную категорию пользователя, если да – они записываются в специальный массив [8].

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

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

6

Рисунок 6. Результат работы рекомендательной системы по категории и размеру.

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

7

Рисунок 7. Рекомендация по схожести пиццы.

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

Далее программа объединяет список ингредиентов по номеру заказа и отбирает информацию о конкретном пользователе, она преобразуется в массив слов. После этого идет подсчет того, сколько раз каждый ингредиент встречается в списке [3]. Затем проводится сортировка по убыванию при использовании лямбда-функции.

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

Результат работы рекомендации по схожести пиццы представлен на рисунке 8.

8

Рисунок 8. Результат работы рекомендации по схожести пиццы.

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

Список литературы

  1. Shi Long Zhuang Pizza Restaurant Sales [Электронный ресурс]: Kaggle, 2022 // URL:https://www.kaggle.com/datasets/shilongzhuang/pizza-sales/code (Дата обращения05.2023).
  2. Python Data Analysis Library [Электронный ресурс]: Pandas, 2023 // URL: https://pandas.pydata.org/ (Дата обращения05.2023).
  3. Counter() [Электронный ресурс]: HackerRank, 2023 // URL: https://www.hackerrank.com/challenges/collections-counter/problem (Дата обращения 24.05.2023).
  4. DataFrame.merge — pandas 2.0.2 documentation [Электронный ресурс]: Pandas, 2023 // URL: https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.merge.html (Дата обращения 25.05.2023).
  5. Имран А. 40 алгоритмов, которые должен знать каждый программист на Python – СПБ: "Издательский дом ""Питер""", 2022 – С. 278 – 293.
  6. DataFrame.iloc — pandas 2.0.2 documentation [Электронный ресурс]: Pandas, 2023 // URL: https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.iloc.html (Дата обращения 30.05.2023).
  7. DataFrame.drop_duplicates [Электронный ресурс]: Pandas, 2023 // URL: https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.drop_duplicates.html (Дата обращения 30.05.2023).
  8. Python String contains [Электронный ресурс]: DigitalOcean, 2022 // URL: https://www.digitalocean.com/community/tutorials/python-string-contains (Дата обращения 31.05.2023).

Интересная статья? Поделись ей с другими: