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

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

  1. Данные
  2. Очистка и предварительная обработка
  3. Моделирование
  4. Вывод

Данные

Я использовал данные Airbnb по Сиэтлу и Бостону, собранные Inside Airbnb и собрав общедоступные данные по этим городам с веб-сайта Airbnb. У нас есть три набора данных для этих городов:

  • listings.csv — сводная информация о жилье в Сиэтле, такая как местоположение, информация о хозяине, плата за уборку и гостей, удобства и т. д.
  • calendar.csv — данные календаря для объявлений: даты доступности, цена на каждую дату.
  • reviews.csv — сводные данные отзывов о объявлениях. Этот набор данных не будет использоваться в дальнейшем анализе.

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

Очистка и исследование данных

Листинговые данные содержали 7,4 тыс. листингов и 96 функций. Тем не менее, я сохранил отдельные функции и исключил функции, не имеющие большого значения для прогнозирования цен. Некоторыми из характеристик, включенных в анализ, были ответы хозяев и коэффициент принятия, почтовый индекс, тип собственности, тип комнаты, количество ванных комнат, количество спален, количество отзывов, правила отмены и место (Бостон или Сиэтл). Такие функции, как описание свойства, могли быть включены, но требовали некоторой обработки НЛП и, следовательно, откладывали их на потом. Объявления, не предлагающие опыт, также были исключены.

Полная пошаговая обработка данных и комментарии к ним доступны на моем Github.

Драйверы цен на объявления

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

В интересах экономии места я пропустил этап подготовки данных, но весь код можно найти в моем репозитории Github. Подводя итог, после очистки данных, проверки мультиколлинеарности и удаления коллинеарных признаков я выполнил однократное горячее кодирование категориальных признаков с помощью pd.get_dummies(). Разделение тестов поезда было выполнено с размером теста 0,2.

Чтобы понять взаимосвязь между листингом, ценами и независимыми переменными, я построил модель регрессора XGBoost, используя xgb.XGBRegressor(). XGBoost, вероятно, обеспечит наилучшую достижимую точность из-за использования ансамблевых моделей.

Поскольку это задача регрессии, выбранным показателем оценки была среднеквадратическая ошибка (MSE). Меня также интересовала точность, поэтому я также посмотрел на значение r в квадрате для каждой произведенной модели.

Я использовал BayesianOptimization() для настройки параметров модели XGBoost.

Результаты:

Давайте посмотрим на важность функции модели XGBoost:

Давайте посмотрим на функцию важности, предложенную моделью:

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

Понять настроение отзывов

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

Давайте попробуем анализ настроений. Анализ тональности — это метод обработки естественного языка, целью которого является получение «настроения» фрагмента текста: положительного, отрицательного или нейтрального. Это простой способ резюмировать содержание фрагмента текста, который легко понять. мы собираемся просто использовать встроенный анализатор в библиотеке Python nltk (набор инструментов для работы с естественным языком).

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

Давайте посмотрим на самые взвешенные положительные отзывы из анализа настроений:

Самые положительные отзывы действительно соответствуют некоторым хорошим отзывам.

Теперь разберем на примере самых негативных отзывов:

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

Давайте посмотрим на облако слов положительных и отрицательных отзывов.

Облако слов положительных отзывов:

Облако слов негативных отзывов:

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

Ключевые факторы, определяющие пользовательский опыт

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

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

Основываясь только на названии столбца, у нас есть несколько точек данных на основе отзывов, таких как столбцы review_scores_X, а также Reviews_per_month, first/last_review и number_of_reviews.

Метрика количества отзывов может быть смещена в сторону списков с большим количеством посетителей. Следовательно, рейтинг оценок и количество отзывов в месяц являются правильными показателями для понимания пользовательского опыта. нам нужно будет придумать способ объединить их для создания переменной результата. Мы достигли этого, перемножив две метрики вместе (после масштабирования переменной оценки обзора от 0 до 1).

Как и в случае с ценовым анализом, мы будем использовать регрессор XGBoost для регрессии новой созданной переменной отзыва (умножая масштабированный review_scores_rating на Reviews_per_month)как функцию всех выбранных атрибутов из данных списков. Пожалуйста, обратитесь к моему репозиторию Github для получения подробной информации о создании данных и обработке коллинеарности.

Результаты:

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

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