Введение проблемы

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

Sparkify — это вымышленное приложение для потоковой передачи музыки, похожее на Spotify или Pandora, созданное Udacity. Некоторые пользователи используют бесплатные уровни, которые воспроизводят рекламу между потоками, а некоторые пользователи используют модель платной подписки премиум-класса, где они транслируют музыкальную рекламу. бесплатно. Пользователи могут обновить, понизить или отменить свою услугу в любое время. Итак, задача состоит в том, чтобы использовать pyspark — Spark API в Python для извлечения информации и создания значимых функций из необработанных данных, которые позволяют нам предсказать, какой клиент отменит услугу. В этом сообщении блога мы увидим, как я проанализировал данные, предоставленные Udacity, для определения оттока с помощью spark. Кроме того, я занимаюсь проектированием функций и прогнозным моделированием, чтобы построить модель машинного обучения для прогнозирования оттока пользователей.

Стратегия решения проблемы

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

  1. Исследовательский анализ данных: Spark SQL используется для основных манипуляций внутри spark.
  2. Определить отток: чтобы создать столбец оттока в качестве метки для моделирования.
  3. Разработка признаков: создание многообещающих числовых признаков из меньшего подмножества данных.
  4. Прогнозное моделирование: использование методов машинного обучения из API pyspark, оценка точности различных моделей, настройка параметров и, наконец, определение победившей модели.

Исследовательский анализ данных (EDA)

В этом проекте используется небольшая часть (128 МБ) полного доступного набора данных (12 ГБ). В наборе данных 18 объектов с 286500 строками. Ниже приводится описание каждого столбца в наборе данных:

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

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

  1. 226 уникальных пользователей и 52 пользователя, которые отменили подписку (перешедшие пользователи). Sparkify потерял 23% от общего числа клиентов.
  2. Данные состоят из 115 уникальных местоположений. Это означает, что пользователи диверсифицированы в отношении «местоположения».
  3. 82% данных состоит из действий на странице NextSong. А столбцы Исполнитель и Песня заполняются только тогда, когда значение в столбце страницы равно «NextSong».

Большинство пользователей из городов Калифорния, Техас, Нью-Йорк-Нью-Джерси-Пенсильвания и Флорида. Калифорния — штат с наибольшим количеством пользователей.

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

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

Вы можете найти полную EDA и другие визуализации в моем Github.

Показатели

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

Оценка F1 = 2 * (отзыв * точность) / (отзыв + точность)

Это средневзвешенное значение точности и полноты. Набор данных имеет неравномерное распределение. Мы должны учитывать как ложноположительные, так и ложноотрицательные результаты. Таким образом, F1 в данном случае более полезен, чем точность.

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

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

  1. средняя длина элемента
  2. количество действий «NextSong», «ThumbsUp», «ThumbsDown» и т. д. под событиями страницы
  3. количество уникальных песен и исполнителей пользователя
  4. процент операций после 15 числа в месяц
  5. процент операций в рабочий день

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

Прогнозное моделирование

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

  1. Логистическая регрессия
  2. Линейный SVC
  3. Классификатор дерева решений
  4. Классификатор случайного леса.

Ниже приведены наблюдения после обучения модели:

Настройка гиперпараметров

Оценка F1 для DecisionTree и LinearSVC не так хороша, как логистическая регрессия. Итак, мы выбрали логистическую регрессию для настройки гиперпараметров. Для этого мы использовали метод k-кратной перекрестной проверки с использованием предопределенной сетки параметров.

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

Мы получили самый высокий балл f1 для логистической регрессии, т.е. 0,712500. Точность также составляет около 70%. Это означает, что модель LogisticRegression превосходит другие модели. Это также улучшится после того, как будет протестировано на полном наборе данных.

Заключение

  • Машинное обучение с помощью Spark позволяет обрабатывать большие объемы данных, получать ценные сведения и разрабатывать действия на основе результатов масштабируемым образом.
  • Модель логистической регрессии показала лучшие результаты с показателем F1 около 71%. Мы получили эти результаты на крошечном подмножестве, т.е. 128 МБ данных.
  • Для большого набора данных (12 ГБ) нам придется учитывать факторы среды, такие как точность модели, использование памяти во время выполнения и оптимизация ресурсов.
  • Наша модель прогнозирования оттока должна помочь Sparkify идентифицировать пользователей для участия в специальных акциях или других мерах, чтобы предотвратить отмену услуги. Тем не менее, модель должна избегать ложной классификации лояльных пользователей как уязвимых для оттока, потому что предложение скидок или других рекламных акций стоит дорого и должно быть нацелено на пользователей, которых мы в противном случае потеряли бы как клиентов.

Будущие улучшения:

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

Вы можете найти полный код для этого варианта использования на Github.

Использованная литература:

https://spark.apache.org/docs/2.3.1/api/python/pyspark.ml.html

https://www.kaggle.com/competitions/customer-churn-prediction-2020/обзор

Спасибо за чтение!