[БЕЗ_ЗВУКА] Мы с вами уже немного пообсуждали рекомендательные системы, особенности их построения. Но вот зачем нужны рекомендации, если они не дают хорошего экономического эффекта? Не всегда это понятно. Иногда было бы неплохо простроить связь с экономическим эффектом, с повышением прибыли или хотя бы дохода. В случае рекомендации товаров эта связь достаточно прозрачна. Мы, как и прежде, будем иметь дело с данными о покупках, совершенных пользователями. И теперь мы, с одной стороны, можем действительно связать наши рекомендации с экономическим эффектом, а с другой стороны, в отличие от рекомендации музыки или рекомендации фильмов, здесь у нас не будет негативных примеров, мы знаем только о позитивных примерах, когда пользователь действительно что-то купил, ему действительно что-то понравилось. Что же в этой ситуации можно сделать? Можно попробовать спрогнозировать, какие же товары пользователь купит, и попробовать максимизировать прибыль, используя эти прогнозы. Допустим, на некоторой странице сайта магазина у нас есть блок с рекомендациями, и мы показываем там какие-то четыре товара. Возникает вопрос: какие товары показать, чтобы максимизировать, например, доход магазина за счет показов в этом блоке? Логичная мысль — показывать те товары, которые максимизируют матожидание дохода от их продаж. Итак, пусть мы знаем для этих товаров их вероятности, пусть мы знаем их цены. В таком случае матожидание дохода будет просто суммой произведений цены на вероятность для каждого товара. Значит, этот блок нужно заполнить такими товарами, которые дадут максимальную сумму. Но это просто товары, для которых произведение вероятности на цену самое большое. Допустим, мы идем дальше и хотим научиться максимизировать не просто доход, а прибыль. Тогда нам потребуются данные о маржинальности товаров. И теперь мы будем брать произведение не только вероятности на цену, но еще и на некоторое число, которое отражает маржинальность. При этом нам требуется как-то спрогнозировать вероятность покупки. Для этого нам нужно поставить какую-то задачу классификации. Например, можно рассмотреть следующую задачу. Пусть объектами будут тройки — пользователь, товар и момент времени, а классы — купит или не купит пользователь данный товар в этот момент времени. В качестве признаков мы можем использовать различные параметры пользователя, в том числе полученные из поведения пользователя на сайте, параметры товара, параметры момента времени, например, день недели, и какие-то дополнительные признаки, которые описывают взаимодействие уже перечисленных параметров. Например, как часто пользователь смотрел данный товар, или как часто пользователь смотрел товары из этой категории. Именно такие признаки больше всего сказываются на качестве работы классификатора в этой задаче. Однако мы неизбежно столкнемся с проблемой, что товаров в списке очень много, и для каждого товара применить классификатор, для каждого товара получить набор признаков может быть довольно долгой задачей. В этом случае придется выкручиваться за счет отбора кандидатов, то есть нам потребуется какой-то более простой алгоритм, для того чтобы сгенерировать сколько-то товаров, которые мы будем в дальнейшем пытаться скорить с помощью классификатора, и дальше мы работать будем только с ними. Но как можно отобрать кандидатов? Можно взять просто самые популярные товары или самые продающиеся товары, можно взять товары из тех же категорий, которые смотрел пользователь, можно взять товары, у которых высокий PMI с уже просмотренными или уже понравившимися пользователю товарами. Можно взять товары из заранее подготовленных списков похожих товаров, так тоже можно сделать, а потом уже переранжировать их с помощью машинного обучения. Другая проблема, с которой мы сталкиваемся, — это генерация негативных примеров. Как мы уже с вами говорили, у нас есть только позитивные примеры — случаи покупок. По-хорошему, кажется, что нужно было бы к каждому позитивному примеру, то есть к каждой покупке, добавить все остальные товары, которые не были куплены в этот момент в качестве негативных, но это, конечно, не реально. На такой выборке обучаться не получится. Тогда нужно каким-то образом сэмплировать товары для получения негативных примеров. Например, можно брать случайные товары с равномерным распределением по всем товарам, но в этом случае мы очень часто будем получать в качестве негативных примеров товары, которые не имеют никакого отношения к тому, который был в итоге куплен. И, конечно, классификатор научится отличать такие товары от тех, которые действительно релевантны, но это будет не очень полезное знание. Например, пользователь заходит на сайт для того, чтобы купить холодильник, и мы учимся понимать, что ему не нужны какие-то предметы одежды, которая есть в том же магазине. А нам же нужно уметь отличать товары из похожих категорий или из одной и той же категории. Можно выкрутиться из этой ситуации, генерируя случайные товары с вероятностями, пропорциональными популярности товаров. В этом смысле мы пытаемся смоделировать характерное поведение пользователя за счет использования популярности и научиться отличать какие-то персональные предпочтения от того, что мы видим в среднем по разным пользователям. Другой вариант — это выбирать не случайные товары, а просто самые популярные, но в этом случае в негативных примерах будут постоянно фигурировать одни и те же товары, и, наверное, это будет не очень хорошо для обучения классификатора. И один из самых интересных вариантов — это использовать в качестве негативных примеров те объекты, который рекомендовал бы некоторый алгоритм, то есть мы для построения какого-то алгоритма рекомендаций используем какой-то алгоритм рекомендаций, может быть, просто более простой. Например, можно посмотреть по PMI, какие товары похожи на те, которые пользователь уже смотрел, и взять из них самые популярные. Вот такая простая эвристика, и можно использовать этот алгоритм для генерации негативных примеров. Итак, мы поговорили с вами о том, как рекомендации можно строить с учетом желаемого экономического эффекта, обсудили прогнозирование вероятности покупки товара, поговорили про отбор кандидатов и про генерацию негативных примеров.