Как вы можете предсказать, что потеряете этого бесценного клиента, прежде чем он выйдет за дверь?

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

Представьте, что вы работаете в компании по потоковой передаче музыки, такой как Spotify или Pandora, под названием Sparkify. Миллионы пользователей ежедневно транслируют свои любимые песни. Каждый пользователь использует либо бесплатный уровень с рекламой между песнями, либо премиальный план подписки. Пользователи могут обновить, понизить или отменить свою услугу в любое время. Следовательно, крайне важно убедиться, что пользователям нравится услуга, предоставляемая Sparkify. Каждый раз, когда пользователь взаимодействует с приложением Sparkify, генерируются данные. Такие события, как воспроизведение песни, выход из системы, лайк песни и т. д., записываются. Все эти данные содержат ключевую информацию, которая может помочь бизнесу процветать. Затем цель этого проекта — проанализировать эти данные и предсказать, какая группа пользователей, как ожидается, уйдет — либо понизится с премиальной до бесплатной, либо вообще отменит свои подписки. В этом посте я расскажу вам о шагах, которые я предпринял для создания модели с помощью Spark.

Какие основные шаги были предприняты для создания работающей модели машинного обучения для прогнозирования оттока клиентов?

  1. Исследование данных: узнайте о данных и определите отток и пометьте данные на основе определения оттока.
  2. Разработка функций: создание функций для каждого пользователя: эти данные будут использоваться в качестве входных данных для модели.
  3. Преобразование данных, разделение данных и обучение модели:
     — преобразование данных, разработанных с помощью функций.
     – Разделите данные на обучающие, проверочные и тестовые данные.
     – Создайте модель машинного обучения для обучения с использованием обучающих данных.

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

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

data_path = «mini_sparkify_event_data.json»
user_event = spark.read.json(data_path)
user_event.printSchema()

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

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

Теперь давайте посмотрим на отдельные значения функции page.

user_event.select(‘страница’).distinct().show()

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

Ниже приведено распределение после маркировки нашего набора данных.

use_level_count = labeled_df.groupby('userId', 'level', 'label').count()
use_level_count_pd = use_level_count.select("userId", "level", 'label').toPandas()
use_level_count_pd[['level', 'label']].groupby(['level', 'label']).agg({'label':'count'}).unstack().plot(kind=' bar');
plt.title('сравнение количества ушедших клиентов')
plt.ylabel('количество клиентов');

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

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

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

Преобразование данных, разделение данных и обучение модели

Шаги в этом разделе:

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

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

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

Мы проанализировали набор данных sparkify и предложили новые функции для прогнозирования оттока. Затем мы создали модель машинного обучения и настроили ее для повышения производительности. Мы достигли оценки точности 87% и оценки F1 84% на тестовом наборе данных.

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

Вот репозиторий git для кода, который я написал для этого поста: https://github.com/akessela/Stack-Overflow-Data-Analysis)