Цель:

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

Обзор: https://www.kaggle.com/c/kkbox-music-recommendation-challenge/overview

Контуры:

  1. Бизнес-проблема
  2. Обсуждение данных
  3. EDA
  4. Функциональная инженерия
  5. Предварительная обработка данных
  6. Модели
  7. Сравнение
  8. Заключение и дальнейшая работа
  9. использованная литература

Введение

«Музыка - это удовольствие, которое человеческий разум испытывает от счета, не зная, что он считает» - Лейбниц

Музыка помогает любому понять, что вы делаете. Поднимает настроение и омолаживает волны мыслей. Людям нравится слушать музыку каждый раз, будь то поездка на работу, работа или время для сосредоточения. У разных людей разные музыкальные вкусы. Музыка обслуживает своих пользователей с различных платформ, таких как волны Victrola, культура кассет, эпоха Walkman, i-pods, FM-радио, а теперь и новейшие музыкальные приложения, такие как Spotify, Amazon Prime Music, Deezer, SoundCloud, Gaana и т. Д.

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

1. Бизнес-проблемы и ограничения:

Наша бизнес-цель - предложить пользователям песни на свой вкус! Эта рекомендация не должна длиться часами, секунд будет достаточно, чтобы предсказать шансы прослушивания.

  • Постановка проблемы машинного обучения

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

2. Обсуждение данных:

Источник набора данных: https://www.kaggle.com/c/kkbox-music-recommendation-challenge/data

Проблема имеет 6 файлов данных:

1.train.csv: этот файл содержит

user_id (msno), song_id, source_system_tab (где было инициировано событие),
source_type (точка входа, в которой пользователь сначала воспроизводит музыку), source_screen_name (имя макета, который видит пользователь) и target (1 означает, что существует повторяющееся событие прослушивания, инициированное в течение месяца после самого первого наблюдаемого события прослушивания пользователем, в противном случае target = 0).

2. test.csv: этот файл включает

user_id (msno), song_id, source_system_tab (где было инициировано событие),
source_type (точка входа, которую пользователь сначала воспроизводит музыку) и source_screen_name (имя макета, который видит пользователь).

3. song.csv: этот файл имеет такие функции, как

song_id, song_length, genre_id, artist_name, композитор, автор текста и язык.

4. members.csv: этот файл содержит msno (идентификатор_пользователя), город, bd (может содержать выбросы), пол, register_via (метод регистрации), register_init_time (дата) и expirartion_date (дата).

5. song_extra_info.csv: этот файл имеет такие функции, как song_id, song_name и
ISRC (международный стандартный код записи), используемый для идентификации песен.

3. EDA:

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

I. Особенности поезда:

У нас есть графики подсчета для source_type, source_system_tab и source_screen_name. Из графиков видно, что все наши функции почти сбалансированы относительно меток классов в каждом значении функции.

II. особенности песни:

У нас есть разные типы языков в данных о песнях, которые обозначены числами. Мы видим, что большинство пользователей предпочитают слушать песни на языках «-1» и «52».

Большинство пользователей предпочитают регистрацию с помощью методов «4», «7» и «9».

III. данные участников:

Из приведенных выше PDF-файлов мы можем сказать, что после 2012 года люди начали регистрироваться для прослушивания музыки, следовательно, их срок действия также близок к 2020 году.

Хорошо! люди младше 50 лет говорят музыке «Привет!» и наслаждаются ею !!

Можно сказать, что в функциях композитора, лирика, isrc больше пропущенных значений.

вот дендрограмма функций. Мы можем видеть корреляцию между source_system_tab - ›source_type, composer -› Lyricist, language - ›(song_length, artist_name, name), isrc -› song_year.

Как известно, у некоторых композиторов есть пристрастие к какому-то артисту, языку, лирику.

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

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

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

  • Мы будем извлекать отдельные функции, независимые от участников, композиций и song_extra. После объединения всех файлов мы извлечем их сгруппированные по функциям.
  • Мы будем фильтровать возраст от 0 до 75 лет.
  • Мы извлечем members_days, год, месяц и день из даты истечения и начальной даты.
  • Мы извлечем genre_id_count, artist_count из genre_id и artist. В некоторых песнях есть много исполнителей и жанров, поэтому мы также извлечем имя исполнителя и первый genre_id.

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

  • Мы извлечем song_year, country_code и registration_code из функции isrc.
  • У каждого есть свой любимый музыкальный вкус в зависимости от исполнителя, языка, жанра и возрастной группы. На основе них мы извлечем функции group_by.

5. Предварительная обработка данных:

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

6. Модели:

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

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

Это один из простых методов классификации, хотя в названии есть слово регресс. Мы будем использовать SGDClassifier с log_loss. Мы настроим гиперпараметры, такие как штраф и альфа, с помощью GridSearchCV.

2. Машины опорных векторов

Мы будем использовать SGDClassifier с потерей шарнира для выполнения линейной SVM и настройки гиперпараметров с помощью GridSearchCV.

3. Дерево решений

Дерево решений - это набор f параллельных осям гиперплоскостей или правил принятия решений, которые могут классифицировать точки данных, которые также являются нелинейно разделяемыми. sklearn предоставляет DecisionTreeClassifier. Мы настроим такие параметры, как max_depth, min_samples_split и max_leaf_nodes.

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

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

5. XgBoost

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

6. LightGBM

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

7. Укладка

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

8. Классификатор голосования

Классификатор голосования - это оболочка для многих классификаторов. Он будет голосовать за прогнозы базовых классификаторов либо мягким, либо жестким способом. Выполним VotingClassifier из sklearn.

9. Глубокое обучение

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

(а) Важность функции:

Чтобы лучше понять любую модель, желательно проверить важность функций. Каждая функция вносит положительный или отрицательный вклад в производительность модели. Алгоритмы на основе дерева имеют важность встроенных функций, тогда как в случае LR, SVM мы должны извлекать их через model.coef_

(б) Выбор и извлечение функций

Выбор функций означает выбор подмножества исходного пула функций, тогда как извлечение функций означает получение полезных функций из существующих данных. Мы использовали SelectKBest для выбора функций и PCA для извлечения функций. Мы также можем выбрать функции в зависимости от важности функций из любого алгоритма, такого как DT, RF или XgBoost. Мы выбрали наиболее важные функции из DT и применили лучшую модель поверх этих выбранных функций. Вот - подробная записная книжка по моделям и важности функций.

7. Сравнение:

После применения всех моделей к нашему набору данных и важности функций мы можем сказать, что LR и SVM не подходят для наших наборов данных. Они также придают более негативное значение конкретной особенности. Алгоритмы на основе дерева работают лучше с большей важностью функций. Когда мы используем LighGBM, он дает более высокую производительность по сравнению с другими моделями. LightGBM и XgBoost - самые популярные в сообществе Kaggle. Выбор функции также повышает оценку.

Ниже представлена ​​сравнительная таблица различных алгоритмов.

8. Заключение и дальнейшая работа:

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

9. Ссылки:

  1. Https://www.kaggle.com/c/kkbox-music-recommendation-challenge/overview
  2. Https://github.com/lystdo/Codes-for-WSDM-CUP-Music-Rec-1st-place-solution
  3. Https://www.kaggle.com/asmitavikas/feature-engineered-0-68310
  4. Https://www.kaggle.com/rohandx1996/recommendation-system-with-83-accuracy-lgbm
  5. Https://www.appliedaicourse.com/course/11/Applied-Machine-
    обучающий курс

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

Вы можете найти полный код в моем репозитории на Github (здесь).

Рад связаться с вами в LinkedIn :)