- PVSM.RU - https://www.pvsm.ru -

Многорукие бандиты: модель dynamic Gamma-Poisson

В прошлый раз мы рассмотрели общую постановку [1] задачи о многоруких бандитах, обсудили, зачем это может быть нужно, и привели один очень простой, но эффективный алгоритм. Сегодня я расскажу о ещё одной модели, которая эффективна в ситуациях, когда ожидаемые доходы от бандитов меняются со временем, да и само число и состав «ручек» может меняться – о динамической гамма-пуассоновской модели.

Многорукие бандиты: модель dynamic Gamma Poisson

Эта модель относится к так называемым онлайн-моделям рекомендаций. Постановка задачи здесь отличается от оффлайн-моделей (к которым относятся основные методы коллаборативной фильтрации – метод ближайших соседей, SVD и их варианты и так далее) тем, что главная цель онлайн-рекомендаций – как можно быстрее «поймать» изменения популярности тех или иных продуктов. Поскольку, как правило, данных недостаточно, чтобы такие изменения можно было отслеживать методами коллаборативной фильтрации, онлайн-методы обычно объединяют данные о рейтингах всех пользователей, не занимаясь персонализованными рекомендациями. Более того, часто возникают ситуации, когда система не может дать разумных рекомендаций по методу коллаборативной фильтрации (новый пользователь, пользователь, у которого недостаточно ближайших соседей и т.д.); в таких ситуациях рекомендательные системы тоже часто выдают рекомендации, основанные на своих онлайн-компонентах (см. также недавний пост Василия Лексина [2] о задаче «холодного старта» – мы будем продолжать и ту серию тоже). В качестве хорошего обзора разных методов онлайн-рекомендаций могу порекомендовать эту презентацию [3]; правда, это слайды, а не текст, и там всё очень сжато изложено, так что её лучше использовать как источник ключевых слов и ссылок.

А мы для целей этого поста представим себе такую ситуацию (я её уже упоминал в предыдущей серии). Пусть мы – портал, делаем деньги тем, что размещаем рекламу, и в качестве завлекательного контента нам нужно разместить новостные объявления, по которым пользователи захотят переходить (и видеть ещё больше вкусной рекламы). Внизу – типичная картинка, показывающая (нормализованный) click-through ratio (CTR) нескольких новостей на домашней странице Yahoo; видно, что изменения происходят достаточно быстро, и изменения эти значительны: новости быстро «протухают», и реагировать на это, пересчитывая систему коллаборативной фильтрации раз в сутки, невозможно.

Многорукие бандиты: модель dynamic Gamma Poisson
(реальный сэмпл новостей с домашней страницы Yahoo [3])

Формально говоря, у нас есть набор продуктов/сайтов; мы сейчас хотим оценить CTR каждого из них по отдельности, независимо, поэтому в дальнейшем будем работать с одним из них. Фиксируем период времени t (небольшой) и будем считать показы (общее число экспериментов) и клики (отметки «like» или другие желаемые исходы) за время t. Пусть мы в течение периода t показали сайт nt раз и получили рейтинг rt (rt – целое число, меньшее nt). Тогда нам в каждый момент времени t дана последовательность Многорукие бандиты: модель dynamic Gamma Poisson, и мы хотим предсказать pt+1, долю успешных показов (CTR) в момент t+1.

Перечислим первые естественные идеи:

  • сортировать по текущему Многорукие бандиты: модель dynamic Gamma Poisson; такая сортировка будет действительно быстро реагировать, но, скорее всего, будет реагировать слишком быстро, т.е. будет крайне нестабильной: случайные флуктуации будут оказывать непропорционально сильное воздействие;
  • сортировать по общему среднему Многорукие бандиты: модель dynamic Gamma Poisson; у такого подхода будут обратные проблемы – он крайне медленно будет реагировать на изменения, и уже давно «протухшие» новости останутся в топе;
  • сортировать по среднему, подсчитанному по скользящему окну, Многорукие бандиты: модель dynamic Gamma Poisson; это уже вполне разумная эвристика, но здесь мы не получаем оценки на дисперсию pt+1, а также не можем подстроиться под разную скорость изменений в разных «ручках».

Для решения этой задачи предлагается использовать так называемую модель dynamic Gamma–Poisson (динамическая гамма–пуассоновская модель, DGP). Вероятностные предположения DGP таковы:

  • Многорукие бандиты: модель dynamic Gamma Poisson (для фиксированных nt и pt получается rt, распределённое по пуассоновскому распределению);
  • Многорукие бандиты: модель dynamic Gamma Poisson, где Многорукие бандиты: модель dynamic Gamma Poisson (средняя доля успешных показов pt
    меняется не слишком быстро, а путём умножения на случайную величину εt, которая имеет гамма-распределение вокруг единицы);
  • Параметрами модели являются параметры распределения Многорукие бандиты: модель dynamic Gamma Poisson,
    а также параметр η, который показывает, насколько «гладко» может изменяться pt; соответственно, задача заключается в том, чтобы оценить параметры апостериорного распределения
    Многорукие бандиты: модель dynamic Gamma Poisson

