+7 (965) 423-03-68
Отправьте запрос

Статистические алгоритмы, которые обеспечивают работу Экспериментов Google Analytics.

В этой статье описываются статистические алгоритмы, которые обеспечивают работу Экспериментов Google Analytics. Наша система управляет экспериментами, используя подход "многорукого бандита". "Многорукий бандит" – это эксперимент, в рамках которого:

  • ставится цель определить оптимальное или наиболее прибыльное действие;
  • рандомизированное распределение можно изменить в ходе эксперимента.

Название "многорукий бандит" описывает гипотетический эксперимент, в котором вы будете играть одновременно на нескольких игровых автоматах ("одноруких бандитах"), от которых можно получить разный доход. Вы хотите не только найти автомат, который обеспечивает наибольшую выручку, но и увеличить свои доходы в целом. Фундаментальное противоречие заключается в том, что можно использовать только старые рычаги, которые обеспечивают стабильный доход, или опробовать новые, которые могут принести (или не принести) более высокую прибыль. Для решения проблемы "бандита" существуют сложные математические модели, которые мы используем в экспериментах со страницами в Google Analytics.

Мы начнем с общей справочной информации об использовании метода многоруких бандитов в Google Analytics. Затем разберем два примера моделируемых экспериментов, выполняемых с использованием нашего алгоритма многорукого бандита. Наконец, вы сможете изучить ответы на некоторые часто задаваемые вопросы, за которым следует приложение, содержащее технические расчетно-теоретические данные.

Ключевые сведения

Как работают "бандиты"

Мы замеряем результаты вашего эксперимента дважды в день и определяем, какие варианты оказались более эффективными. Затем мы соответствующим образом корректируем долю трафика, которую каждый из вариантов будет получать в дальнейшем. Лучший вариант получает больше трафика, худший – меньше. Мы вносим корректировки на основе статистической формулы, в рамках которой размер выборки и показатели эффективности рассматриваются вместе. Поэтому мы можем быть уверены в том, что наши поправки опираются на реальные различия в эффективности, а не просто на случайность. По ходу эксперимента мы получаем больше информации об относительных преимуществах и выбираем наиболее подходящие варианты.

Преимущества

Эксперименты, основанные на методе многорукого бандита, как правило, гораздо более эффективны, чем классические эксперименты А–Б, в рамках которых выполняется проверка статистических гипотез. С точки зрения статистики они не менее обоснованы, а при определенных условиях позволяют быстрее получить результат. Они дешевле, потому что трафик направляется на более перспективные варианты постепенно. Чтобы получить окончательный ответ, нет необходимости ждать окончания эксперимента. Эти эксперименты проводятся быстрее за счет того, что трафик, который мог бы уйти на менее эффективные варианты, можно передать вариантам потенциально выигрышным. Дополнительно собранные данные по наиболее эффективным вариантам помогают быстрее выделить лучшие варианты из просто хороших.

Бандиты просто удешевили проведение эксперимента, поэтому теперь их можно использовать чаще. Кроме того, на эксперименты можно отводить больше трафика, поскольку для него будут автоматически выбираться более эффективные страницы.

Примеры

Простой тест А/Б

Предположим, коэффициент конверсии вашего сайта составляет 4 %. Вы экспериментируете с новой версией сайта, который привлекает конверсии 5% времени. Разумеется, вы не знаете истинного коэффициента конверсии, именно поэтому вы экспериментируете. Допустим, вы хотите, чтобы ваш эксперимент мог обнаружить пятипроцентный коэффициент конверсии как статистически значимый с вероятностью 95%. Стандартный расчет статистической мощности1 говорит, что вам нужно 22 330 наблюдений (по 11 165 на каждую руку), чтобы обнаружить сдвиг в коэффициентах конверсии с 0,04 до 0,05 с вероятностью 95%. Предположим, что у вас будет для эксперимента 100 посещений в день, поэтому он займет 223 дня. В стандартном эксперименте вы ждете 223 дня, запускаете проверку гипотезы и получаете ответ.

Теперь давайте обработаем 100 посещений каждый день, используя метод многорукого бандита. В первый же день около 50 посещений будут назначены каждой руке, и мы посмотрим на результаты. Мы используем теорему Байеса для вычисления вероятности того, что вариант лучше оригинала2. Единица минус данное число – это вероятность того, что оригинал лучше. Давайте предположим, что оригиналу очень повезло в первый день, и он является лучшим с вероятностью 70%. Затем мы назначаем ему 70% трафика на второй день, и вариант получает 30%. В конце второго дня мы накапливаем весь трафик, наблюдавшийся до сих пор (за оба дня), и пересчитываем вероятность того, что та или иная рука лучше. Это дает нам коэффициенты показов для третьего дня. Мы повторяем этот процесс, пока набор правил остановки не будет нас устраивать (ниже мы подробнее поговорим о правилах остановки).

