В этом исследовании мы проанализируем, можем ли мы предсказать попадание песни в Топ-10 и какие факторы будут иметь значение в этом отношении. Данные следующие, и различные описания даны следующим образом:

Вот подробное описание переменных, которое было взято с сайтов ниже:

  • year = год выпуска песни
  • songtitle = название песни
  • artistname = имя исполнителя песни
  • songID и artistID = идентифицирующие переменные для песни и исполнителя.
  • timesignature и timesignature_confidence = переменная, оценивающая тактовый размер песни, и достоверность оценки
  • громкость = непрерывная переменная, указывающая среднюю амплитуду звука в децибелах.
  • tempo и tempo_confidence = переменная, указывающая предполагаемое количество ударов в минуту песни, а также достоверность оценки.
  • key и key_confidence = переменная с двенадцатью уровнями, указывающая предполагаемую тональность песни (C, C#, . . ., B) и достоверность оценки
  • энергия = переменная, представляющая общую акустическую энергию песни с использованием сочетания таких характеристик, как громкость.
  • pitch = непрерывная переменная, указывающая высоту тона песни.
  • timbre_0_min, timbre_0_max, timbre_1_min, timbre_1_max, . . . , timbre_11_min и timbre_11_max = переменные, которые указывают минимальное/максимальное значение по всем сегментам для каждого из двенадцати значений в векторе тембра (в результате получается 24 непрерывных переменных).
  • Top10 = двоичная переменная, указывающая, попала ли песня в десятку лучших в чарте Billboard Hot 100 (1, если песня была в первой десятке, и 0, если нет).

Сначала мы проведем некоторый анализ данных по различным элементам данных. Пустых данных нет, имеется 7574 строки и 39 столбцов данных с расширенными уровнями некоторых категорий.

Команда head() выглядит следующим образом с несколькими сотнями элементов данных в первых нескольких строках:

Во-первых, давайте запустим полную модель со всеми переменными, кроме факторных моделей, и как Top10 в качестве зависимой переменной.

Мы получаем эту модель с различной сводной статистикой:

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

Вот как мы проверяем мультиколинеарность с помощью функции vif().

Мы видим снизу, что значение громкости довольно велико, и нам нужно будет удалить его из модели логистической регрессии и снова запустить модель. Значение громкости vif() составляет почти 12,566234, что намного выше 10, и его следует удалить из модели.

После того, как мы удалили эти переменные, мы видим, что энергия теперь также не имеет значения, поэтому мы удалим и ее, а также снова запустим модель.

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

AIC является относительным значением и зависит от различных тестируемых моделей, и, как правило, чем ниже, тем лучше, но это не жесткое правило. Оценка Фишера низкая, что является хорошим признаком пригодности модели.

Далее мы запустим нулевую модель и попытаемся вычислить R-квадрат для модели логистической регрессии, также известной как R-квадрат Макфаддена.

Значение R-квадрата Макфаддена составляет 0,1802605, что довольно хорошо для модели логистической регрессии. Мы также видим из модели, что timesignature_confidence, tempo_confidence, key, key_confidence и высота тона являются очень значимыми коэффициентами, а также многие значения минимальных и максимальных значений тембра.

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

Затем мы создаем наборы обучающих и тестовых данных и видим различные значения в обоих данных.

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

Теперь мы попытаемся сделать прогноз на тестовом наборе и насколько хорошо наша модель работает на тестовом наборе, и дадим ей порог 0,3.

Мы видим, что точность модели составляет 0,8217822, что довольно высоко для данных, которые модель не видела. Мы можем дополнительно улучшить эту модель, удалив из модели больше переменных или проработав больше функций, а также используя более продвинутые методы, такие как PCA, или другие методы уменьшения размеров, чтобы сделать модель более простой.

Использованная литература:





http://ehonest.com/

https://courses.edx.org/courses/course-v1:MITx+15.071x+1T2020/