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

Очень известным именем в этой отрасли является стартап (ныне компания с многомиллиардным оборотом) под названием Airbnb. Airbnb, основанный в 2008 году, начал свою деятельность в Сан-Франциско и быстро расширился, а теперь работает в сотнях городов по всему миру.

Содержание:

  1. Бизнес-проблема
  2. Отображение реальной проблемы как проблемы машинного обучения
  3. Анализ набора данных
  4. Ограничения реального бизнеса
  5. Показатели производительности
  6. Существующие подходы
  7. Мои улучшения
  8. EDA
  9. Разработка функций
  10. Моделирование
  11. Скриншот Kaggle
  12. Дальнейшая работа
  13. Ссылки
  14. Ссылка на репозиторий Github
  15. Профиль Linkedin
  16. Бизнес-проблема:

Airbnb стал очень популярным выбором среди путешественников по всему миру благодаря уникальным впечатлениям, которые они предоставляют, а также как альтернатива дорогостоящим отелям. В настоящее время он присутствует более чем в 34000 городах в 190 странах. Клиенты могут делать свои заказы либо через приложение на веб-сайте, либо с помощью приложения iOS / Android. Airbnb постоянно пытается улучшить этот процесс бронирования, чтобы облегчить его первым покупателям.

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

2. Отображение реальной проблемы как проблемы машинного обучения:

Это мультиклассовая проблема классификации, когда на основе пользовательских данных мы должны предсказать пять наиболее вероятных пунктов назначения среди любого из 12 вариантов - «США», «Франция», «Калифорния», «Великобритания», «ES». , IT, PT, NL, DE, AU, NDF и другие.

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

3. Анализ набора данных:

Набор данных взят со страницы конкурса Kaggle.



Бронирование новых пользователей Airbnb
Где новый гость забронирует свое первое путешествие? www.kaggle.com



а) Данные файлы:

train_users, test_users, сеансы, страны и age_gender_bkts.

б) Общий размер файла: 64,71 МБ

c) Общее количество записей: 2,13,451 (train_users), 62,096 (test_users)

г) первые два файла содержат индивидуальную информацию о пользователях, т. е. возраст, пол, метод_подписи, язык, страну_назначения (цель) и т. д. sessions.csv содержит данные веб-сеансов пользователей. Каждая запись в этом наборе данных идентифицируется с полем user_id, которое соответствует полю id наборов данных поезда. Мы находим несколько записей сеансов, содержащих информацию о разных временах, когда конкретный пользователь заходил в приложение Airbnb.

e) В файле sessions.csv содержатся данные о пользователях с 2014 года, тогда как в наборе обучающих данных есть записи, относящиеся к 2010 году. Это означает, что записи сеансов многих пользователей недоступны. Только 35% обучаемых и 99% тестовых пользователей имеют записи в наборе данных сеанса.

е) Последние два набора данных содержат более общую статистическую информацию о пункте назначения и пользователях соответственно.

4. Ограничения для бизнеса в реальном мире:

а) Важна низкая задержка.

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

в) Интерпретируемость результата особо не требуется. Поскольку пользователя не сильно беспокоит то, какие места рекомендованы.

5. Показатели производительности:

Поскольку это проблема классификации нескольких классов, мы можем использовать такие показатели, как логопотери нескольких классов и оценка F1. Но соревнование Kaggle потребовало от нас использовать показатель NDCG (нормализованная дисконтированная совокупная прибыль).

6. Существующие подходы:

а) Только 35% пользователей поездов имеют записи сеансов. Люди, которые использовали только данные поезда, а не данные сеанса, получили относительно низкий балл.

Пример:



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



7. Мои улучшения:

a) Использовал данные Train.csv и Session.csv для разработки функций.

б) CSV сеанса имеет несколько записей для каждого идентификатора / пользователя, где каждая запись фиксирует действия пользователей и время, потраченное на их выполнение на Airbnb. Мы сгруппировали все записи по каждому пользователю.

c) Использованы униграмма и биграмма векторизатора TF-IDF для определения распространенности и редкости каждого действия / устройства.

г) тщательно обработаны столбцы «возраст» и дата.

8. EDA:

Давайте сначала прочитаем файл train_users.csv и проверим столбцы.

