Явный и неявный фидбэк
Урок объясняет два источника сигналов о предпочтениях — явный и неявный — и почему неявный фидбэк удобнее собирать, но сложнее интерпретировать.
Явный фидбэк — это оценки, которые пользователь поставил сознательно (звёзды, лайк/дизлайк). Неявный фидбэк — это поведенческие следы (клики, просмотры, время, покупки), из которых предпочтение выводится косвенно.
Явный фидбэк
Оценка по шкале (например, 1–5 звёзд) — самый чистый сигнал: пользователь прямо сказал, насколько ему понравилось. Минус в том, что оценок мало. Большинство людей не ставят рейтинги, а если ставят — то выборочно и с перекосом (чаще оценивают то, что вызвало сильные эмоции). Поэтому данных мало, и они смещены.
Неявный фидбэк
Клик, просмотр, добавление в корзину, время на странице, покупка — этих сигналов на порядки больше, они копятся автоматически. Но у неявного фидбэка две принципиальные сложности.
Нет негатива. Если человек посмотрел фильм — это слабый плюс. Но если не посмотрел — это не обязательно минус: он мог просто не знать о фильме. В неявных данных почти нет явного «не понравилось», есть только «взаимодействовал» и «неизвестно». Это превращает задачу из «предсказать оценку» в «оценить вероятность взаимодействия среди океана неизвестного».
Шум и неоднозначность. Клик мог быть случайным, покупка — подарком, долгий просмотр — потому что человек отвлёкся. Один сигнал слаб; силу даёт их объём и комбинация.
Сравнение
| Свойство | Явный | Неявный |
| Объём данных | Мало | Очень много |
| Точность сигнала | Высокая | Шумная |
| Негативные примеры | Есть (низкие оценки) | Почти нет |
| Усилие пользователя | Требуется | Не требуется |
Как работает под капотом
Неявные данные обычно превращают в матрицу «уверенности»: чем больше взаимодействий пользователя с объектом, тем выше уверенность, что объект ему интересен. Отсутствие взаимодействия трактуют как слабый отрицательный сигнал с малым весом — отсюда популярная схема «положительные взаимодействия + случайно подобранные отрицательные» (negative sampling), которую мы ещё встретим в нейросетевых моделях.
# превращаем события в неявные «веса доверия»
weights = {"клик": 1, "в корзину": 3, "покупка": 5}
events = [
("u1", "товар_A", "клик"),
("u1", "товар_A", "в корзину"),
("u1", "товар_A", "покупка"),
("u1", "товар_B", "клик"),
]
from collections import defaultdict
confidence = defaultdict(int)
for user, item, ev in events:
confidence[(user, item)] += weights[ev]
for key, val in confidence.items():
print(f"{key[0]} -> {key[1]}: уверенность {val}")Вывод:
u1 -> товар_A: уверенность 9 u1 -> товар_B: уверенность 1
Частые ошибки
- Трактовать отсутствие клика как «не нравится». Чаще это «не видел». Негатив в неявных данных надо моделировать осторожно.
- Считать все события равными. Покупка и случайный клик несут разную информацию — взвешивайте.
- Применять метрики оценок к неявным данным. Здесь нет «правильной оценки», есть ранжирование — и метрики должны быть ранжирующими.
Итоги
- Явный фидбэк точен, но редок и смещён; неявный обилен, но шумен и почти без негатива.
- Главная сложность неявного сигнала — отсутствие явного «не понравилось».
- События взвешивают по силе и трактуют как «уверенность» в интересе.
- Negative sampling — стандартный приём для неявных данных.