В этом посте я буду анализировать набор данных AirBnB с помощью визуализаций и моделей обучения. Для анализа я буду следовать процессу CRISP-DM на данных из Сиэтла.

Я хочу ответить на следующие вопросы из моего исследования данных:

  1. Что отличает хосты со статусом Superhost? Все ли суперхозяева соответствуют критериям, установленным для них AirBnB?
  2. В какое время года AirBnB наиболее популярны в Сиэтле? Какие сезоны праздников более популярны?
  3. Каковы наиболее важные характеристики листинга и как они влияют на цену?

Эти вопросы помогут нам в понимании бизнеса домена.

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

Изучение данных

Сначала мы рассмотрим кросс-графики между выборкой переменных в Listings. Мы видим, что многие переменные хорошо коррелированы, например, между price и reviews per month, а также number of reviews и count of host listings.

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

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

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

Подготовка данных

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

Первым шагом в нашем процессе будет удаление всех столбцов с более чем 50% пропущенных значений. Эти значения будет трудно вменять, поскольку большинство значений атрибутов будут угаданными. Затем для атрибутов с отсутствующими значениями более 30% мы будем вменять их индивидуально. Это Host Response Rate, Host Response Time, Notes, Access и Transit. Последние 3 значения являются текстовыми значениями произвольной формы. Поскольку мы не будем обрабатывать естественный язык, мы можем отказаться от них.

Далее мы смотрим на все категориальные атрибуты. Как мы увидим ниже, категориальные переменные различаются по типу. Существуют тексты произвольной формы, типы дат, логические значения, URL-адреса, массивы и валюты. Однако все они имеют тип String. Чтобы справиться с очисткой категориальных атрибутов, мы рассмотрим их индивидуально.

Мы рассмотрим каждый из этих числовых случаев индивидуально,

  • Атрибуты даты - факторизуйте даты в пронумерованной последовательности (pd.factorize)
  • Атрибуты Bool - заменить целочисленным представлением, 0 или 1 (pd.str.replace)
  • Атрибуты массива - кодирование с фиктивными переменными для каждого уникального значения (pd.str.get_dummies)
  • Атрибуты валюты - вырезать символы $ и , из значений и сохранить как целые числа (pd.str.replace)
  • Полнотекстовые атрибуты - для столбцов с небольшим набором уникальных значений замените фиктивными переменными (pd.get_dummies)
  • Оставшиеся полнотекстовые атрибуты - все эти столбцы будут атрибутами на естественном языке, и они нам не нужны. Так что мы их бросаем (pd.drop)

Наконец, мы позаботимся обо всех числовых атрибутах. Поскольку мы уже обработали все функции, для которых пропущено более 30% значений, для остальных атрибутов пропущено меньше значений. Анализ показал, что большинство из них находится в пределах 5%. Мы справимся с этим, заменив эти значения на их соответствующий режим (pd.Series.mode).

Теперь, когда у нас есть очищенный набор данных, мы можем изучить его и увидеть, как коррелируют некоторые атрибуты. Возможно, сейчас самое время увидеть взаимосвязь между функциями 1. Скорость ответа хоста и 2. Оценка результатов обзора. Согласно официальным рекомендациям AirBnB на их веб-сайтах, они используются для определения того, станет ли хост суперхозяином (наряду с некоторыми более конкретными критериями, по которым у нас нет данных для проверки). Мы можем построить их вместе, чтобы увидеть, как они соотносятся:

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

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

Затем мы смотрим на 2-й набор данных, Календарь. Это будет простой трехэтапный процесс: 1. Разложите даты на целые числа, 2. Замените логический столбец «доступно» на 0 и 1 и 3. Удалите символы из цены и превратите их в целые числа.

Давайте сделаем еще один шаг и добавим больше информации в набор данных Календаря. Поскольку все строки помечены датой, мы можем добавить столбец о том, существует ли в этот день праздник. Для этого мы можем использовать набор данных Federal Holidays.

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

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

