Составить плейлист сложно. Требуется время, чтобы отсортировать бесчисленное количество песен в вашей библиотеке и отредактировать их, чтобы наполнить определенное ощущение / атмосферу. У меня есть друзья, которые дорожат своим плейлистом Spotify / Apple Music до такой степени, что даже не делятся ими с другими.

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

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

Что я ищу?

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

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

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

API Spotify 😍

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

Процесс ⚙️

  • Получите списки воспроизведения и импортируйте треки и их функции в Pandas DataFrame.

  • Вычислите средние значения функций, составляющих список воспроизведения, путем объединения треков в списке воспроизведения. Я решил не использовать среднее значение, потому что не видел выбросов, которые могли бы исказить мои данные как большую проблему.
  • Определите основные разнородные объекты, используя простую формулу Евклидова расстояния: причудливый способ сказать, как далеко что-то находится… нет, на самом деле, это просто вычитание.

  • Нанесите на график две верхних непохожих друг на друга функции и посмотрите, как они представлены визуально, и БУМ!

Результаты 🔍

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

  1. Мой плейлист против другого плейлиста из моего плейлиста
  2. Кураторские плейлисты Spotify против другого курируемого Spotify плейлиста

Мой плейлист против другого плейлиста из моего плейлиста

Плейлист 1: Ночные поездки. Это песни, которые я представляю себе слушаю во время приятной прохладной ночи, катаясь по холмам вдоль Малхолланд Драйв.

Плейлист 2: litAFFFF. Один из многих моих плейлистов в спортзале, которые, кажется, я составил еще в старшей школе. Содержит Bangerz, например «Mask Off», и другие популярные рэп-хиты.

Не баадд Мустафа! По диаграмме рассеяния видно, что наблюдается хорошая тенденция. В треках litAFFF намного больше слов, и они явно более танцевальны. Могу вас уверить, что я не танцую под них ... 😅

Кураторские плейлисты Spotify против другого курируемого Spotify плейлиста

Это заставило меня задуматься… а был ли плейлист Spotify «лучше»? Были ли они более четкими и сгруппированными, чем мои плейлисты? Давайте взглянем. Я сравнил

Плейлист 1: Rap Caviar

Плейлист 2: Осенняя акустика.

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

Для дальнейших экспериментов мы можем расширить этот проект, используя Технику уменьшения размеров, чтобы расширить этот эксперимент с 2D на все измерения (функции), которые Spotify возвращает для своих функций трека.

Дополнительный кредит

tbh ... эта часть была несложной. Проще, чем остальные… но ради удовольствия я расширил алгоритм KNN с k = 5 в уравнение и посмотрел, смогу ли я успешно предсказать, к какому плейлисту, скорее всего, принадлежит песня.

Что такое алгоритм KNN или K-ближайших соседей?

Короче говоря ... представьте, что зеленая точка представляет точку, которую мы хотим предсказать. Мы хотим предсказать, принадлежит ли эта зеленая точка (песня) к playlist1 (синий) или playlist2 (красный). Если k = 3, то мы смотрим на первый сплошной кружок как на 3 ближайших соседа. На основе k = 3 алгоритм выведет точку (в данном случае песня), принадлежащую Красному списку воспроизведения 2, потому что в этом круге больше красных треугольников, чем синих квадратов.

Я собираюсь использовать те же плейлисты Spotify в приведенном выше примере, поскольку они более четко определены, чем мои. Я введу 4 песни в модель KNN и посмотрю, что она выйдет.

  1. "Low Life" от Future and the Weeknd
  2. «Лето шестнадцать» Дрейка
  3. "Waves - Robin Schulz Radio Edit" г-на Пробца
  4. "Singing Low" группы The Fray

Я ожидаю, что первые две песни будут помещены в Rap Caviar, а последние две - в Autumn Acoustic. Посмотрим, как мы это делаем:

Using the KNN Algorithm, 'Low Life' best belongs in 'RapCaviar' playlist
Using the KNN Algorithm, 'Summer Sixteen' best belongs in 'RapCaviar' playlist
Using the KNN Algorithm, 'Waves - Robin Schulz Radio Edit' best belongs in 'RapCaviar' playlist
Using the KNN Algorithm, 'Singing Low' best belongs in 'Autumn Acoustic' playlist

3/4… 75%… неплохо 🧐. Не прошло успешно, но пока сойдет!

«Волны» произошли не так, как ожидалось. Посмотрим, почему?

Посмотрев на график, легко увидеть, что он занимает высокое место в «танцевальности», а если подумать… это вроде как. Я не ожидал, что акустика будет такой низкой. В целом, прямо в группе Rap Caviar, так что нельзя винить алгоритм.

Улучшения / предложения

Теперь мы можем внести множество улучшений в этот классификатор для этого проекта. Вот пара предложений:

  1. Получите 3 измерения (характеристики), чтобы лучше проиллюстрировать песни и лучше классифицировать
  2. Черт возьми ... давай не будем останавливаться на 3. Давайте воспользуемся функцией Dimension Reduction, чтобы классифицировать как можно больше функций (при сохранении дисперсии), чтобы лучше понять плейлисты и песни, из которых они состоят.
  3. Я также хочу ввести больше плейлистов (3, 4, 5 и т. Д.), Чтобы увидеть, достаточно ли они группируются. Это немного проще, если у вас всего два плейлиста.

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

Вы можете найти код на gitHub @ https://github.com/mustafahoda