Люблю новые задачи. На этот раз речь шла о создании системы рекомендаций для целей сопоставления проектов и пользователей.

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

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

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

Для чего вы оптимизируете?

Посмотрите на Netflix.



В Netflix рекомендации есть почти везде. Весь продукт построен с учетом них.

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

Но откуда им знать, что показывать? Есть более глубокий вопрос - для чего оптимизировать?

Может быть, дело не только в максимальном доходе от денежных потоков или максимальной точности офлайн?

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

Рассмотреть возможность:

  • Как пользователи хотели бы взаимодействовать с системой? Какие возможные рабочие процессы? Каковы возможные места для персонализации опыта?
  • Какой метод ранжирования использовать? Какие результаты понравятся нашим пользователям (разнообразие, свежесть, сходство,…)?

Какой метод использовать?

«Используйте совместную фильтрацию», - сказали они.

Но если вы не собрали большие объемы данных, этот подход, вероятно, не сработает. Вначале вы потратите время зря.

Плюсы / минусы некоторых других подходов:

  • Неперсонализированный (NP). Просто - используйте некоторую статистику по всем данным (отсутствие глубокой персонализации). Такие сервисы, как Reddit или Digg, реализовали эту модель. Вы также можете заниматься другими делами. Такие функции, как анализ корзины (функция «Клиент также купил»), довольно просты.
  • На основе знаний (КБ). Расширить предыдущий подход описанием элементов (метаданными). Затем запросите базу данных для поиска наиболее подходящих. Это приведет к некоторому уровню персонализации. Например, предварительная фильтрация данных с использованием информации, декодированной с IP-адреса пользователя. При работе с редкими или дорогими предметами (например, роскошными автомобилями, недвижимостью и т. Д.) Часто невозможно собрать достаточно данных о взаимодействии. Тогда КБ может быть единственно возможным подходом. И вы также можете создавать запросы множеством способов. Взгляните на MyProductAdvisor. Они могут помочь вам купить лучшую машину для себя, используя умный интерфейс на основе собеседования. Также простой для начала.
  • На основе содержания (CB). Сюда же добавляем еще один сигнал - рейтинг пользователей. Зная его предпочтения (явные или неявные), мы создаем отдельный профиль пользователя. Рекомендации по товарам выдаются на основе выбранной метрики сходства. Для этого каждый элемент сравнивается с профилем пользователя. С этим тоже огромная проблема - отсутствие новизны предложений. Все результаты чем-то похожи на те, с которыми ранее взаимодействовали. Также может потребоваться какой-нибудь умный способ вычисления векторов профиля пользователя.
  • Совместная фильтрация (CF). Самый популярный подход, который вообще не учитывает особенности предметов. Использует только исторические данные о взаимодействиях пользователя. Ожидайте новых и удивительных результатов с огромным его количеством.
  • Может, гибрид? Библиотека LightFM пытается объединить возможности CB и CF. Стоит проверить.

Но это также связано с проблемой…

Холодный запуск

Допустим, вы построили и проверили модель в автономном режиме. Он отлично работает, так что ... приступим к производству.

Но что происходит, когда регистрируется новый пользователь? Высокие шансы, вы ничего о нем не знаете. Методы CB и CF не будут работать, если он не предоставит некоторые данные о себе. Это может произойти либо явно, либо после некоторого взаимодействия с системой. Без некоторых предварительных знаний «персонализированный вывод» из нашей модной системы может выглядеть, ну…. странный.

Рассмотреть возможность:

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

Представляя результат

Это может показаться довольно простым. Возьмите прямые выходные данные модели и представьте топ-N элементов.

Но здесь есть и некоторые предостережения:

  • Вам нужна постобработка! Вероятно, решающее значение будет иметь возможность внедрить какой-либо настраиваемый объект. Рекламный контент? Предпочитаете какую-нибудь нишу? Выйти из локальных минимумов (подробнее об этом позже)?
  • Психологический аспект. Пользователи могут беспокоиться, когда видят рекомендации, не зная, как они были составлены. Расскажите им, какие данные собираются и как они используются. Предоставьте им объяснения некоторых вариантов выбора (мы предлагаем вам X, потому что вам понравился Y). Сохраняйте спокойствие и безопасность, уважая вопросы конфиденциальности.

Развертывание

Создать оффлайн PoC несложно. Но выход в Интернет не так уж и прост:

  • Быстрые ответы - подумайте о задержке связи. Было бы полезно разместить алгоритм как можно ближе к источнику данных. Это будет особенно важно для динамических рекомендаций. Там расчеты должны происходить практически мгновенно. Вы можете использовать некоторые встроенные функции баз данных. Некоторые из них позволяют писать собственные расширения. Например, в Postgres вы можете написать собственный высокоэффективный код на C. Другие проблемы, такие как сериализация или десериализация данных, также могут иметь значительное влияние.
  • Переподготовка - после представления элементов для рекомендации набор данных каким-то образом смещен. Будьте очень осторожны при переобучении вашей модели. Ошибка, исходящая из цикла обратной связи, может быть неправильной экспоненциально. Возможным решением может быть маркировка всего, что было представлено пользователю. Эти примеры не будут использоваться в дальнейшем обучении.
  • Мониторинг производительности - как узнать, работает ли ваша система? Помните о дрейфе концепций. Сезонные изменения или тенденции также могут отрицательно повлиять на производительность. Могут быть злоумышленники, пытающиеся изменить вашу модель с помощью определенного взаимодействия. Чтобы мгновенно отреагировать, подумайте о какой-нибудь приборной панели в реальном времени, представляющей вам текущее состояние. Также могут быть полезны такие возможности, как оповещение или мгновенный откат алгоритма.

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

Если у вас есть вопросы или вам нужна дополнительная помощь, свяжитесь с нами.