Сгруппировав этот набор данных по праздникам, мы можем увидеть, как меняются цены на этих событиях. Здесь есть несколько интересных тенденций. Во-первых, поскольку набор данных смещен в сторону «без выходных», диапазон цен на него более разнообразен. Однако мы также видим, что определенные праздники влияют на цены, например, в целом высокий рост в преддверии Рождества, Нового года и Дня MLK Jr. Мы также видим еще один рост в преддверии Дня независимости и падение в периоды менее знаменательных праздников, таких как День Колумба. Это ответ на наш первый вопрос о том, что в определенные дни и сезоны года цены в Сиэтле обычно выше.

Данные моделирования

После очистки и обработки данных мы можем перейти к следующему этапу процесса CRISP-DM - ​​моделированию. Давайте определимся с постановкой нашей проблемы, что мы пытаемся предсказать и как мы стремимся к этому.

Постановка проблемы: Какие атрибуты влияют на цену и насколько они к ней относятся?

Что мы прогнозируем: Цена объявления.

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

Сначала мы разделяем данные на X и Y вместе с разделением на тренировку-тест. Затем мы обучаем его на модели и прогнозируем на ней значения. Для регрессии мы будем использовать RandomForestRegressor, потому что это метод ансамбля. При большом количестве имеющихся у нас атрибутов обучение нескольких деревьев даст хорошее среднее значение по нескольким обучающим тестам.

Для обучения и тестирования мы получаем следующие среднеквадратические ошибки: 53.441 и 139.667. Посмотрим, сможем ли мы уменьшить ошибку, используя уменьшение размерности с Анализом главных компонентов.

Полученные результаты

Для обучения получаем 35.735, а для тестирования 137.302. После тестирования другого диапазона общих основных компонентов, 100 основных компонентов дают наилучшую MSE. 100 функций по-прежнему являются значительным сокращением по сравнению с исходными 912 функциями, которые мы получили после очистки. Мы можем использовать результаты анализа основных компонентов, чтобы посмотреть, какие атрибуты вносят наибольший вклад в информацию.

Объясненная дисперсия по основным компонентам может быть получена с помощью pca.explained_variance_ratio_[:3]. Эти

  1. 0.357
  2. 0.239
  3. 0.226

Давайте подробно рассмотрим эти три основных компонента. Для главного компонента 1 мы бы получили их следующим образом:

Мы видим, что наиболее важными характеристиками, влияющими на цену, являются Host_since, maximum_nights, security_deposit, availability. 2-й и 3-й компьютеры показывают влияние таких атрибутов, как host_identity, amenities и calculated_host_listings_count. Это отвечает на наш третий вопрос о том, какие характеристики объявления лучше всего указывают на цену.

Развертывание

Наконец, когда мы завершаем наш проект, готовый код был размещен на GitHub здесь. Проект можно запустить как Jupyter Notebook. В файле ReadMe содержится дополнительная информация об установке и запуске.

Благодаря нашему анализу данных, визуализации и моделированию мы ответили на три вопроса о наборе данных AirBnB.

  1. Требования к суперхозяевам, опубликованные AirBnB, не всегда строго соблюдаются, и некоторые хосты имеют право на этот статус, даже не соблюдая всех критериев.
  2. Средние цены меняются от сезона к сезону, на цены также влияют праздники. Приближается Рождество к Рождеству, а к Новому году - по мере уменьшения доступности.
  3. Характеристики, которые больше всего влияют на цену объявлений, - это продолжительность активности хозяина, доступность объявлений, предоставляемые удобства, общее количество включенных ночей и залог. Эти качества помогают отличать дома с низкими ценами от дорогих.

Эти результаты дают много интересного понимания мира хостинга AirBnB.

Остается два вопроса: насколько эти выводы применимы к другим городам, таким как ваш?

И как ВЫ можете использовать эту информацию, чтобы лучше монетизировать свои объявления?