Сводка

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

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

Наш анализ показал, что модель Random Forest способна предсказать пропуск песни с точностью 88,3%. Наши результаты показывают, что высокий процент пропусков может указывать на неудовлетворенность текущим выбором песен и должен побудить Spotify пересмотреть свои алгоритмы рекомендаций для оптимизации взаимодействия с пользователями в долгосрочной перспективе.

Соавторы: Вероника Ху, Хонгру Ли, Айшу Кришна, Саргам Гупта, Ха Хоанг

Инструменты

Язык: R

Библиотеки R: ggplot2, dplyr, pROC, tree, randomForest, corrplot

EDA: пропущенные значения, фиктивные переменные, отбрасывание переменных, матрица корреляции

Кластеризация: K-средние

Модели классификации: логистическая регрессия, дерево классификации, случайный лес

Оглавление

  1. Введение и понимание бизнеса
  2. Понимание и подготовка данных
  3. Прогнозное моделирование
  4. Оценка результатов
  5. Бизнес-приложения

Раздел 1. Введение и бизнес-понимание

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

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

Оглавление

Раздел 2. Понимание и подготовка данных

2.1. Выбор данных

Наш набор данных содержит 160 миллионов сеансов прослушивания Spotify и пользовательских взаимодействий, что составляет более 50 ГБ заархивированных данных, 350 ГБ в разархивированном виде). Из-за ограниченной памяти компьютера и чрезмерных объемов данных процесс моделирования может занять очень много времени. Таким образом, мы выбираем для случайной выборки подмножество исходного набора данных.

2.2. Обзор набора данных

# This data set has 2073469 rows and 24 columns
dim(data)
## [1] 2073469      24

Наши случайно выбранные данные состоят из 2 073 469 строк и 24 столбцов, представляющих более 2 миллионов дорожек и 24 независимых признаков, определенных в таблице 1 ниже. Для нашей целевой переменной у нас есть четыре зависимых признака: skip_1, skip_2, skip_3 и not_skipped, которые по-разному измеряют степень пропуска дорожки. Наш прогноз касается только skip_1.

2.3. Очистка данных

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

data$shuffle <- ifelse(data$hist_user_behavior_is_shuffle=="True", 1, 0)
data$premium <- ifelse(data$premium=="True", 1, 0)

Мы проверили дублирующиеся строки:

sum(ifelse(duplicated(data) == TRUE,1,0))
## [1] 0 # Zero duplicated rows

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

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

Далее на Рисунке 2 ниже показана обратная связь между переменной количество сеансов и переменной длительность сеансов. Другими словами, чем короче сеансы, тем больше они представлены в наборе данных. Однако самые длинные сеансы (продолжительность 20 и выше) имеют максимальную частоту.

Мы также заметили тенденцию в поведении слушателей на разных уровнях пропуска. Доля пропусков для skip_3 (где воспроизводилась большая часть дорожки) была значительно выше, чем для skip_1 (где дорожка воспроизводилась очень недолго). Однако, независимо от временной метки, в которой была пропущена песня (т. е. в начале песни, в середине песни или в конце песни), шаблоны пропуска по продолжительности сеансов следовали шаблону. Можно понять, что чем дольше пользователи остаются в сеансе, тем больше вероятность того, что они пропустят песню. Большинство пользователей, как правило, остаются дольше, подразумевая, что они в целом удовлетворены песнями, которые слушают.

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

2.5. Матрица корреляции

Чтобы лучше понять наши переменные, мы создали матрицу корреляции, как показано на рисунке 5. Есть две причины, по которым мы хотим рассмотреть корреляцию между всеми переменными:

  • Посмотрите, есть ли интересные идеи и бизнес-приложения
  • Посмотрите, есть ли какие-либо функции, которые тесно связаны
CorMatrix <- cor(data_corr)
corrplot(CorMatrix, method = "square")

Результаты показывают тесную положительную связь между context_switch и start_clickrow, start_backbutton и end_backbutton; отрицательная связь между start_trackdone и start_forwardbutton. Это типичный сценарий, когда пользователи обычно прокручивают список песен и выбирают песни из разных контекстов.

2.6. Кластеризация K-средних

Поскольку все переменные в нашем наборе данных являются категориальными, мы не можем выполнить PCA для нашего набора данных. Следовательно, мы решили выполнить k-средних с k равным 6. Ниже приведены шесть кластеров, основанных на различных шаблонах и поведении пользователей при воспроизведении трека.

SixCenters <- kmeans(xdata, 6 ,nstart=30)
SixCenters$size

Кластер 1: «Пусть играет музыка»

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

Кластер 2: поведение пользователей весьма неоднозначно

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

Кластер 3: трассировка для поиска предыдущих песен

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

Кластер 4: Двигайтесь вперед, чтобы найти лучшие песни

Как и в кластере 3, треки воспроизводятся и пропускаются очень быстро при нажатии кнопки «вперед», вероятно, потому, что пользователь ищет более подходящую песню.

Кластер 5: Поиск конкретной песни для воспроизведения

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

Кластер 6: слушатели чартов Spotify

Все треки в этом кластере взяты из чартов Spotify, большинство из которых воспроизводятся в последовательности чартов и быстро пропускаются, нажав кнопку «Вперед».

Оглавление

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

Наша целевая переменная (skip_1) содержит две метки: пропустить (1) или не пропустить (0). Таким образом, мы будем использовать модель контролируемой классификации, то есть логистическую регрессию, дерево классификации и случайный лес, чтобы предсказать двоичный результат.

3.1. Логистическая регрессия

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

3.2. Дерево классификации (CART)

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

3.3. Случайный лес

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

Оглавление

Раздел 4. Оценка результатов

4.1. Метрика оценки

Мы использовали точность вне выборки в качестве оценочной метрики для сравнения производительности модели. Точность определяется как количество правильных прогнозов (т. е. истинных положительных и истинных отрицательных результатов) в процентах от общего количества прогнозируемых значений. Чтобы повысить стабильность работы вне выборки, мы проводим 5-кратную перекрестную проверку и вычисляем среднее значение точности OOS для каждой модели.

4.2. Результаты модели

Результаты 5-кратной перекрестной проверки показывают, что из трех моделей Random Forest работает лучше всего с самой высокой точностью OOS.

Оглавление

Раздел 5. Бизнес-приложение/развертывание

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

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

Наша модель предсказывает, что если процент пропусков превышает 50 %, пользователь недоволен текущим выбором дорожек. Это означает, что Spotify следует пересмотреть свои алгоритмы рекомендаций, что поможет оптимизировать участие пользователей в будущем в долгосрочной перспективе.

Оглавление

Полный код можно найти здесь