Мы видим, что есть около 2,13,451 записи и всего 16 столбцов. Из этих 16 столбцов 3 столбца содержат нулевые значения. Давайте проверим, какой процент значений в этих столбцах равен нулю.

Имея в руках эту базовую информацию, давайте начнем наш одномерный анализ.

Одномерный анализ:

а) Целевой столбец: «country_destination».

Набор данных сильно несбалансирован. Большинство клиентов (58,35%) не бронировали. Среди них большая доля пользователей (29,22%) забронировала место назначения в США. Среди стран, указанных за пределами США, Франция («FR») имеет высокую долю 2,35%. Кроме того, значительный процент пользователей (4,73%) отправился в пункт назначения, отсутствующий среди предложенных вариантов.

б) Столбец: «Пол».

Мы видим, что в поле Пол есть 4 категории. Большинство пользователей (44,83%) не раскрыли свой пол. Среди тех, кто пользуется услугами, женщины незначительно больше, чем мужчины: 29,53% женщин и 25,5% мужчин. Небольшой процент (0,13%) пользователей выбрали другой в качестве своего пола. Это означает, что они могут принадлежать к недвоичной категории.

c) Столбец: «signup_method».

Большинство пользователей (71,63%) использовали базовый метод для создания учетной записи в приложении Airbnb. Это означает, что они могли использовать обычный пароль электронной почты в качестве метода регистрации. Среди оставшихся пользователей подавляющее большинство (28,11%) использовали Facebook для регистрации. Очень немногие проценты (0,26%) людей использовали Google для регистрации.

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

г) Столбец: «Язык».

Для большинства пользователей (96,66%) английский является языком. Поскольку данные поступают из США, такое поведение вполне ожидаемо, поскольку большинство населения этой страны считает английский своим основным языком.

д) Столбец: «affiliate_channel».

В этом поле объясняется, какой вид платного маркетинга используется для охвата пользователей, то есть какие каналы / категории используются. Среди 8 различных категорий "прямые" является наиболее полезной, так как она охватила большинство пользователей (64,52%). Процентная доля резко падает, когда мы переходим ко второй по важности категории «полубрендовые», которая охватила примерно 12,2% пользователей. Контент и ремаркетинг охватил очень небольшой процент пользователей - 1,85% и 0,51% соответственно. Они не очень полезны в качестве канала для продвижения приложения. Их следует либо отказаться, чтобы сэкономить на маркетинге, либо улучшить, чтобы охватить больше пользователей.

f) Столбец: «signup_app».

Большинство пользователей (85,6%) использовали Интернет для создания учетной записи. Из оставшихся iOS используется немного больше (примерно (на 5,98%) больше), чем Moweb и Android. '. Moweb и Android не являются популярными приложениями для регистрации, поскольку их используют только 2,93% и 2,56% пользователей соответственно.

g) Столбец: «first_device_type».

Самым популярным устройством, которое используется для создания учетной записи, является настольный компьютер Mac, которым пользуются 41,98% клиентов. За ним следует Windows Desktop с 34,07% клиентов. Среди остальных категорий iPhone более популярен, чем Android Phone в мобильном домене. Точно так же iPad более популярен, чем планшет Android в области планшетов. В целом, из этого графика можно сделать вывод, что продукты Apple более популярны, чем продукты Android, во всех категориях (настольные, мобильные, планшеты).

h) Столбец: «first_browser».

В этом поле отслеживается первый браузер, который клиент использовал для доступа к приложению. Значительную долю (29,91%) занимает браузер Chrome, за которым следует Safari с 21,16% и Firefox на уровне 15,77%. Из предыдущего сюжета известно, что «Рабочий стол Mac» является самым популярным устройством среди пользователей. Из этого графика известно, что большая часть клиентов предпочла Chrome в качестве своего браузера даже в своих продуктах Apple, а не собственный браузер Apple Safari. Еще один интересный факт: значительному проценту (12,77%) клиентов первый браузер неизвестен.

i) Столбец: «date_account_created»

Мы создали 3 столбца из этого поля даты, а именно «account_created_day», «account_created_month» и «account_created_year». После этого давайте проанализируем столбцы месяца и года отдельно.

«Июнь» (06) - самый благоприятный месяц среди клиентов для создания учетной записи, за ним следует «Май» (05). Наименьшее количество учетных записей создается в период «ноября» (11) и «декабря» (12). Это время является периодом праздников для большинства людей во всем мире, поэтому они могут действительно путешествовать в это время.

