Проблема холодного старта

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

Холодный старт — это проблема рекомендаций для объекта без накопленных взаимодействий: нового пользователя, нового товара или совсем новой системы.

Три вида холода

Коллаборативные методы и матричное разложение питаются историей взаимодействий. Когда истории нет, питаться нечем.

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

Стратегии для нового пользователя

  • Популярное как фолбэк. Пока нет данных — показываем сглаженный топ (см. урок про baseline). Просто и всегда работает.
  • Онбординг-опрос. Спросить пару любимых жанров/товаров при регистрации — и сразу получить минимальный профиль.
  • Контекст без истории. Геолокация, устройство, источник перехода, время суток — слабые, но небесплатные сигналы.
  • Быстрое дообучение. Уже после нескольких кликов профиль начинает наполняться — важно реагировать в реальном времени.

Стратегии для нового товара

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

# фолбэк-логика: CF, если есть история, иначе контент/популярное
def recommend(user_history, content_neighbors, popular):
    if len(user_history) >= 3:
        return ("collaborative", "персональная лента по истории")
    if content_neighbors:
        return ("content", "похожие по признакам товары")
    return ("popular", popular[:3])

print(recommend(["A", "B", "C", "D"], [], []))
print(recommend([], ["X", "Y"], []))
print(recommend([], [], ["hit1", "hit2", "hit3", "hit4"]))

Вывод:

('collaborative', 'персональная лента по истории')
('content', 'похожие по признакам товары')
('popular', ['hit1', 'hit2', 'hit3'])

Как работает под капотом

В продакшене холодный старт почти всегда решают гибридом: маршрутизатор смотрит, сколько у объекта истории, и выбирает источник. Мало истории → контентная или популярностная ветка; достаточно истории → коллаборативная. По мере накопления взаимодействий вес коллаборативной части плавно растёт. Отдельная важная тактика — исследование (exploration): иногда специально показывать новые товары, чтобы собрать по ним первые сигналы и вывести их из холода.

Частые ошибки

  • Оставлять новичка с пустым экраном. Всегда нужен фолбэк (популярное), иначе пользователь уходит.
  • Хоронить новые товары. Без exploration свежие товары никогда не наберут историю и застрянут в холоде.
  • Ждать «достаточно данных» слишком долго. Профиль надо начинать строить с первых же действий.

Итоги

  • Холодный старт бывает у нового пользователя, нового товара и новой системы.
  • CF и факторные модели без истории бессильны — нужен фолбэк.
  • Новому пользователю помогают популярное, онбординг и контекст; новому товару — контентные признаки.
  • Продакшн решает холод гибридом плюс exploration новых объектов.
Проверьте себя
1. Почему коллаборативная фильтрация бессильна при холодном старте?
AОна слишком медленная
BУ нового объекта нет истории взаимодействий, на которой строится CF
CОна требует слишком много памяти
DОна работает только с текстом
2. Что лучше всего помогает рекомендовать совершенно новый товар без истории?
AПодождать год
BКонтентные признаки товара (категория, бренд, описание)
CСлучайный показ навсегда
DПолностью отключить рекомендации