Этот проект является частью программы Udacity Data Science Nanodegree. Код для этого проекта можно найти в этом репозитории Github. Данные для этого проекта можно получить для API Spotify.

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

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

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

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

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

Ключевые функции песни, которые Spotify включает в набор данных:

  • Танцевальность
  • Энергия
  • Ключ
  • Громкость
  • речь
  • Акустика
  • Инструментальность
  • Живость
  • Валентность
  • Темп
  • Продолжительность

Я оставлю ссылку на документацию в этой статье, если вы хотите больше узнать об этих функциях.

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

Мне нужно было добавить еще 2 функции в мой набор данных, первая была popularity, а вторая — explicit. Позже популярность песни была извлечена из API, чтобы измерить, насколько популярна она по шкале от 0 до 100. То же самое с явностью песни, это тоже было из API, однако идентифицируется только True или False. Эти 2 дополнительные функции добавят больше к модели, определяя, соответствует ли мой вкус песням популярным песням и содержит ли я явный язык (что не соответствовало действительности в моем случае).

Предсказание вкуса песни

Обычно это моя любимая часть любого блокнота по науке о данных — моделирование! Используя все включенные функции, моя модель должна быть в состоянии предсказать мой музыкальный вкус, используя Like/Dislike в качестве моей цели y. Я использовал 5 разных моделей, какая из них работает лучше всего:

  • XGBoost: 0,89
  • КНН: 0,87
  • Случайный лес: 0,87
  • Дерево решений: 0,84
  • Логистическая регрессия: 0,84

Как мы знаем, XGBoost была одной из самых популярных моделей на конкурсе Kaggle. Там, где он доминировал в большинстве поул-позиций, благодаря своей скорости и эффективности. Я не удивлен, что он превзошел другие модели.

Вывод

В заключение хочу сказать, что цель этого проекта — проверить, могу ли я предсказывать новые песни, основываясь на своих музыкальных вкусах. Подводя итог тому, что я сделал, я включу сюда свой пайплайн:

  • Загрузите понравившийся и не понравившийся плейлист из API Spotify с помощью библиотеки Spotipy.
  • Используйте функции трека, чтобы получить больше информации об этих песнях.
  • Очистите данные и инженер по функциям, чтобы помочь с моделированием
  • EDA, чтобы понять, что происходит с данными
  • Объединить данные в один фрейм данных
  • Разделить набор данных на поезд и тест
  • Модели испытаний чемпионов

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

Что касается точности модели, XGBoost показал лучшие результаты среди этих моделей с оценкой 0,89. Удивительно, но KNN был вторым лучшим. Я не ожидал, что KNN так хорошо справится с такой проблемой.
Я не экспериментировал с неконтролируемыми моделями для этого набора данных, и в будущем я мог бы протестировать этот набор данных. Это также могло бы помочь в прогнозировании музыкальных вкусов других пользователей, если бы я мог предоставить больше информации, такой как жанр, исполнитель и т. д.

Области улучшения:

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

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

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