Pull to refresh

Comments 50

Круто! Читать не стал. Много букв.
За что люблю хабр, за минусующих неадекватов обиженных жизнью. А статья на самом деле крутая. Жаль только не всегда можно выделить время на разбор такого количества информации.
К сведению, против «многоруких бандитов» есть средство :) Индексы Гиттинса.

На самом деле польза этих индексов в другом. Они позволяют оптимизировать задачу максимизации дохода в условиях возможности прерывания/продолжения игры.

То есть если вопрос не в кнопках, а скажем в скидках на заказы… то схему можно было бы похачить.
К сведению, против «многоруких бандитов» есть средство :) Индексы Гиттинса.

не понятно что значит против? Gittins index или UCB это просто разные подходы к одной и той же задаче о бандитах, и это три самых популярных подхода, и есть основания полагать, что именно семплирование Томпсона превосходит остальные подходы
Про лосося шикарно, жалко что зарыто внутри.
Спасибо за лосося, было интересно почитать.
Пожалуйста, не забывайте, что картинки под спойлером загружаются до открытия спойлера, предупреждайте о сотне мегабайт забавных танцующих графиков перед катом, заботьтесь о людях с медленным или ограниченным каналом.
чорт, я потому и убрал в спойлер, думал не прогружаются они сразу, ща отправлю им запрос через https://habrahabr.ru/feedback/, но они как я понимаю в большинстве случаем не реагируют никак, так что советую вам тоже отправить просьбу пофиксить это на сайте, может заметят
ого, круто, поделитесь со мной этой космической технологией
Нужен ffmpeg
ffmpeg -i 7b040fa8ccda428e9a16bbea460f47e2.gif -vf crop=1080:800:100:65 -c:v libvpx-vp9 -crf 23.5 -b:v 0k -pix_fmt yuv420p vid2.webm
Из 26.3 МБ gif получилось 1.5 МБ видео: https://files.catbox.moe/xmvto0.webm
Вставлять в пост тегом <video>
Прошу исправить ошибки в первой формуле… после того как написано что k имеет распределение Бернулли.
1. p c маленькой буквы это плотность… там должна стоять вероятность P
2. убрать из с правой стороны k=1 ведь k присутствует и слева…
3. с левой стороны поменять местами в показателях степеней k и k-1местами иначе при k=1 вероянсть будет равна тета… Спасибо
да чот напутал в начале с 0 и 1 соответственно, получилось что тета это вероятность не клика, поменял в общем, спс

Спасибо за мега полезную статью. Уточняющий вопрос про A/B тесты: мы научились считать n для желаемых величин альфа и бета, но оно зависит от тетта контроля, которое мы не знаем. Мы берем какую то его оценку по предыдущим тестам?

для того что бы провести тест необходимо узнать следующее:
— альфа и бета (каким либо образов выбираются, если это онлайн то скорее всего тычут пальцем в небо)
— текущую конверсию (из данных)
— текущую дисперсию (из данных)
— минимальный лифт, или то, сколько на минимум должна увеличиться конверсия, что бы новая вариация считалась успешной (кто то ответственный; из этого получается вторая тета)

теперь данных достаточно, что бы вычислить n

Что такое «p»?

Это очень невежливо по отношению к читателю вводить переменные в формулы не дав их расшифровки.
В первой же формуле.

\large \begin{array}{rcl} k &\sim& \text{Bernoulli}\left(\theta\right) \\ p\left(k\right) &=& \theta^k \left(1 — \theta\right)^{1 — k} \end{array}

P.S. Ваш math ajax даже не позволяет скопировать формулу в таком же виде, как оригинал.
ну я как бы надеюсь, что читатель понимает что такое p в той формуле без пояснения -) иначе нет смысла читать этот пост, sad but true
Именно по этому я и назвал это невежливым. Если читатель всё это и так понимает — для кого вы пишите?
тогда возникает ответный вопрос, а где порог? должен ли я излагать основы теории вероятностей? или лучше начать с арифметики, что кого нибудь не обидеть?
Для начала расшифровать все используемые переменные. Вчитываться в формулы куда приятнее, когда знаешь что каждый значок обозначает.

И вы тут путаете условные обозначения и теорию. Весь теорвер можно переписать с использованием значков (тут я хотел использовать эмоджи, но harbrahabr их режет), но, допустим, других букв. Формула из примера выше не меняет своего смысла от использования других букв:

Ф(л)=Жю(1-Ж)1-ю

Утверждать же, что всякий человек, знакомый с теорвером, обязан точно знать «общепринятную» букву для того или иного являения — это как раз и есть невежливость и алиенация.
общепринятая тогда уж f; но мне кажется, что из контекста все очевидно
Формула из примера выше не меняет своего смысла от использования других букв:

Ф(л)=Жю(1-Ж)1-ю

Вот как раз именно в таком написании она теряет всякий смысл

Да, я опечатался. Ф(ю), разумеется. Но суть вопроса не меняется — вежливым в отношении широкого круга читателей (aka habrahabr) является достаточно подробное изложение использованных аббревиатур и расшифровка перменных.

Во-первых, там все предельно подробно изложено.


Во-вторых, если вы понимаете, что на месте p могла стоять любая другая буква, то чем именно вам не нравится p? Это такая же другая буква, как и любая другая.


В-третьих, статья подразумевает наличие у читателя базовых знаний статистики. В ней не объяснены ни знак суммы, ни знак ~. Также в тексте встречается матожидание в виде записи E[x], которая тоже нигде не объясняется. Ни введено понятие условной вероятности и даже понятие вероятности тоже не введено. И еще, наверное, много чего.


