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

В этом проекте мы собираемся проанализировать и найти уровень оттока и причины оттока клиентов музыкального веб-сайта с помощью PySpark. Скорость оттока — это скорость, с которой клиенты прекращают использовать продукты бизнес-объекта. Как правило, это процент подписчиков, которые прекращают подписку в течение заданного периода времени.

Постановка задачи

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

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

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

Данные

Набор данных подмножества (128 МБ) был любезно предоставлен Udacity в виде файла JSON. После создания сеанса Spark и загрузки данных мы, наконец, можем приступить к любимой работе каждого специалиста по обработке данных: очистке. В данных было несколько пустых строк для пользователей, поэтому они были удалены, и у нас осталось 278 154 строки нашего мини-подмножества данных. Данные были представлены в виде истории взаимодействия клиента с приложением Sparkify.

Показатели

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

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

Оценка F1 обычно используется для оценки задач бинарной классификации/прогнозирования, таких как задачи прогнозирования оттока, которые классифицируют примеры на «положительные» (отток) или «отрицательные» (отсутствие оттока). Точность

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

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

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

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

Набор данных имеет 286500 строк и 18 столбцов. Среднее количество песен, которые слушает каждый пользователь, составляет 83,25, среднее количество исполнителей, которых слушает каждый пользователь, составляет 635, а число пользователей без подписки больше по сравнению с процентом от общего числа пользователей.

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

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

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

Предварительная обработка данных

Чтобы обучить модель, мне пришлось выполнить некоторые шаги предварительной обработки, такие как преобразование столбцов в векторы, масштабирование их с помощью стандартного масштабатора. Более подробную информацию о предварительной обработке данных для обучения модели можно найти: https://machinelearningmastery.com/what-is-data-preparation-in-machine-learning/

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

Выполнение

Библиотеки были импортированы

  1. pandas для обработки данных
  2. NumPy для числовой обработки
  3. matplotlib для построения графиков
  4. сиборн для визуализации
  5. использовать искровые функции в Python
  6. sys и время для уборки
  7. pyspark для искровых сеансов и функций, а также функций машинного обучения

Сеанс Spark создан

Загрузка и очистка данных

Изучение набора данных с использованием функций искрового фрейма данных, таких как df.describe, df.head, df.count, df.sample, df.columns, df.dtypes и т. д.

Вспенивание определяется с помощью лямбда-функции, если в столбце страницы есть запись страницы подтверждения отмены, в этой строке стоит 1, а в противном случае — 0.

Изучение того, как отток связан с количеством песен, типом подписки и количеством исполнителей, делается на этом этапе.

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

Отток по сравнению с типом подписки

Отток по сравнению с количеством песен

Отток по сравнению с количеством прослушанных артистов

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

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

Функции, включенные в этот набор данных:

  • уровень

  • количество песен за сеанс для пользователя

  • количество роликов действий

  • количество действий с большим пальцем вниз

  • количество действий "палец вверх"

  • количество разных исполнителей, прослушанных на Sparkify

  • наконец, метка, показывающая, ушел пользователь или нет.

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

Затем набор данных векторизуется, стандартизируется и вводится в наши различные алгоритмы машинного обучения: логистическая регрессия, GBT, случайные леса.

Подробную реализацию можно найти здесь: https://github.com/EhsanMohd/Capstone-Project-Sparkify-Udacity-Data-Scientist-Nanodegree.

Предварительная обработка

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

Моделирование данных

Различные алгоритмы классификации машинного обучения, используемые для моделирования:

  • Логистическая регрессия. Логистическая регрессия — это еще один метод, заимствованный машинным обучением из области статистики. Это метод перехода к проблемам бинарной классификации, таким как прогнозирование оттока. Логистическая регрессия использует уравнение в качестве представления, очень похожее на линейную регрессию. Более подробную информацию можно найти: https://machinelearningmastery.com/logistic-regression-for-machine-learning/
  • Классификатор случайного леса: Случайный лес — это ансамблевый алгоритм машинного обучения. Это, пожалуй, самый популярный и широко используемый алгоритм машинного обучения, учитывая его хорошую или отличную производительность в широком диапазоне задач классификации и регрессионного прогнозного моделирования. Более подробную информацию можно найти: https://machinelearningmastery.com/random-forest-ensemble-in-python/
  • Классификатор деревьев с градиентным усилением: модель деревьев с градиентным усилением строится поэтапно, как и в других методах повышения, но она обобщает другие методы, позволяя оптимизировать произвольную дифференцируемую функцию потерь. Дополнительную информацию можно найти: https://machinelearningmastery.com/gradient-boosting-with-scikit-learn-xgboost-lightgbm-and-catboost/

Оценка и проверка

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

Уточнение

Я выбрал наиболее эффективную модель, то есть алгоритм с градиентным усилением, и увеличил количество итераций с 20 до 30, и получил лучшие результаты, см. рисунок ниже.

Улучшение

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

Обоснование

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

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

Заключение

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

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

Учебными целями, которые я преследовал для этого проекта, были:

1. Загружать большие наборы данных в Spark (https://spark.apache.org/docs/latest/ml-guide.html) и манипулировать ими с помощью Spark SQL и Spark Dataframes (https://spark.apache.org). /docs/latest/sql-programming-guide.html»)

2. Используйте API-интерфейсы машинного обучения в Spark ML (https://spark.apache.org/docs/latest/ml-guide.html) для создания и настройки моделей.