Давайте поговорим про рекомендательные системы.
Но пока расскажите про сервисы с лучшими на ваш взгляд рекомендациями?
Первая категоризация рекомендаций: персонализированные и неперсонализированные. Давайте начнем с неперсонализированных
Неперсонализированных - рекомендации которые не будут зависеть от истории пользователя. Перефразируя, рекомендации которые будут одинаковы у разных пользователей
Частный случай - топ: самые часто просматриваемые фильмы, фильмы с наивысшим рейтингом, часто коммертиоуемые посыт, самые покупаемые товары
В такого типа рекомендации легко добавить "слабую" персонализацию. Например, популярное в вашем регионе, часто покупаемые вашим полом.
Но также не стоить забывать про ручные неперсонализированных рекомендации, например авторские подборки
Неперсонализированных рекомендации - лучший способ проверить гипотезу, нужны ли вам в этом месте рекомендации. Своего рода "proof of concept". Они легче в реализации, легки в проверке, когда сервис новый и еще мало истории
Пример неперсонализированных рекомендаций - похожие товары m.lamoda.ru/cb/43-4035/sho…
Это товары заменители:
- вам понравился товар, которого нет в наличие, но вы можете выбрать похожий
- у товара неподходящая цена, бренд или цвет, тут тоже помогут похожие товары
Логично предположить, что пользователи не хотят, чтоб эта полка рекомендаций была разная при обновлении страницы или если вы переходите с устройство на устройство.
Допустимые обновления через день - удалить из списка недоступные товары и добавить похожие из новинок
Но какие еще реки допускают отсутствие персонализации: похожие (о них было выше), кросс (с этим товаром покупают), апсейл (докиньте в корзину еще эти товары, вам не помешает)
Но как делать персонализацию? Можно поделить все на сегменты - каждому сегменту свои подборки. Проблема - что чем меньше куски, на которые делим, тем меньше данных по каждому куску
Далее, для тех, кто много времени потратил на классический ML: можно делать бинарную классификацию - будет клик/не будет клика (или другой таргет)
В качестве объекта - user, item, pairwise фичи от user+item.
Этот подход легок, если вы хороши в ML, но какие минусы?
если много пользователей =N, если много объектов=M - то тогда объектов будет NxM очень-очень много
Также пользователи меняются, они делают клики, делают покупки и прочее: а значит меняются фичи. Пересчитывать каждый раз - не всегда выгодно.
Делают "воронки" моделей, для отборов пользователей и/или товаров: хороший доклад делал мой классный товарищ youtube.com/watch?v=V_KmTq…
Но так: популярные подходы SVD и его развитие, FM и разные реализации. На основе матрицы взаимодействия пользователей с объектами делаются персональные рекомендации.
Различные виды коллаборативный фильтраций.
Все это уже работает быстро. И даже параллелится. И даже на кластере
Жопа везде,но есть 2 основных места
1)бизнес-правила, рекомендации иногда думают, что лучше человека, но они не знают какие идеи накладываются на ту или иную полку
2)метрики:а как понять, что старые лучше новых? Ну да, на глаз может быть лучше, да, если клики - вы растите roc-auc
... roc-auc - если вы пошли по классическому пути и прогнозируете клик, при паре user+item
Но все это не гарантия, что новые реки лучше старых. Ведь вы растите скорее всего деньги.
Растить клики - легко, показывайте треш, на него все кликают.
Растите покупки - показывайте самые выгодные товары, с большими скидками и прочим.
Но вы растите скорее всего чистую прибыль.
Ее в модельку загнать тяжело.
Вам нужна метрика, которая отсеет хотя бы часть плохих моделей. Это самая большая проблемка.
Да, есть NDCG и прочее. Но ее увеличение ничего не гарантирует
#meme
Мне нравится, что тут все сложно, что я часто чувствую себя тупицей, что нет классического fit-predict-а
Много осталось за скобками, например выбор товаров с помощью FM, фильтрация по бизнес-правилам, а далее ранкинг. Очень много вариантов
Но в этом и кайф. Удачи с реками)