Но это все вводится, дается и объясняется в любом базовом курсе статистики, знание которого является обязательным для понимания этой статьи.

UFO landed and left these words here
UFO landed and left these words here
Являются ли функции переменными? Я как питонист, утверждаю, что да. Например, я могу записать функцию в переменную.

Хотя вы правы, это непростительная оговорка. Расшифровывать надо не только имена перменных, но и имена функций.
UFO landed and left these words here
1. тогда это уже другой дизайн теста
2. на самом деле и тот и тот подход позволяет использовать признаки пользователей, важно, что бандиты это именно оптимизация, а тестирование — это трата времени, если мы говорим о онлайн тестировании сайта/рекламы/итд
1 — в a/b тестах нет особого смысла делать двухстороннее тестирование, т.к. в прикладном смысле «конверсия новой версии хуже старой» и «конверсия новой версии равна старой» обычно не отличается.
UFO landed and left these words here

Отличная статья! Будет чем на выходных заняться для души! :)

Прекрасно, что стали появляться статьи, требующие «подумать, подумать и попробовать». Уже долгое время большая часть статей по DS и ML по сути своей новичковые и написаны новичками, что особенно плохо, ибо уже изложение будет упрощено и содержать ошибки.
Это нужные статьи. Благодарю.
еще один вопрос к автору… вызывает вопросы фраза
«Для этого идеально подходит бета распределение по трем причинам:»
разве если мы предпологаем что мы случайная величина имеет распределение бернулли… то при проведении эксперементов.и попытках установить параметр данного распределения у нас есть другие варианты кроме того как считать что сам параметр имеетраспределение Бета?? это же автоматически вытекает… мы ничего выбирать нем ожем… или я не прав… Спасибо большое…
я что то не вопрос не понял, вы спрашиваете о том, что можно использовать вместо бета распределения?
да вообще можно то какое угодно распределение туда вставить, хоть нейронную сеть, другое дело что не будет аналитически выводимого апостериорного распределения; у нас в блоге скоро будет пост как раз про такие случаи, где используется вариационный вывод и библиотека pymc3
У вас еще кстати каждый раз в коде с бандитами… выводиться что Winner is 4… это наверное опечатка… там в коде надо наверное исправить и написать:

print 'Winner is %i' % estimated_winner
хехе точно, спс, хорошо, что не в title картинок, а то нужно было бы перегенерировать все -)
еще один вопрос… надеюсь последний…
вот поведение меняется каждые 2000 итераций… в коде параметры постоянно апдейтятся и вседствие чего поведение на каждом следующем промежутке смазывается, но тем не менее удается определить каждый раз удачную руку… поэтому и графики разные… иначе если бы параметры затирались каждый новый этап… то графики были бы одинаковыми…
Вопрос… существуют ли механизмы… диагностики… может меры какой-то… что-то по типу тригера… который бы говорил что судя всего поведение меняется и удавалось старую историю каким-то образом отбрасывать из статистики… и апдетить не все результаты а только последние…
Вопрос… существуют ли механизмы… диагностики… может меры какой-то… что-то по типу тригера… который бы говорил что судя всего поведение меняется и удавалось старую историю каким-то образом отбрасывать из статистики… и апдетить не все результаты а только последние…

у вас на руках есть распределение, а именно бета распределение для каждой ручки, а значит вы можете в принципе посчитать все что угодно; например мы можете решить, что выкидываете из теста все ручки у которых CTR ниже какого то маленького числа, и используя то, что у вас есть распределение, подсчитать вероятность того, что среднее значение ниже порога с какой то долей вероятности (прямо как в обычном тестировании); ну или проще, просто выкидывать все ручки на которые за последний месяц было послано менее процента трафика; ну и так далее, когда на руках есть функция плотности, то можно вообще что уродно делать -)
А какие подходы применяются на основании «многоруких бандитов» для дальнейшего улучшения моделей?
Мы хотим получить(дообучить) идеальную модель, которая объединяет плюсы всех 4-х моделей из эксперимента?
не знаю есть ли какие либо стандартные подходы, ну что бы прямо рецепт

можно попробовать понять по логам и профилям чем отличаются пользователи и как то улучшить модель, но это конечно так себе рецепт -)

но есть имхо два дальнейших пути, после того как исследование логов не особо помогло
1 — ансамблирование, ну грубо говоря сделать третью модель которая будет решать кому что показать
2 — контекстуальные бандиты — это тоже самое что и обычные, только используют признаки пользователя (и остального окружения) для того что бы решить, что показать и кому

Кстати power.prop.test из R для одностороннего теста почему то стабильно предлагает в 2 раза большее количество экспериментов на группу чем метод, описанный здесь. Например, для примера из статьи:


power.prop.test(
    p1 = 0.001,
    p2 = 0.0011,
    sig.level = 0.01,
    power = 0.99,
    alternative = "one.sided")

     Two-sample comparison of proportions power calculation 

              n = 4541213
             p1 = 0.001
             p2 = 0.0011
      sig.level = 0.01
          power = 0.99
    alternative = one.sided

NOTE: n is number in *each* group
А я верно понял, что метод «одноруких бандитов» ставит перед собой цель не выявить лучшую вариацию для последующей раскатки, а максимизировать прибыль именно в период теста? Этот метод применяется в ситуации когда время работы тестируемой системы не ограничено? Те, скажем, не рекламная кампания на неделю, а лэндинг страница, которая используется на протяжении нескольких лет. Есть ли какой-то формальный критерий, согласно которому одна из вариаций выкидывается из теста?
Only those users with full accounts are able to leave comments. Log in, please.