Количество созданных учетных записей увеличилось с 2010 по 2014 год. Для 2014 года только учетные записи, созданные в период с января по июнь, представлены в наборе обучающих данных.

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

В апреле (04) и мае (05) мы видим прирост в создании учетных записей за все годы. Аналогично для месяцев июнь (06) и июль (07) мы видим такое приращение. В августе (08) и сентябре (09) наблюдался прирост, но только в 2011 и 2013 годах, в то время как в 2012 году мы наблюдаем снижение числа. В период с 2014 г. по июнь наименьшее количество учетных записей создается в феврале, а наибольшее - в июне. Также, по сравнению с другими годами, в 2014 году создается значительно большее количество учетных записей за все месяцы.

j) Столбец: «возраст».

Как было показано ранее, 87 990 пользователей не раскрыли свой возраст. Проверим распределение значений этого столбца.

Проверка значений процентилей для обнаружения выброса в минимальном значении:

Значение процентиля 0,04 составляет 5,0, а значение процентиля 0,05 - 15,0. Это показывает, что любое значение процентиля ниже 0,05 является выбросом. Поэтому мы берем минимально допустимое значение возраста 15,0, а все остальное обрабатывается, как указано ниже.

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

Значение процентиля 99,29 составляет 110,0, а значение процентиля 99,39 - 1949 год (приблизительно). Таким образом, это показывает, что значение процентиля выше 99,29 является выбросом и обрабатывается посредством обработки, как указано ниже.

Мы видим, что некоторые люди указали возрастные значения как 19xx или 20xx.

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

Те, кто указал 20хх в качестве возраста, ввели любое произвольное значение в качестве своего возраста.

Мы обрабатываем значения поля «age» в любом из следующих 4 случаев:

  1. Заполните нулевые значения значением медианы, т. Е. 34.
  2. Мы заменяем любое значение меньше минимального найденного возраста, т. Е. 15,0, или любое значение больше 2007 г. на медианное значение, т. Е. 34.
  3. Мы сохраняем любое значение от 15,0 до 117,0 (возраст самого старого человека из ныне живущих) как есть.
  4. Для возраста больше 117,0 и меньше 2007 мы предполагаем, что пользователь ошибочно ввел год своего рождения вместо возраста. Поэтому мы вычитаем это значение из значения поля «account_created_year», чтобы получить их возраст на день создания учетной записи.
Max Age before processing :  2014.0

После обработки значений указанными выше способами мы видим:

Max Age After Year Imputation :  115.0
count    213451.000000
mean         36.006526
std          10.794212
min          15.000000
25%          32.000000
50%          34.000000
75%          35.000000
max         115.000000

Статистика по «возрасту» сейчас кажется намного лучше.

На этом мы завершаем этап одномерного анализа.

Двумерный анализ:

a) Давайте сначала разделим значения «возраста» на интервалы 10-летнего разрыва, например, «15–20», «20–30» и т. д.

Возрастной диапазон «30–40» составляет большинство населения почти во всех направлениях. Для «NDF», «США» и «других» мы видим, что второй по частоте возрастной диапазон пользователей составляет «20–30».

б) «country_destination» и «пол»:

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

c) «country_destination» и «account_created_month»:

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

На июль мы видим, что подавляющее большинство (56,41%) не бронировали. 31,02% пользователей сделали бронирование для "США". Такое поведение ожидается, поскольку набор данных сильно смещен в сторону «NDF» и «US».

Многовариантный анализ:

Анализируя "возраст", "country_destination" и "пол":

Для «NDF» мы видим, что «возрастное» распределение для «мужского» и «женского» пола одинаково. Это почти верно и для всех других направлений.

Но для пола «другой» мы видим, что существует довольно различный разброс переменной «возраст» по разным направлениям.

Например, разброс «возраст» для «другого» пола очень невелик для таких направлений, как «FR», «GB» и «NL». С другой стороны, он довольно велик для «CA», «IT» и «DE».

На этом мы закончили часть EDA.

9. Разработка функций:

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

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

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

У нас есть в общей сложности данные о сеансах 1,35 483 уникальных пользователей. Эти пользователи присутствуют в файлах поезда и тестирования.