После долгих математических мучений (которые я здесь опущу) получается очень простой итеративный алгоритм для пересчёта параметров этой модели (собственно, конкретная форма распределений была выбрана такой именно для того, чтобы он получался: гамма-распределение является сопряжённым априорным распределением [4] для пуассоновского распределения). Предположим, что на предыдущем шаге t-1 мы получили некоторую оценку μt, σt для параметров модели:
Многорукие бандиты: модель dynamic Gamma Poisson
а затем получили новую точку (замеры за новый период времени) nt, rt. Обозначим Многорукие бандиты: модель dynamic Gamma Poisson (эффективный размер выборки). Тогда мы сначала уточняем оценки μt, σt:
Многорукие бандиты: модель dynamic Gamma Poisson
а затем порождаем новое предсказание для Многорукие бандиты: модель dynamic Gamma Poisson:
Многорукие бандиты: модель dynamic Gamma Poisson

В результате мы для каждого продукта (каждой ручки) будем поддерживать пару чисел Многорукие бандиты: модель dynamic Gamma Poisson, которые будут меняться после каждого периода времени. Список топ-продуктов можно породить, просто упорядочив их по Многорукие бандиты: модель dynamic Gamma Poisson (но Многорукие бандиты: модель dynamic Gamma Poisson забывать всё равно нельзя – дисперсия нужна, чтобы пересчитать потом среднее). Примерное поведение этой модели на части данных с главной страницы Yahoo! показано на рисунке ниже – выглядит неплохо.

Многорукие бандиты: модель dynamic Gamma Poisson
(часть сэмпла новостей с предсказаниями модели DGP)

Дальнейшее улучшение этой модели связано с тем, чтобы выбирать хорошие априорные распределения (хорошие μ0 и σ0) для новых ручек – это очень важно, потому что новые продукты (например, свежие новости) надо быстро вводить в строй, а поначалу данных о них не так много (тот самый холодный старт). Хорошая оценка априорного распределения получается из отрицательного биномиального распределения – предположим, что у нас есть в базе N исторических записей (N других сайтов), для которых известны показатели Многорукие бандиты: модель dynamic Gamma Poisson и Многорукие бандиты: модель dynamic Gamma Poisson (число показов и успешных показов за первый период времени); мы хотим получить оценку μ0 и σ0 для нового, неизвестного сайта, которая должна хорошо аппроксимировать ожидаемое r1 и n1 для нового сайта. Опять же, математику я опущу, а ответ такой – её нужно считать как
Многорукие бандиты: модель dynamic Gamma Poisson
где Многорукие бандиты: модель dynamic Gamma Poisson – гамма-функция. Максимизировать можно градиентным подъёмом – из точки движемся в сторону градиента, т.е. вектора частных производных.

Уфф. Эта инсталляция получилась заметно более «математической», чем предыдущая. Однако если вы не поняли вероятностного вывода, который произошёл выше, не отчаивайтесь – на выходе, как и прежде, получился простой алгоритм, который очень легко реализовать и который имеет достаточно внятное вероятностное обоснование (разумные предположения в модели). Его можно использовать во всех ситуациях «бандитских» задач, где нужно быстро реагировать на изменения. Например, в том же примере с A/B testing, который я приводил в прошлый раз [1], вполне может оказаться, что поведение или нужды пользователей со временем меняются, и хочется подстраивать то, что вы тестируете, под текущую ситуацию. А для нас в Surfingbird модель DGP – это важная модель для показа страниц, популярность которых может быстро меняться со временем (та же самая категория «новости», например); так мы быстро понимаем, когда тренд популярности начинает затухать.

В следующий раз мы, наверное, поговорим о какой-нибудь совершенно другой теме; кроме того, следите за обновлениями цикла о холодном старте в рекомендательных системах. До новых текстов!

Автор: snikolenko

Источник [5]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/algoritmy/27232

Ссылки в тексте:

[1] рассмотрели общую постановку: http://habrahabr.ru/company/surfingbird/blog/168611/

[2] пост Василия Лексина: http://habrahabr.ru/company/surfingbird/blog/168733/

[3] эту презентацию: http://pages.cs.wisc.edu/~beechung/kdd10-tutorial/3-RecommenderProblems-Online.pdf

[4] сопряжённым априорным распределением: http://en.wikipedia.org/wiki/Conjugate_prior

[5] Источник: http://habrahabr.ru/post/169573/