Описание
Здесь, в Бангалоре, можно найти рестораны со всего мира. От Соединенных Штатов до Японии, от России до Антарктиды, здесь вы найдете все виды кухонь. Доставка, рестораны, пабы, бары, напитки, шведский стол, десерты, которые вы называете, и в Бангалоре это есть. Количество ресторанов растет день ото дня. В настоящее время это около 12 000 ресторанов. С таким большим количеством ресторанов. Эта отрасль еще не насыщена. И каждый день открываются новые рестораны. Однако им стало сложно конкурировать с уже зарекомендовавшими себя ресторанами. Ключевые проблемы, которые продолжают создавать для них проблемы, включают высокую стоимость недвижимости, рост цен на продукты питания, нехватку квалифицированной рабочей силы, фрагментированную цепочку поставок и чрезмерное лицензирование. Эти данные Zomato предназначены для анализа демографии местоположения. Самое главное, это поможет новым ресторанам определиться с тематикой, меню, кухней, стоимостью и т. д. для конкретного места. Он также направлен на поиск сходства между районами Бангалора на основе еды. Набор данных также содержит обзоры для каждого ресторана, которые помогут определить общий рейтинг места.
Основная идея анализа набора данных Zomato состоит в том, чтобы получить четкое представление о факторах, влияющих на открытие различных типов ресторанов в разных местах Бангалора, совокупный рейтинг каждого ресторана. Бангалор, являющийся одним из таких городов, имеет более 12 000 ресторанов, в которых подают блюда блюда со всего мира. С каждым днем открытия новых ресторанов индустрия еще не насытилась, и спрос растет день ото дня. Однако, несмотря на растущий спрос, новым ресторанам стало трудно конкурировать с уже существующими ресторанами. Большинство из них подают одну и ту же еду. Бангалор - ИТ-столица Индии. Большинство людей здесь зависят в основном от ресторанной еды. так как у них нет времени готовить для себя. Поэтому при таком огромном спросе на рестораны стало важно изучать демографию места. Какая еда более популярна в населенном пункте. Вся местность любит вегетарианскую пищу. Если да, то является ли эта местность населенной определенной сектой людей, например. Джайны, марвари, гуджаратцы, которые в основном вегетарианцы.
Цель. Разработать модель машинного обучения для прогнозирования рейтинга ресторанов, принимающих заказы от zomato.
Предварительные требования. Этот пост предполагает знакомство с основными понятиями машинного обучения, такими как линейная регрессия, деревья решений, случайный лес, деревья решений с градиентным усилением, классификаторы One vs Rest, мультиколлинеарность, импутации на основе моделей, CNN, CNN-LSTM, настройка гиперпараметров, среднеквадратическая ошибка.
ПОКАЗАТЕЛЬ:
- Чтение данных — чтение CSV-файла и сохранение в кадре данных.
- Вменение отсутствующих значений. Использование вменения на основе модели, среднего значения и частоты заменяет значения NULL.
- Исследовательский анализ данных — построение графиков, таких как круговая диаграмма, встречная диаграмма и столбчатая диаграмма.
- Предварительная обработка данных — удаление стоп-слов и ненужных символов из текстовых данных.
- Векторизация. Используется контрвекторизатор, tfidfvectorizer и нормализатор для векторизации данных.
- Построение моделей. Построение различных моделей машинного обучения и глубокого обучения.
Обзор набора данных.Каждая строка содержит запись клика со следующими функциями.
1.url: содержит URL-адрес ресторана на веб-сайте zomato.
2. адрес: содержит адрес ресторана в Бангалоре.
3. название: содержит название ресторана
4. online_order: доступен ли онлайн-заказ в ресторане или нет
5. book_table: опция настольной книги доступна или нет
6. voices: содержит общее количество оценок ресторана на указанную выше дату.
7. телефон: содержит номер телефона ресторана.
8. местоположение: содержит район, в котором расположен ресторан.
9. rest_type: тип ресторана, такой как Quick Bytes, Casual Bytes.
10. блюдо_любимое: блюда, которые понравились посетителям в ресторане.
11. кухни: стили блюд, разделенные запятой
12. proc_cost(for two people): содержит примерную стоимость еды на двоих.
13. review_list: список кортежей, содержащих отзывы о ресторане, каждый кортеж состоит из двух значений, рейтинга и отзыва клиента
14. menu_item: содержит список меню, доступных в ресторане.
-› list_in(type): вид еды
-› list_in(city): содержит район, в котором указан ресторан
Реальные/бизнес-цели и ограничения:
-›Нет строгих требований к задержке.
-› Интерпретируемость не важна.
Показатели производительности. Следовательно, это проблема регрессии, поэтому наши показатели производительности — это среднеквадратическая ошибка. Мы постараемся максимально снизить значение MSE.
Чтение данных
(51717 , 17)
Этот набор данных имеет 51717 строк и 17 столбцов.
Проверка процента значений NULL для каждой функции
Заполнение пропущенных значений
Мы используем 3 разных подхода для заполнения пропущенных значений, т.е. вменение на основе модели, вменение на основе среднего и частоты
я. Метод вменения на основе модели: чтобы заполнить недостающие значения столбцов «оценка» и «блюдо_понравилось», мы используем вменение на основе модели.
Первоначально мы разделили исходный фрейм данных на 2 разных фрейма данных. Первый кадр данных, не содержащий нулевых значений, и второй кадр данных, содержащий только нулевые значения. мы построили модель, используя первый фрейм данных, и нашли недостающие значения второго фрейма данных.
Вот модель для прогнозирования отсутствующих значений столбца «dish_liked»
array(['Murgh Ghee Roast, Egg Fried Rice, Thali, Baran Biryani, Naan, Andhra Meal', 'Pizza, Mocktails, Coffee, Nachos, Salad, Pasta, Sandwiches', 'Pizza, Картофельные дольки, Country Feast, Pasta, Чесночный хлеб, лимонад', …, 'Торт Ferrero Rocher, шоколадный торт', 'Торт Ferrero Rocher, шоколадный торт', 'Торт Ferrero Rocher, шоколадный торт'], dtype='‹U134')
Вот модель для прогнозирования отсутствующих значений столбца «скорость».
массив([3.47331694, 3.48851577, 3.44792981, …, 3.58956974, 3.58956974, 3.58956974])
II. Вменение на основе среднего для поиска пропущенных значений
III. Подход, основанный на частоте, для поиска пропущенных значений
Мы проверили наиболее часто встречающиеся значения для этих столбцов и заменили отсутствующие значения столбцов наиболее часто встречающимся значением.
Исследовательский анализ данных
я. Анализ местоположения ресторана
Вывод. Рестораны различаются по местоположению. BTM имеет наибольшее количество ресторанов в Бангалоре, что 3108 ресторанов. На New BEL Road наименьшее количество ресторанов, за которым следует банашанкари. Btm имеет 17,24% от общего числа ресторанов в Бангалоре.
II. Анализ online_order
Вывод. Количество ресторанов, которые разрешают онлайн-заказы, больше, чем тех ресторанов, которые не разрешают онлайн-заказы. В Бангалоре 29342 ресторана принимают онлайн-заказы и 20098 ресторанов, которые не принимают онлайн-заказы. 59,65% ресторанов позволяют делать заказы онлайн.
III. Анализ рейтингов
Вывод. Большинство ресторанов имеют рейтинг от 3,6 до 3,9. 15% ресторанов имеют рейтинг около 3,7. Минимальный рейтинг для ресторанов – 1,8. В Бангалоре нет ни одного ресторана с рейтингом равным 5.
IV. Анализ количества магазинов для каждого ресторана
Вывод. Количество магазинов в Бангалоре различается. CCD имеет максимальное количество магазинов в Бангалоре, за которым следуют onesta и просто выпечка. Есть различные рестораны, в которых есть только 1 магазин, например SV Juice Corner Tiffin, Brown box и т. Д. Всего нет. магазинов CCD составляют 9,26% всех магазинов в Бангалоре.
v. Анализ ресторанов позволяет бронировать столики
Вывод. Есть 43 120 ресторанов, которые принимают бронирование столиков, и 6320 ресторанов, которые не принимают бронирование столиков. Большинство ресторанов могут быть ресторанами уличной еды, так как в них нельзя бронировать столик. 87,22% ресторанов не позволяют бронировать столики
ви. Типы кухонь, продаваемых большинством ресторанов
Вывод. Северо-индийская и китайская кухни — две самые продаваемые кухни в Бангалоре. Количество ресторанов, где подают блюда северо-индийской кухни, приближается к 20 000, а количество ресторанов, где подают блюда китайской кухни, приближается к 14 000.
vii. Вещи, которые нравятся жителям Бангалора
Вывод. Бирьяни — самое любимое блюдо жителей Бангалора. Есть около 12000 ресторанов, где бирьяни является одним из самых известных рецептов. Курица — второе по известности блюдо, которое любят в Бангалоре.
VIII. Анализ стоимости обеда
Вывод. В большинстве ресторанов Бангалора средняя стоимость на 2 человека составляет 561. Минимальная стоимость обеда составляет 40, а максимальная - 6000. Отсюда делается вывод, что есть все виды еды по разным ценам. доступно в Бангалоре
икс. Анализ голосов
Заключение Рестораны в Бангалоре получили в среднем 296,76 голосов. Минимальное количество голосов за ресторан 0, максимальное количество голосов 16832. Очень мало ресторанов в Бангалоре не имеют. голосов более 1700
Икс. Рейтинг ресторанов vs online_order
Вывод — Только для тех ресторанов, рейтинг которых составляет 3,7, количество ресторанов, принимающих онлайн-заказы, больше, чем ресторанов, которые не принимают онлайн-заказы. На все рестораны (чей рейтинг отличен от 3,7) больше нет. ресторанов, которые принимают онлайн-заказы, а не рестораны, которые не принимают онлайн-заказы.
xi. Тип ресторана
Вывод. Около 50 % ресторанов в Бангалоре относятся к ресторанам с доставкой. Наименьший тип ресторанов в Бангалоре принадлежит пабам и барам, буфетам, напиткам и ночной жизни. Также есть много ресторанов (34%), которые позволяют пообедать вне дома. Всего насчитывается 24728 ресторанов, относящихся к типу доставки. Количество пабов и баров составляет 669, что является минимальным среди всех типов ресторанов.
xii. Парные участки
Вывод из этого парного графика
- На графике голосов по сравнению с оценкой большинство ресторанов имеют более высокие рейтинги. голосов также имеет лучшие рейтинги
- На графике зависимости приблизительной стоимости от скорости ресторан с высоким рейтингом имеет более высокую цену.
- На графиках ставки против стоимости, ставки против голосов точки данных линейно разделены.
Резюме ЭДА
- Только в BTM есть 3108 ресторанов, что является самым большим количеством ресторанов в Бангалоре по сравнению с любым другим местом. BEL имеет наименьшее количество ресторанов, т.е. 725. Количество ресторанов в BTM составляет 17% от общего количества ресторанов.
- Количество ресторанов, которые принимают онлайн-заказы, больше, чем тех, которые не принимают онлайн-заказы. Еще 29342 ресторана принимают онлайн-заказы, а 20098 ресторанов не принимают онлайн-заказы.
- Существует разброс в оценках ресторанов от 1,8 до 4,9. Средний рейтинг ресторанов – 3,7.
- CCD имеет 93 магазина в Бангалоре, что является самым большим количеством магазинов среди всех ресторанов в Бангалоре, за которым следует онста с 85 ресторанами.
- Есть 43120 ресторанов, которые принимают бронирование столика, и 6320 ресторанов, которые не принимают бронирование столика. Большинство ресторанов могут быть ресторанами уличной еды, так как в них нельзя бронировать столик.
- Северо-индийская, китайская и южно-индийская кухни входят в тройку лучших кухонь, доступных в большинстве ресторанов.
- Курица - самое любимое блюдо жителей Бангалора, за ней следуют бирьяни и рис.
- Средняя стоимость питания в ресторанах составляет 561. Минимальная стоимость составляет 40, а максимальная стоимость составляет 4000. В целом, 87,22% ресторанов не разрешают бронирование столиков.
- Только для тех ресторанов, у которых рейтинг 3,7, количество ресторанов, принимающих онлайн-заказы, больше, чем ресторанов, которые не принимают онлайн-заказы. Для всех остальных ресторанов (чей рейтинг отличен от 3,7) больше нет. ресторанов, которые принимают онлайн-заказы, а не рестораны, которые не принимают онлайн-заказы.
- Около 50% ресторанов в Бангалоре относятся к ресторанам с доставкой. Наименьший тип ресторанов в Бангалоре принадлежит пабам и барам, буфетам, напиткам и ночной жизни. Также есть много ресторанов (34%), которые позволяют пообедать вне дома. Всего насчитывается 24728 ресторанов, относящихся к типу доставки. Количество пабов и баров составляет 669, что является минимальным среди всех типов ресторанов.
- Максимальное нет. рестораны, которые позволяют бронировать столики, имеют средний рейтинг 4,2. Максимальное количество ресторанов, в которых не допускается бронирование столиков, имеет средний рейтинг 3,7. Независимо от рейтинга, количество ресторанов, которые позволяют бронировать столики, меньше, чем ресторанов, которые этого не позволяют.
Проверка на мультиколлинеарность
Определение функции для проверки мультиколлинеарности методом vif
Использование кодировки меток, как показано ниже
Заключение. Таким образом, анализируя значения vif, мы можем сделать вывод об отсутствии мультиколлинеарности между любыми независимыми переменными, поскольку значения vif очень малы для каждой из независимых переменных.
Разработка функций
- Общее количество кухонь, доступных в каждом из ресторанов
2. Общее количество блюд, которые понравились клиентам. Он может быть прямо пропорционален рейтингу.
3. Услуги, предлагаемые ресторанами: ресторан может предоставить 2 основных услуги: онлайн-заказ и бронирование столов. Итак, здесь мы суммируем их оба, чтобы найти общее качество обслуживания в ресторане.
4. Эта функция используется для преобразования категориальных признаков в признаки, закодированные ответом. Он просто выполняет ЗАМЕНУ СРЕДНЕГО ЗНАЧЕНИЯ.
Сводка по проектированию функций
- Замена среднего значения для блюда_нравится — здесь сначала мы выполнили кодирование ответа, а затем заменили среднее значение для столбца блюдо_лайкед. Мы обнаружили, что его значение почти аналогично столбцу Rate.
- Замена среднего значения для кухонь. Здесь также сначала мы выполнили кодирование ответов, а затем замену среднего значения для столбца кухонь.
- Количество доступных кухонь. В этом столбце указано общее количество кухонь, доступных в каждом ресторане.
- Количество тарелок_liked — в этом столбце указано общее количество блюд, которые понравились клиентам в каждом ресторане.
- Предлагаемые услуги — если ресторан разрешает и online_order, и booking_table, то мы присваиваем предлагаемым услугам значение 2. Если ресторан разрешает любое из них, мы присваиваем значения 1. Если ресторан не разрешает никаких объектов, то мы присвоили значение 0.
Предварительная обработка функций
Мы удаляем стоп-слова и другие специальные символы, которые не являются обязательными, из столбца preprocessed_reviews. Наконец, мы заменяем исходный столбец обзора столбцом preprocessed_review.
Векторизация
Здесь мы используем countvectorizer для категориальных функций, tfidf для текстовых функций и нормализатор для числовых функций.
Счетчик для категориальной функции:
['нет', 'да']
Форма обучающего набора данных, одна горячая кодировка и соответствующая метка класса (23215, 2) (23215,)
Форма набора данных cv, одна горячая кодировка и соответствующая метка класса (11435 , 2) (11435,)
Форма тестового набора данных, одна горячая кодировка и соответствующая метка класса (17067, 2) (17067,)
Нормализатор для числовой функции:
Tfidf для текстовых функций:
Настройка гиперпараметров для алгоритма случайного леса
Здесь мы пытаемся найти наилучшее значение n_estimators и max_depth, которое обеспечивает минимальное значение mse для регрессионной модели.
RandomForestRegressor(bootstrap=True, ccp_alpha=0.0, критерий='mse', max_depth=Нет, max_features='auto', max_leaf_nodes=Нет, max_samples=Нет, min_impurity_decrease=0.0, min_impurity_split=Нет, min_samples_leaf=1, min_samples_split=2, min_weight_fraction_leaf=0.0, n_estimators=100, n_jobs=нет, oob_score=ложь, random_state=нет, подробный=0, warm_start=ложь)
Применение модели случайного леса с лучшими гиперпараметрами
0.027927709527412244
Модели глубокого обучения:
Теперь мы использовали несколько моделей глубокого обучения, чтобы предсказать точность модели. мы использовали lstm, lstm-cnn и cnn с conv1d. Хотя в этой проблеме модель машинного обучения работает лучше, чем модели глубокого обучения.
Наконец, мы сравниваем значения mse всех моделей, которые мы построили для прогнозирования рейтингов.
Использованная литература:
https://ijcat.com/archieve/volume8/issue9/ijcatr08091008.pdf
https://towardsdatascience.com/sentiment-analysis-for-hotel-reviews-3fa0c287d82e