На рисунке 1 моделируется изменение переменных при указанных вводных данных. Здесь вы можете увидеть коэффициенты показов для оригинала (черная линия) и варианта (красная пунктирная линия). Эти показатели претерпевают существенные изменения, пока вариант не начнет пересекать линию с достоверностью 95%. Два процентных показателя в сумме составляют 100 %, поэтому когда один идет вверх, другой идет вниз. Эксперимент заканчивается через 66 дней, что сэкономит вам 157 дней.

изменение переменных при указанных вводных данных

Рисунок 1. Моделирование вероятностей оптимальных рук для простого эксперимента с двумя руками. Эти коэффициенты обеспечивают долю трафика каждой руке на каждый день.

Конечно, это лишь один пример. Мы запускали моделирование 500 раз, чтобы проверить, эффективно ли этот метод работает с повторной выборкой. Распределение результатов показано на рисунке 2. В среднем испытания заканчивались на 175 дней раньше, чем стандартный тест, основанный на расчете мощности. Средняя экономия составила 97,5 конверсий.

Распределение количества сэкономленного времени и количества сэкономленных конверсий по сравнению со стандартным экспериментом, который основан на расчете мощности

Рисунок 2. Распределение количества сэкономленного времени и количества сэкономленных конверсий по сравнению со стандартным экспериментом, который основан на расчете мощности. Предполагается, что коэффициент конверсии оригинала = 4%, а варианта = 5%.

Но как обстоят дела со статистической достоверностью? Если мы используем меньше данных, не означает ли это, что мы увеличиваем процент ошибок? Это не совсем так. Из 500 экспериментов, показанных выше, бандит нашел правильную руку в 482 из них. Это составляет 96,4%, что примерно равно проценту ошибок в классическом тесте. Было несколько экспериментов, в которых бандиту фактически потребовалось больше времени, чем предполагал анализ мощности, но всего в 1 % случаев (5 из 500).

Мы также провели противоположный эксперимент, где коэффициент успеха оригинала составлял 5%, а варианта – 4%. Результаты получились очень похожими. Бандит опять-таки нашел правильную руку в 482 случаях из 500. Преимущество во времени по сравнению со стандартным экспериментом составило в среднем 171,8 дня, а среднее количество сэкономленных конверсий – 98,7.

Прекращение эксперимента

По умолчанию бандит работает по крайней мере две недели. После этого мы отслеживаем следующие два показателя:

Первый – это вероятность того, что каждый вариант будет лучше оригинала. Если мы на 95% уверены в этом, то Google Analytics констатирует итог. Пользователь может изменить как срок эксперимента, так и уровень этой вероятности в процентах.

Второй отслеживаемый нами показатель – это "потенциальная ценность, оставшаяся в эксперименте". Он полезен при использовании нескольких рук. В ходе эксперимента всегда есть наиболее успешная рука, которая будет выбрана в момент его окончания. Оставшаяся ценность в эксперименте – это сумма возросшего коэффициента конверсии, который вы получили бы, отказавшись от выбранного системой вариант. Задача заключается именно в том, чтобы найти это значение. Если вы на 100 % уверены, что вам удалось найти лучшую руку, то в эксперименте не осталось никакой ценности, и продолжать его не нужно. Но если вы только на 70% уверены в успехе, значит другая рука может оказаться более удачной с вероятностью 30%. И тут мы можем использовать правило Байеса, чтобы изучить распределение того, насколько она лучше. Более подробно вычисления представлены в приложении.

Google Analytics заканчивает эксперимент, когда вероятность того, что оставшаяся ценность составляет менее 1% от коэффициента конверсии выбранной руки, равна 95%. Это улучшение на 1%, а не на один процентный пункт. Поэтому если у лучшей руки коэффициент конверсии 4%, то мы заканчиваем эксперимент при условии, что оставшаяся ценность эксперимента меньше, чем 0,04 процентного пункта коэффициента конверсии.

Лучше всего заканчивать эксперимент, руководствуясь потенциальной оставшейся ценностью, потому что в этом случае более эффективно учитываются связи Например, в эксперименте со многими руками две или несколько из них могут демонстрировать одинаковую эффективность, поэтому выбирать можно любую. Вам нет смысла продолжать эксперимент до тех пор, пока вы не найдете лучшую руку: его можно остановить, когда вы убедитесь в том, что выбор между ними роли не сыграет.

Более сложные эксперименты

