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

В этом проекте я буду практиковаться в управлении большими и реалистичными наборами данных с помощью Spark, чтобы разработать соответствующие функции для прогнозирования оттока. Я также буду использовать Spark MLlib для создания моделей машинного обучения с большими наборами данных, что выходит далеко за рамки того, что можно было бы сделать с помощью нераспределенных технологий, таких как scikit-learn.

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

Исследуйте анализ данных

  1. Исходные поля в необработанном наборе данных:

userId: уникальный идентификатор для каждого пользователя.
firstName: демографическая информация о каждом пользователе.
lastName: демографическая информация о каждом пользователе.
местоположение: демографическая информация о каждом пользователе
пол: демографическая информация о каждом пользователе
userAgent: устройство что пользователь использовал
sessionId: уникальный идентификатор для каждого сеанса
itemInSession: уникальный идентификатор для каждой страницы, посещенной в рамках одного сеанса
страница: конкретная страница веб-сайта, которую посетил пользователь, может использоваться для идентификации оттока.
песня: если страница называется «Следующая песня», в этом поле будет отображаться название песни, в противном случае показывать только «null»
artist: если страница «NextSong», в этом поле будет отображаться имя исполнителя, в противном случае показывать только «null»
уровень: категориальные функции, которые доступны только h в виде 2 значений, бесплатных или платных, показывающих статус пользователя
registration: отметка времени регистрации пользователя
ts: отметка времени действия пользователя

2. Коэффициент оттока

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

В этом наборе данных 225 уникальных идентификаторов пользователей, 52 пользователя уходят, уровень оттока составляет около 23%.

3. Визуализация данных

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

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

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

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

Похоже, что доля женщин в группе пребывания выше, чем в группе оттока.

В-третьих, я хочу видеть распределение устройств по двум группам пользователей.

Похоже, что пользователи, которые используют iPhone или Linux для посещения веб-сайта sparkify, имеют более высокую вероятность оттока.

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

Распределение дней между последним днем ​​(в наборе данных) и последним днем, когда пользователь посетил подобные сайты, выглядит очень по-разному между этими двумя группами пользователей. Это может быть очень полезной функцией.

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

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

– Функция, связанная со временем:
дней между первым и последним посещением, дней между последней датой и датой первого посещения, дней между последней датой и датой последнего посещения.

- Функция, связанная с просмотром страницы:
общее количество посещенных страниц, доля различных типов посещенных страниц.

- Музыкальные функции:
общее количество прослушанных песен, количество прослушанных уникальных песен, количество прослушанных уникальных исполнителей.

-Информация о пользователе:
пол, используемое устройство.

Модели и результаты

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

В исходном наборе данных уровень оттока составляет около 23%. Поэтому я использую скорость отзыва и точность группы оттока в тестовом наборе данных, чтобы сравнить производительность модели.

Обсуждение бизнес-аналитики

Из приведенной выше таблицы видно, что ни одна модель не работает лучше всего как по скорости отзыва, так и по точности даты.

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

Логистическая регрессия:

Эта модель выявит 12 ушедших клиентов, и 9 из них действительно уйдут. ROI=(9*40$)/(12*10$)=300%

Дерево решений:

Эта модель выявит 9 ушедших клиентов, и 8 из них действительно уйдут. ROI = (8 * 40 долларов США) / (9 * 10 долларов США) = 355%

Случайный лес:

Эта модель выявит 6 ушедших клиентов, и все они на самом деле уйдут. ROI=(6*40$)/(6*10$)=400%

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