Все посты до этого были про персонализацию на больших каталогах (когда айтемов много). Но есть задачи по персонализации некоторых "стратегий" (или тритментов), в которых может быть очень много бизнес-профита (советую посмотреть статьи D. Goldenberg из Booking на RecSys 20/22 и др.).
Например, вам могут принести задачу: "построить рекомендательную систему скидок в такси, чтобы она рекомендовала, какую скидку дать конкретному клиенту". Тут можно спорить о терминах — рек. система это или нет, — но персонализация явно может помочь.
Датасет будет примерно такой:
user_id, treatment_group (0%, 5%, 10% скидки), date, targetЯ сталкивался с 4 разными прикладными задачами из разных доменов, которые подходят под это условие. И можно было бы сэкономить много времени, если бы знал следующее: делать что-то хорошее можно только на рандомизированной раздаче тритментов (то есть вы сначала делаете рандомную раздачу, и поверх нее только обучаете модель). И вот почему:
1. Это важно для обучения модели. Если большую скидку давать тем, кто вряд ли закажет, а маленькую — тем, кто пользуется постоянно, то модель выучит контринтуитивную связь:
Чем больше скидка, тем меньше вероятность, что человек купит → значит, всем надо дать маленькую скидку.
Когда же тритменты назначаются случайно, появляется шанс выучить что-то адекватное.
2. Это важно для валидации модели. Задачи часто связаны с финансами, и очень важно корректно оценить стратегию по эффективности. Когда-то я долго гуглил тему "evaluation of multiple treatments" и нашел вот такую статью. Я показал её коллеге Вите Харламову (@xapulc) и очень удивился, когда через пару дней Витя прислал ~5 страниц математического текста с доказательством корректности метода при определённых условиях. Потом узнал, что Витя учится в аспирантуре ММ МГУ :) Вот ссылка на его пост, где он рассказывает про метод и в целом обещал продолжить писать на тему персонализации.
Но иметь рандомизированную выборку дорого — её надо постоянно поддерживать для обновления модели; больший размер = меньше эффект от персонализации и т. д. Поэтому хочется использовать смещённые данные (а) для обучения и (б) для валидации.
Сейчас думаю так: для обучения можно пробовать разные методы "устойчивые к смещению" (они легко гуглятся) — например, аккуратно добавлять смещённую часть данных к рандомной. Но вот валидацию моделей, насколько я знаю, можно делать только на чистом рандомном эксперименте. Если вы знаете другие способы — пишите в комментариях 👇