Преимущество многорукого бандита по сравнению со стандартной методикой увеличивается по мере роста сложности экспериментов. Скорее всего, при доработке веб-страницы вам захочется создать и испытать несколько вариантов. Предположим, у вас есть 5 улучшенных версий плюс оригинал. Вам нужно сравнить его с вариантом, переработки в котором наиболее существенные, поэтому нам нужно внести некоторые корректировки в аккаунт для множественных сравнений. Поправка Бонферрони является простой (хотя и несколько консервативной) корректировкой, которую можно реализовать путем деления уровня значимости гипотетического теста на количество рук. Таким образом, мы делаем стандартный расчет мощности с уровнем значимости 0,05 / (6 - 1) и обнаруживаем, что нам нужно 15 307 наблюдений на каждую руку эксперимента. С шестью руками это дает в общей сложности 91 842 наблюдения. При ста посещениях в день эксперименту придется работать в течение 919 дней (более двух с половиной лет). В реальной жизни настолько продолжительный эксперимент не имеет смысла, но мы можем использовать его как пример.

Теперь давайте запустим в симуляторе бандита эксперимент с шестью руками. Опять же мы будем считать коэффициент конверсии руки оригинала равным 4%, а оптимальной руки – 5%. Также у нас есть близкая к оптимальной рука, коэффициент конверсии которой равен 4,5%, т. е. больше, чем у оригинала, и три неэффективные руки с коэффициентами 3%, 2% и 3,5%. На рисунке 3 представлено распределение результатов. Средняя продолжительность эксперимента равна 88 дней (против 919 дней для обычной методики), а среднее количество сэкономленных конверсий – 1173. Существует длинный хвост распределения длительностей эксперимента (который не всегда заканчивается быстро), но даже в худших случаях метод бандита позволял сэкономить более 800 конверсий.

Экономия от эксперимента с шестью руками по отношению к скорректированному расчету мощности Бонферрони для стандартного эксперимента

Рисунок 3. Экономия от эксперимента с шестью руками по отношению к скорректированному расчету мощности Бонферрони для стандартного эксперимента. Слева представлено количество дней, необходимых для завершения эксперимента, на вертикальной линии отображается время, необходимое для стандартного расчета мощности, а слева – количество конверсий, сэкономленных благодаря бандиту.

Этот метод экономит расходы благодаря тому, что эксперимент протекает быстрее, а иногда и требует меньших затрат. На рисунке 4 представлена история коэффициентов показа для всех рук в первом из наших 500 запусков моделирования. На начальном этапе у бандита могут быть проблемы с сортировкой рук, однако неэффективные варианты теряют вес очень быстро. В представленном случае исходная рука продемонстрировала высокий результат вначале и продержалась дольше других рук. Но примерно через 50 дней ситуация изменилась и превратилась в дуэль между оригиналом и вариантом, который в итоге одержал победу. Когда неэффективные руки оказались устранены, оригинал и будущий победитель делили по 100 наблюдений в день. Обратите внимание, как эффективно бандит распределяет наблюдения с экономической точки зрения (они выделяются рукам, которые могут получить высокую отдачу), а также со статистической точки зрения, отдавая их рукам, информация по которым наиболее важна.

История коэффициентов показа для одного из экспериментов с шестью руками.

Рисунок 4 История коэффициентов показа для одного из экспериментов с шестью руками.

На рисунке 5 показана ежедневная стоимость запуска многорукого бандита по отношению к стратегии "Оракул", когда во всех случаях играет рука 2, т. е. наиболее эффективная. Предположение не очень чистое, поскольку в реальной жизни оптимальная рука неизвестна, однако оно является показательным. В среднем каждое наблюдение, выделяемое на оригинал, обходится нам в 0,01 конверсии, потому что коэффициент конверсии для оригинала на 0,01 меньше, чем для руки 2. Кроме того, каждое наблюдение, выделяемое, например, на руку 5, обходится нам в 0,03 конверсии, поскольку его коэффициент конверсии на 0,03 меньше, чем у руки 2. Если мы умножим число наблюдений, назначенных каждой руке, на стоимость руки, и затем просуммируем общее значение, то получим стоимость запуска эксперимента в этот день. В стандартном эксперименте каждой руке выделено 100 / 6 посещений в день (это среднее значение, которое зависит от того, как распределены частичные наблюдения). Получается, что классический эксперимент обходится нам в 1,333 конверсии за каждый его день. Красная линия на рисунке 5 показывает стоимость использования метода бандита за каждый день. Эксперимент становится менее затратным с течением времени и по мере того, как неэффективные руки получают меньший коэффициент.

Стоимость эксперимента по методу бандита в день. Постоянный уровень расходов за каждый день использования стандартного эксперимента показан горизонтальной пунктирной линией.

1Все расчеты мощности в этой статье выполнялись с помощью функции power.prop.test языка R.

2Более подробно расчеты представлены в приложении. Вы можете пропустить их, если вам это не интересно.