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

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

Я решил заняться проектом по науке о данных, чтобы реализовать свое стремление к специфичности поиска в Airbnb.

Данные

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

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

Часть I

Система рекомендаций №1

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

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

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

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

Это функция:

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

Развертывание модели в приложении Flask → Heroku

  • Первым шагом этого процесса является сохранение атрибутов для основных функций в рассоле. 🥒
  • Затем я создал py-файл с моей основной функцией (веб-API).

  • Другой файл .py включает в себя серверную часть приложения Flask.

  • Наконец, вот HTML для простого внешнего интерфейса.

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

Проверьте результат ниже! (И извините за примитивный внешний интерфейс.)



Часть II

Система рекомендаций №2

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

Что касается второй системы рекомендаций, набор данных Airbnb, с которым я работал, включал отзывы о объявлениях в наборе данных, который я использовал в части I, идентификатор рецензента и идентификатор объявления.

Давайте рассмотрим мой процесс:

В моем наборе данных не было рейтинга или настроений для отзыва, поэтому, чтобы понять настроение отзывов, я использовал пакет NLTK SentimentIntensityAnalyzer, который позволил мне рассчитать оценку настроения для каждого комментария к каждому списку в наборе данных из Части I. , Ниже вы можете увидеть оценку тональности для каждого комментария (строки), сгенерированного в столбце polarity в крайнем правом углу.

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

Прежде чем встроить оценки настроений в модель, мне пришлось преобразовать ее, чтобы оценки распределялись нормально. На графике ниже показано нормальное распределение.

Для создания надежной рекомендательной модели я использовал библиотеку Suprise. Библиотека была представлена ​​Николасом Хугом на PyParis 2017. Чтобы было ясно, Surpise не является рекомендательным движком. Это библиотека, которая позволила мне создать бенчмарк для использования следующих алгоритмов:

  • Grid Search CV, чтобы найти лучший параметр
  • SVD (Singular Value Decomposition) для прогнозирования рейтинга пары «пользователь-элемент» на основе истории рейтингов.

Я использовал RMSE в качестве метрики точности.

Grid Search CV смог определить лучший показатель RMSE 0,0995 с лучшими параметрами, показанными ниже.

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

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

Сводка

В итоге я получил две полезные системы рекомендаций. Я использовал первую систему рекомендаций, чтобы спланировать поездку в Остин, поскольку она могла дать мне лучший Airbnb на основе поискового запроса, состоящего из моих конкретных потребностей. Вторая система рекомендаций — это более стандартная система рекомендаций, основанная на схожих предпочтениях пользователей, которая широко используется такими компаниями, как Netflix, Airbnb, Amazon и т. д.

Ссылки:

Чтобы понять сложность библиотеки Surprise, я посмотрел следующее видео: https://www.youtube.com/watch?v=z0dx-YckFko

И я также сослался на этого замечательного блоггера по науке о данных Сьюзан Ли: https://towardsdatascience.com/building-and-testing-recommender-systems-with-surprise-step-by-step-d4ba702ef80b.

Репозиторий Github: https://github.com/AisOmar/Airbnb_recommendation