Данные

Как упоминалось в моей предыдущей записи, моделирование было выполнено с 2% выборок данных (20 000). Что для некоторых может быть или не быть достаточно большим.

Если говорить о больших данных, то 20 000 сэмплов определенно недостаточно. Для нашего набора данных, 1 миллион плейлистов, 66,3 миллиона треков среди плейлистов и 2,2 миллиона уникальных треков, мы имеем дело с серьезным набором данных.

Вся обработка 2% данных была выполнена локально на компьютере с 32 ГБ оперативной памяти без каких-либо проблем, самой сложной частью было обучение и оценка, которые заняли около 3 часов.

При попытке провести обучение и оценку на полном наборе данных 1M он просто не помещался в памяти, и нам нужно было перейти на экземпляр AWS.

АМС

Экземпляр AWS

AWS предлагает множество вариантов, и вы можете использовать экземпляр, который лучше всего соответствует вашим потребностям. Как вы можете видеть, есть типичный экземпляр, который можно найти на компьютере каждый день, и большой экземпляр с 384 ГБ памяти (здесь не изображен).

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

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

Обработка AWS

Теперь, когда у нас на AWS все настроено с необходимыми записными книжками и данными, мы начали обучать модели на полном наборе данных объемом 1 млн. После 5 часов работы мы обнаружили, что на один поезд и подсчет очков ушло 4 часа, что было просто вне нашего бюджета и доступного времени (по крайней мере, 16 дней и 1 тысяча долларов).

Вы должны помнить, что это занимает много времени, потому что для выбора правильной модели и количества кластеров 4 модели (KMeans, Birch, Agglomerative и Gaussian Mixture) должны быть обучены с k = от 2 до 100. .

Почему это заняло слишком много времени?

Да, эта нотация Big-O преследовала нас. Мы используем 3 различные функции оценки: Силуэт, Дэвис-Боулдинг и Калински-Харабаш со временной сложностью O(n2), O(nlogn) и O(nlogn) соответственно. Проанализировав это, неудивительно, что это заняло так много времени.

На данный момент мы знали, что в 2 % данных KMeans с k=17 является лучшей моделью, но мы не знали, будет ли это верно для остальных данных и будет ли справедливо, 2% было слишком мало.

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

Моделирование

Обработка длилась 24 часа, и мы получили очень похожие результаты на 2% данных.

Разумеется, лучшая модель и число k были одинаковыми, KMeans иk=17. Эти результаты вселили в нас уверенность при переходе сразу к набору данных 1M с KMeans и k=17.

Вот результаты после обучения модели. Формирование кластера близко к 2% данных и то же самое для имен плейлистов.

Анализ

Почему мы получаем похожие результаты?

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

Что это значит для нашей рекомендательной системы?

Попробовав систему с

Уроки выучены

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

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

Еще одна область улучшений заключалась в создании базы данных sqlite вместо использования файла json в качестве базы данных, что сэкономило нам время и место для хранения. От 35 ГБ до 8 ГБ.

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