Как сказал генеральный директор Netflix Рид Хастингс: «Знаешь, подумай об этом, когда ты смотришь шоу Netflix и становишься зависимым от него, ты не ложишься спать поздно ночью. Мы конкурируем со сном на грани ". С моей точки зрения, решающая часть конкурса заключается в том, как доставлять нужный контент нужным людям в нужное время, а именно в системах рекомендаций.

Системы рекомендаций всегда привлекали мое внимание. Не только потому, что они являются важной частью приложений машинного обучения, но и потому, что они связаны с пониманием людей. Всякий раз, когда я слушаю музыку на Pandora, покупаю вещи на Amazon, заказываю одежду в Stitch Fix, смотрю фильмы на Netflix, читаю новости на StumbleUpon, просматриваю фотографии в Instagram или Pinterest, у меня возникает сильное чувство, что рекомендации заполнили все единственный уголок нашей цифровой жизни, и они будут продолжать формировать нашу жизнь в будущем.

Это привело к тому, что я выбрал свой проект Galvanize Capstone для создания рекомендательных систем для ароматов. Люди говорят, что аромат, который вы носите, говорит о вас. На выбор парфюма влияет его / ее пол, возраст, национальность, климат, настроение, время года, время суток и т. Д. Поскольку в прошлом я принимал несколько неправильных решений, я был очень осторожен, когда решил купить новый несколько месяцев назад. Затем я подумал, что как специалист по данным, я смогу ответить на вопрос, используя свои знания в области науки о данных и машинного обучения. Вот как я разработал эту идею - помогать людям находить свои фирменные духи.

1. Рабочий процесс проекта

Я собрал данные с крупнейшего форума ароматов в Китае, используя 6 экземпляров AWS EC2. Сохранил их в 7-м экземпляре EC2 для MongoDB. После того, как данные были готовы, я провел анализ данных, разработку функций, моделирование и перекрестную проверку. Затем я создал веб-приложение, используя Flask и Bootstrap. Наконец-то разместили веб-приложение на AWS.

2. Данные

Данные взяты с крупнейшего форума парфюмерии в Китае (потому что самый крупный в США запретил мне очищать), он состоит из двух таблиц. Одна таблица - это данные о парфюмерии с такими характеристиками, как бренд, пол, примечание, тема и т. Д. Другая таблица - это данные о пользовательских рейтингах, которые содержат идентификатор пользователя, идентификатор духов, рейтинг пользователя (от 2 до 10) и комментарии пользователей.

3. Модели

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

(Домашняя страница веб-приложения предлагает три варианта, чтобы найти свой следующий аромат)

Модель 1: рекомендатель на основе содержимого

Единственное, что нас волнует, чтобы создать рекомендательный продукт, основанный на содержании, - это особенности духов. Поскольку в собранных мною данных не было функции, которая бы сообщала мне, что люди чувствуют, когда они нюхают духи, я применил NMF (неотрицательная матричная факторизация) и LDA (латентное распределение Дирихле) к текстам пользовательских комментариев для моделирования темы. Сравнив темы, созданные каждым методом, я обнаружил, что 12 тем, созданных LDA, более интерпретируемы. Таким образом, я вручную пометил 12 тем LDA, объединил их вместе с другими характеристиками парфюмерии, такими как пол, заметка и тема, построил матрицу ароматов, а затем построил модель сходства на основе контента, основанную на сходстве Жаккара.

(Снимок рекомендателя на основе содержимого)

Модель 2: рекомендатель совместной фильтрации

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

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

Базовая модель - это случайная рекомендация парфюмерии для пользователей, что означает, что оценка должна быть средней (7,25 из 10) для всего, она дала мне RMSE 2,20.

После этого я построил модель подобия предмета-предмета. Он работал плохо (RMSE: 7,32), потому что матрица оценок пользователей была слишком разреженной (0,3% ячеек заполнены значениями), а когда матрица слишком разреженная, методы соседства не могут работать хорошо, потому что в каждое предсказание входит мало информации.

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

(Рисунок выше: УФ-разложение матрицы M)

