Ответ
В рекомендательной системе, над которой я работал, проблема холодного старта решалась комбинацией нескольких не-Personalized подходов, пока не накапливалось достаточно данных для коллаборативной фильтрации.
Основные стратегии для нового пользователя:
-
Рекомендация самых популярных товаров (Most Popular): Самый надежный и простой метод. Мы ранжировали товары по глобальному количеству покупок или просмотров за последние N дней и показывали топ.
# Пример: расчет популярных товаров за последнюю неделю import pandas as pd # df_interactions содержит колонки: 'item_id', 'user_id', 'event_type', 'timestamp' df_recent = df_interactions[df_interactions['timestamp'] > (now - pd.Timedelta(days=7))] popular_items = (df_recent[df_recent['event_type'] == 'purchase'] .groupby('item_id').size() .sort_values(ascending=False) .head(20)) # popular_items - это Series с item_id и количеством покупок -
Контентно-демографические рекомендации: Если при регистрации пользователь указал демографические данные (например, пол, город), мы рекомендовали популярные товары в его сегменте. Например: «Самые покупаемые кроссовки среди мужчин 25-35 лет в Москве».
-
Рекомендации по контексту сессии (Session-based): Для пользователя, который уже что-то смотрит, но еще не идентифицирован, использовались простые правила:
- „Похожие товары“: На основе заранее рассчитанных эмбеддингов товаров (например, через Item2Vec на исторических сессиях) или по общим тегам/категориям.
- „Часто покупают вместе“: Правила ассоциаций (Apriori), рассчитанные на исторических данных по корзинам.
-
Диверсификация (Exploration): Чтобы быстрее собрать данные о предпочтениях, небольшую долю рекомендаций (например, 1-2 слота из 10) отдавали под случайные товары из перспективных новых или низкорейтинговых категорий.
Переход к персонализации: Как только у пользователя фиксировалось более 3-5 явных взаимодействий (покупка, добавление в избранное, детальный просмотр), система постепенно увеличивала вес предсказаний коллаборативной фильтрации (Implicit ALS) и гибридной модели, снижая вес глобального топа. Полный переход на персонализированные рекомендации происходил после 10+ взаимодействий.
Ответ 18+ 🔞
Ну слушай, история про холодный старт — это вообще отдельная песня, пиздец. Представь: заходит к тебе новый пользователь, нихуя о нём не известно, а уже надо что-то впарить. Как будто слепому гадалке карты таро разложить. Но, бля, выход есть, и он не такой уж и кривой.
Вот смотри, как мы эту проблему решали, пока данных о человеке — ноль ебать.
Чем кормили свежего юзера, пока он не обжился:
-
Топ самых ушатанных товаров (Most Popular). Самый беспроигрышный вариант, ебать мои старые костыли. Берёшь всё, что народ скупал как горячие пирожки за последнюю неделю, и суёшь этому новичку. Логика проще пареной репы: раз все брали — значит, норм штука, и нашему челу, скорее всего, зайдёт. Не промахнёшься.
# Считаем, что за неделю народ хавал больше всего import pandas as pd # df_interactions — тут всё: 'item_id', 'user_id', 'event_type', 'timestamp' df_recent = df_interactions[df_interactions['timestamp'] > (now - pd.Timedelta(days=7))] popular_items = (df_recent[df_recent['event_type'] == 'purchase'] .groupby('item_id').size() .sort_values(ascending=False) .head(20)) # В popular_items теперь item_id и сколько раз их хапнули -
Подгон под статичные данные. Если чел при регистрации не поленился и указал пол, город или возраст — уже полегче. Тогда не просто «самое популярное», а «самое популярное среди таких же пидоров, как ты». Ну, типа: «Мужики 30 лет из Питера чаще всего берут вот этот набор для выживания в офисе». Уже теплее, ёпта.
-
Цепляешься за то, что он уже тыкает в сессии. Ага, он ещё не залогинился, но уже что-то смотрит. Вот тут включается хитрая жопа. Смотришь на товар, который он пялит, и быстренько подсовываешь:
- Похожие штуки: По заранее посчитанным эмбеддингам или просто по общим категориям — «смотри, вот такая же мартышлюшка, но с перламутровыми пуговицами».
- Частые спутники: Правила типа «кто купил этот чайник, тот часто берёт и эту сраную прихватку». Старо как мир, но работает.
-
Разведка боем (Exploration). А вот это, чувак, ключевой момент, чтобы не застрять в болоте. Если всегда показывать только топ, то как узнать, что наш новый пользователь — фанат редких японских удобрений для бонсая? Поэтому специально 1-2 слота из десяти отдавались под какую-нибудь рандомную дичь из новых или непопулярных категорий. Рискованно, но без этого нихуя не узнаешь.
А потом магия случается. Как только пользователь делает больше 3-5 осмысленных действий (купил, лайкнул, в корзину кинул), система потихоньку начинает понимать, что он за зверь. Вес у этого общего топа падает, а на сцену выходят тяжёлые артиллеристы: коллаборативная фильтрация (Implicit ALS) и гибридные модели. И вот когда у человека уже 10+ взаимодействий, он получает свои персональные рекомендации — отточенные, острые, блядь, как бритва. В этот момент он уже не «новый пользователь», а полноценный член стаи, и система ему подбирает штуки так, будто она у него в голове побывала.