Обзор

Sparkify — поставщик музыкальных услуг, похожий на Spotify, и ему нужна модель для прогнозирования оттока клиентов.

Sparkify — это вымышленное приложение для потоковой передачи музыки, созданное Udacity. Для этого проекта нам даются прикладные данные размеров мини, средний и большой. Я использовал данные среднего масштаба, которые обрабатывал с помощью Spark на AWS EMR.

Проект Спаркфай

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

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

Исследование и визуализация

Набор данных относительно невелик, учитывая ML, он имеет 543705 строк и 18 столбцов, в которых содержится информация о клиентах (пол, имя и т. д.) и событиях API (вход в систему, воспроизведение следующей песни и т. д.).

Распределение оттока между бесплатными и платными пользователями

Гендерное распределение между пользователями, которые ушли, и пользователями, которые не ушли.

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

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

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

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

Моделирование:

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

Метрики:

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

Результаты

Классификатор случайного леса:

The metrics for our Random Forest Classifier are as follows :
The F-1 Score is 0.8260869565217391
The accuracy is 0.8009661835748794

Машина опорных векторов:

The metrics for our Support Vector Machine classifier are as follows: 
The F-1 Score is 0.6956521739130435
The accuracy is 0.5707915273132664

Градиентные деревья:

The metrics for our Gradient Boosted Trees Classifier are as follows: 
The F-1 Score is 0.8260869565217391
The accuracy is 0.8260869565217391

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

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

# Tuning Hyperparameters for the Gradient Boosting Trees model using Grid Searchgbt_clf = GBTClassifier(maxIter = 15, seed = 42)param_grid_gbt = ParamGridBuilder().addGrid(gbt_clf.maxIter, [10, 15, 20])\
.addGrid(gbt_clf.maxDepth, [5, 10]).build()f1_evaluation = MulticlassClassificationEvaluator(metricName = 'f1')cross_val_gbt = CrossValidator(estimator = gbt_clf, estimatorParamMaps = param_grid_gbt, evaluator = f1_evaluation, numFolds = 2)cv_model_gbt = cross_val_gbt.fit(train)cv_model_gbt.avgMetrics[0.7401826416407393,
 0.7002022462883644,
 0.745056373677933,
 0.7002022462883644,
 0.749983415305556,
 0.7002022462883644]

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

The final metrics for our Gradient Boosted Trees Classifier are as follows: 
The F-1 Score is 0.8695652173913043
The accuracy is 0.8665247795682578

Вывод

Сделал всю предобработку и конвертировал в чистый формат.

На заданном наборе данных были обучены три разные модели: RandomForest, Support Vector Machines и Gradient Boosted Trees соответственно. Метрикой, используемой для оценки производительности, является оценка F-1, поскольку она дает нам лучшее представление о производительности модели.

Оценка F-1 = 0,86956 Точность = 0,86652

Отражение и будущие улучшения:

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