Обзор
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 и понимания его общей архитектуры. Далее мы хотим провести более глубокое исследование, чтобы найти скрытые идеи и построить более точную модель.