Производительность моделей совместной фильтрации показана на рисунке ниже:

4. Как я проводил разделение обучающих тестов и перекрестную проверку

Когда кто-то говорит: «Я создал рекомендатель», мне приходит в голову первый вопрос: «Как вы проверили эффективность своего рекомендателя?» Потому что это самая сложная часть любой рекомендательной системы. В моем проекте для рекомендателя на основе контента, поскольку он не контролируется и рекомендуется полностью на основе характеристик духов, я подтвердил его, позволив одноклассникам попробовать и увидеть результат. Рекомендации в целом были хорошими, особенно функция «Найти похожие» на главной странице, но самый большой недостаток заключается в том, что данные о ценах на духи недоступны, покупатель, который любит духи Chanel, вероятно, не пойдет на массовый бренд, даже если у них похожие ингредиенты. Однако для функции «Пройти тест» на домашней странице, если пользователь выбрал только несколько функций, результат будет отключен, потому что модель строит вектор на основе всех функций, выбранных пользователем, и вычисляет расстояние Жаккара между пользователем. вектор и каждый парфюм.

Что касается рекомендаций по совместной фильтрации, первым методом перекрестной проверки, который я попробовал, была перекрестная проверка с пропуском по одному, но мне потребовалось 18 часов, чтобы завершить один цикл, что слишком дорого с вычислительной точки зрения, поэтому я переключился на ручную K-кратную проверку. . Во-первых, я вручную удалил пользователей с менее чем 3 оценками, рассматривал их как часть проблемы холодного запуска и позволил им использовать вместо этого рекомендательный элемент на основе содержимого. Затем для пользователей с 3 или более оценками я убедился, что каждый пользователь существует в моем наборе для обучения, наборе проверки и наборе тестов. Поэтому я могу использовать рейтинг пользователя в обучающем наборе, чтобы соответствовать модели, прогнозировать рейтинг других оценок пользователя в наборе проверки и настраивать модель на основе RMSE на наборе проверки. И, наконец, я использовал оценки пользователей в тестовом наборе, чтобы оценить окончательную модель.

5. Ограничения и дальнейшая работа

1) Ограничения по данным:

  • Информация о ценах недоступна: покупатель, который любит парфюмерию Chanel, скорее всего, не обратится к бренду массового потребителя, даже если у него схожие ингредиенты.
  • Демографические данные пользователей недоступны: люди воспринимают каждый аромат по-разному в разных культурах и географических регионах, мои данные взяты с китайского форума ароматов, чувства, которые люди испытывают к каждому аромату там, не отражают чувства, которые люди испытывают к каждому аромату в других странах.
  • Были рассмотрены только 20% всех духов: одним из преимуществ хороших рекомендательных систем является ее интуитивная интуиция. Но для того, чтобы понять, как покупатели относятся к каждому парфюму, я могу смотреть только на те духи, которые уже имеют комментарии пользователей. Однако 80% парфюмерии - нет, либо потому, что они не популярны, либо потому что они новые. Поэтому для того, чтобы мои системы рекомендаций работали лучше, необходимы более глубокие знания в области парфюмерии и разработка функций, так как мне не нужно полагаться на комментарии пользователей, чтобы получить информацию о том, что люди думают о каждом аромате.

2) Со временем вкусы клиентов меняются.

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

3) Есть ли подходы лучше?

  • да. Никогда не должен прекращать учиться.

6. Заключительные мысли

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

Код можно найти здесь: github.com/kellypeng/scentmate_rec

Связаться с автором: https://www.linkedin.com/in/pengyuwei/

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

  1. Ананд Раджараман и Джеффри Уллман, Mining Massive Dataset, Глава 9 Системы рекомендаций
  2. Йехида Корен, Роберт Белл и Крис Волински, Методы матричной факторизации для рекомендательных систем
  3. Иегуда Корен, Факторизация встречает соседство: многогранная модель совместной фильтрации
  4. Стивен Гауэр, Netflix Prize и SVD
  5. Джиунн Хаур Лим, Прогнозирование рейтингов пользователей с помощью матричной факторизации