Предсказать клиентов, которые, скорее всего, откажутся от музыкального сервиса Sparkify.

Обзор проекта

Sparkify — это сервис потоковой передачи музыки, такой же, как Spotify и Pandora.

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

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

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

Шаги для прогнозирования оттока

  1. Исследование данных
  2. Определение оттока и маркировка данных на основе определения оттока
  3. Разработка функций
  4. Преобразование данных, разделение данных и обучение модели
  5. Построить модель и предсказать точность модели

Исследование данных

Функции для набора данных показаны ниже. Набор данных содержит 18 признаков и 286 500 записей.

root
 |-- artist: string (nullable = true)
 |-- auth: string (nullable = true)
 |-- firstName: string (nullable = true)
 |-- gender: string (nullable = true)
 |-- itemInSession: long (nullable = true)
 |-- lastName: string (nullable = true)
 |-- length: double (nullable = true)
 |-- level: string (nullable = true)
 |-- location: string (nullable = true)
 |-- method: string (nullable = true)
 |-- page: string (nullable = true)
 |-- registration: long (nullable = true)
 |-- sessionId: long (nullable = true)
 |-- song: string (nullable = true)
 |-- status: long (nullable = true)
 |-- ts: long (nullable = true)
 |-- userAgent: string (nullable = true)
 |-- userId: string (nullable = true)

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

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

Анализ столбца страницы

page|
+--------------------+
|              Cancel|
|    Submit Downgrade|
|         Thumbs Down|
|                Home|
|           Downgrade|
|         Roll Advert|
|              Logout|
|       Save Settings|
|Cancellation Conf...|
|               About|
| Submit Registration|
|            Settings|
|               Login|
|            Register|
|     Add to Playlist|
|          Add Friend|
|            NextSong|
|           Thumbs Up|
|                Help|
|             Upgrade|
+--------------------+

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

Мы также увидели, что около 23% клиентов, перешедших на более раннюю версию, также отменили свою подписку.

Визуальное представление даст четкое представление

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

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

1. Timestamp - We can get information about number of hours a customer played songs
2. page  - Number of thumsUp, downgrades, etc...
3. song - Number of songs a customer played

Определение оттока после определения функции

Модель выбирает для предсказания

разделить набор данных на обучающие, проверочные и тестовые наборы

1. Train model using training data set
2. Tune model using validation data set
3. Test best model based on validation data set and test data set.

Мы испробовали множество моделей, таких как Random Forest, SVM, модели линейной регрессии для нашего набора данных, и обнаружили, что Random Forest работает хорошо.

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

Результаты и заключение

Этот проект состоит из анализа набора данных sparkify, машинного обучения, модели для прогнозирования оттока клиентов на основе набора данных для обучения и проверки. Мы достигли оценки F1 0,679888 на наборе тестовых данных.

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

Расположение на GitHub: https://github.com/ronyjoby/Sparkify.git