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

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

В частности, я предполагаю, что у вас есть:

  • Каталог продукции
  • Набор пользователей
  • Взаимодействие между продуктами и пользователями (например, клики, конверсии, лайки и т. д.)

Вы могли бы использовать новейший алгоритм глубокого обучения, но:

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

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

Этап 1. Нет рекомендаций (самые популярные товары)

Самые популярные продукты популярны не просто так. Показать им. Всего несколько строк кода!

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

Этап 2. Исторические продукты

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

Этап 3. Совпадение попарно (также известная как дешевая матричная факторизация)

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

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

Этап 4: фактическая факторизация матрицы

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

Этап 5: глубокое обучение, наконец!

Теперь вы готовы удивить своего технического директора новейшими технологиями глубокого обучения. Взгляните на бенчмарк и поиграйте с кучей методов. Я с трудом удержусь от саморекламы LED, легковесного автокодировщика, который мы разработали в Criteo в 2020 году. Код есть на github под лицензией Apache 2.0, и он до сих пор довольно хорошо занимает место в таблице лидеров как Я пишу эту статью. Если вы заботитесь об эффективности в масштабе, этот алгоритм должен вас заинтересовать.

Теперь, когда у вас есть ингредиенты, вот секреты хорошего рецепта.

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

Совместная фильтрация карликов метаданных. Обратите внимание, что ни один из упомянутых выше алгоритмов не использует метаданные продуктов или пользователей. Это связано с тем, что совместная фильтрация включает большую часть сигнала в рекомендацию. Такие сигналы, как «таким, как вы, также нравится…» или «людям, которым понравился этот продукт, также понравился этот», невероятно эффективны. Amazon не стала компанией с оборотом в триллион долларов просто так.

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

Вы улучшаете то, что измеряете. Если вы внедрите систему тестирования AB (хорошая идея!), помните, что теперь все изменения вашего продукта будут основываться на ней. Будьте осторожны с тем, какой показатель вы оптимизируете, и следите за долгосрочным развитием вашей производительности.

Убедитесь, что вы всегда совершенствуетесь. Если вы постоянно меняете свою модель, вы можете оказаться в ситуации, когда вы не уверены, действительно ли вы улучшились по сравнению с тем, что было некоторое время назад. Лучший выход из этого — «базовое тестирование AB», когда вы выделяете небольшую часть своего трафика (скажем, 5%) базовому алгоритму (например, самым популярным продуктам), а затем постоянно измеряете рост между тестом и контролем. Население. Этот подъем никогда не должен уменьшаться. Это, конечно, означает, что теперь вы можете экспериментировать только с оставшимися 95% (т. е. типичная установка: A = 5 % базовой линии, B = 50 % производства, C = 45 % нового-супер-крутого-алгоритма). B-A всегда должен увеличиваться с течением времени (это долгосрочный мониторинг), в то время как C-B должен быть положительным перед развертыванием (это краткосрочный критерий развертывания).

Предположим, что ваш код неверен. Всегда работает инфраструктура A/B-тестирования (т. е. если алгоритм не изменился). Тест должен быть нейтральным. Да, я сказал нейтрально, а не позитивно, да ладно! (если у вас действительно нет оснований так полагать)

Не изучайте навигацию по веб-сайту. Это кажется очевидным, но методы 3, 4 и 5, упомянутые выше, учится на сопутствующих событиях в ваших исторических данных. Эти данные могут быть искажены навигацией вашего веб-сайта, поэтому, если вы попытаетесь извлечь уроки из этого и добавите свой механизм рекомендаций в механизм навигации вашего веб-сайта, что ж, … могут произойти вещи, которые не должны были произойти 🙂

Учитесь у лучших. Если вы серьезно относитесь к рекомендациям, существует суперкрутое и растущее сообщество, которое будет радо услышать от вас. Заходи в RecSys!

И на этом желаю вам отличных приключений в reco-land!