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

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

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

Sparkify — вымышленное музыкальное приложение. Этот проект разработан и реализован таким образом, чтобы исследовать крошечное подмножество (128 МБ) полного доступного набора данных (12 ГБ). Этот набор данных имеет поведение пользователя музыкального приложения «Sparkify».

Проблема. Из предоставленных данных видно, что 52 из 225 уходят, что составляет почти 23%. Это очень важная проблема, которую необходимо решить для Sparkify.

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

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

Давайте теперь пройдемся по этому шаг за шагом

1. Импорт всех необходимых пакетов

2. Загрузите и очистите набор данных

Набор данных можно извлечь с помощью простого однострочного кода — как в рабочей области Udacity.

!tar chvfz блокнот.tar.gz *

Прочитав несколько строк данных и тщательно их разобравшись, мы начинаем их очищать.

  • Удаление строк с отсутствующими значениями (поскольку это поведение пользователя, не хотелось бы вменять значения, поскольку это исказит окончательную модель ML)

3. Исследовательский анализ данных

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

Становится очень интересно просматривать данные как по мужчинам, так и по женщинам.

Наблюдение: Клиенты-мужчины уходят чаще, чем клиенты-женщины.

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

Наблюдение: клиенты-женщины оценивают песни чаще, чем клиенты-мужчины

Наблюдение: женщины больше пользуются сервисом, прежде чем уйти, в то время как клиенты-мужчины, которые продолжают проигрывать песни, по-видимому, немного больше

Наблюдение: Покинувшие клиенты используют сервис в течение более короткого периода времени. Гипотеза. Клиенты быстро понимают, что услуга им не нравится, и быстро отменяют регистрацию

Наблюдение: Клиенты, как правило, слушают больше песен после обеда (после 14:00), и это число постепенно снижается до 22:00

Для продолжения анализа данных были созданы флаги «отток» и «понижение аккаунта».

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

Были созданы следующие функции:

  • Feature1: Количество дней с момента регистрации
  • Feature2: Общая продолжительность прослушивания
  • Feature3: Продолжительность сеанса (3 функции: Min, Max и Avg)
  • Feature4: Количество песен за сеанс
  • Feature5: Общее количество сеансов
  • Feature6: пол (мужской или женский)
  • Feature7: Различное количество певцов
  • Feature8: отток
  • Feature9: Нравится (палец вверх/вниз)
  • Feature10: платный или бесплатный пользователь
  • Feature11: Количество песен, добавленных в плейлист
  • Feature12: Количество добавленных друзей

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

Для получения подробной информации о том, как создаются функции, обратитесь к моему репозиторию Github.

5. ML-моделирование

Сначала мы импортируем наибольшее количество пакетов pyspark.ml.

Набор данных с признаками теперь необходимо векотризовать и масштабировать.

Теперь пришло время разделить набор данных на «поезд» и «тест».

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

  1. Древо решений
  2. Логистическая регрессия
  3. Повышение градиента

Для чего написана простая функция с настройкой гиперпараметров

После запуска вышеуказанных 4 моделей наблюдалось следующее

Наблюдения:

  1. Модель дерева решений имеет точность: 0,7246 и показатель F1:0,7002.
  2. Модель логистической регрессии имеет точность: 0,7826 и показатель F1:0,7104.
  3. Модель Gradient Boost имеет точность: 0,6956 и оценку F1:0,6657.
  • Логистическая регрессия имеет лучшую точность и оценку F1.
  • Вышеуказанные модели уже настроены

Извлекаются коэффициенты и определяется важность признаков.

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

Мы используем поиск по сетке для точной настройки нашего классификатора случайного леса. В основном мы настроили два параметра: регуляризацию эластичной сети. elasticNetParam соответствует α, а regParam соответствует λ

Наблюдение после настройки

Metrics for Logistic Regression model:
Accuracy: 0.782608695652174
F-1 Score:0.7104974712997327

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

6. Результаты

Наблюдения:

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

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

7. Заключение

Резюме В этой записной книжке разработана модель для прогнозирования оттока клиентов. Данные очищаются со всеми отсутствующими данными.

  • строки без идентификатора пользователя
  • преобразованная метка времени
  • преобразовал пол в двоичный числовой столбец
  • Для нашей модели было построено 12 функций.

Мы выбрали 4 модели:

  1. Древо решений
  2. Логистическая регрессия
  3. Повышение градиента

Основываясь на показателе F1 и показателях точности, логистическая регрессия дала наиболее оптимальный результат. То же самое было настроено. Общий балл F1 составляет 71%, а точность - 78%.

5 главных важных особенностей:

  1. Среднее время сеанса, которое пользователь проводит в сеансе
  2. Общее количество песен, прослушанных за каждую сессию
  3. Общее количество исполнителей, которых слушает пользователь
  4. Количество дней с момента регистрации
  5. Количество раз, когда пользователь проголосовал «за»

Reflection Этот проект дает мне возможность изучить Spark. Возможность распределять данные, выполнять запросы и строить необходимые выводы. Возможность запускать алгоритмы SQL и ML помимо pandas, sklearn

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

8. Ссылка на блокнот Python

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