Объединение строк данных сеанса для каждого пользователя:

Теперь у нас есть по одной записи для каждого user_id.

Создание функций сеанса:

Для поля «secs_elapsed» мы создаем 3 функции:

  1. Общее количество секунд, потраченных каждым пользователем во многих сеансах
  2. Среднее количество секунд, потраченных каждым пользователем
  3. Подсчет количества сеансов на пользователя

Для поля действия мы видим из снимка выше, что есть дубликаты в 'action', 'action_type ',' action_detail 'и' device_type '. Для части разработки функций мы создаем список только уникальных действий / устройств, которые пользователь выполнил / использовал при доступе к приложению.

Пример функций, созданных на основе полей «secs_elapsed».

Примеры функций, созданных на основе полей «действие / устройство».

Код для всех этих функций присутствует в репозитории GitHub, ссылка на который дана в конце.

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

Ранее мы видели, что у нас есть в общей сложности 1,35 483 записей о сеансах уникальных пользователей. Из них в учебном файле присутствует только 73815 пользователей. Остальное все присутствует в тестовом файле.

Мы будем моделировать только эти 73815 записей. После создания новых объектов объединенный набор данных содержит 31 объект.

Удаление тегов 'timestamp_first_active', 'date_account_created', 'action', 'action_type', ' action_detail ',' device_type ',' secs_elapsed ',' user_id ', потому что мы уже предварительно обработали эти функции и создали необходимые обработанные.

Создание X и Y и разделение данных Train на Train и CV для моделирования:

Давайте создадим горячие векторы для категориальных функций.

Таким образом, мы горячо закодировали все остальные категориальные особенности.

Векторизация TFIDF для текстовых полей:

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

Все эти 8 функций являются числовыми.

Объединение векторизованных элементов с оставшимися исходными 8 числовыми элементами:

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

На этом мы завершаем этап разработки функций.

10. Моделирование:

Мы применили различные модели машинного обучения к набору данных, который мы обработали ранее. У нас есть подходящие классификаторы логистической регрессии, наивного байеса, случайного леса и GBDT, такие как классификаторы XGBoost и LightGBM. Лучший результат теста был получен по модели случайного леса. Как ни удивительно, худший результат дал модель XGBoost. Мы настроили гиперпараметры для всех моделей и построили тепловую карту, чтобы увидеть, как работает настройка. Мы также отметили важность функций для моделей RF и XGBoost.

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

Лучшие параметры:

Построим график важности функции:

Мы видим, что возраст - самая важная характеристика. Хорошо, что мы тщательно обработали эту функцию. Кроме того, мы понимаем, что функции сеанса более важны, чем другие, потому что мы видим, что многие функции сеанса, такие как «view_booking_request», «booking_request_submit» и т. Д., Входят в число 25 основных функций, представленных на графике.

Мы построили тепловые карты между гиперпараметрами, такими как «max_depth» и «n_estimators», для наборов данных поездов и резюме.

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

Давайте посмотрим на снимок прогноза, который эта модель делает в тестовом файле.

11. Скриншот Kaggle:

Модель случайного леса дала лучший частный результат - 0,87883, что составляет почти 20% от рейтинга.

12. Будущая работа:

а) Более строгая настройка гиперпараметров.

б) Функции биграммы и триграммы с использованием векторизатора TF-IDF, который значительно увеличит размерность и сложность модели, но может дать лучший результат.

c) Использование методов глубокого обучения, таких как LSTM, для сбора информации о временных рядах из столбцов действий.

13. Ссылки:

а) https://rstudio-pubs-static.s3.amazonaws.com/197502_9bf4cf621a824e3093abc48d5a04e6de.html

б) https://www.diva-portal.org/smash/get/diva2:1108334/FULLTEXT01.pdf

в) https://www.kaggle.com/rounakbanik/airbnb-new-user-bookings:

г) https://www.kaggle.com/krutarthhd/airbnb-eda-and-xgboost

д) https://www.appliedaicourse.com/

14. Репозиторий Github:

Ссылка на мой репозиторий GitHub для этого тематического исследования -



15. Профиль LinkedIn:



Это все, что нужно для этого тематического исследования. Если у вас есть предложения по его улучшению, оставляйте их в комментариях .. !!