Часть 1 нашей серии A / B-тестирования

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

Из этих четырех мы, вероятно, тратим больше всего времени на анализ продукта, поэтому стандартизация нашего подхода к экспериментам была обязательной, чтобы Patreon мог быстрее принимать лучшие решения о продукте.

В этом посте будет представлен обзор основных концепций, составляющих нашу структуру (в основном это адаптация концепции Потенциальные результаты, которую я изучил во время моей аспирантской программы по статистике), и будет наиболее полезен для аналитиков данных или специалистов по данным, которым нужен более четкое представление о том, что такое рандомизированные эксперименты (также известные как a / b-тесты), и кто был бы признателен за многоразовую теоретическую основу для разработки, реализации и анализа эксперименты в контексте программного обеспечения / веб-сайта.

1. Что такое причинный вывод и план эксперимента?

1.1 Что такое причинный вывод?

Представьте, что вы просыпаетесь сегодня с головной болью, принимаете лекарство, и в течение часа головная боль проходит. Вызвало ли лекарство ваше самочувствие? Ответ не очевиден, потому что вы не знаете, что бы произошло, если бы вы не приняли лекарство.

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

1.2 Почему рандомизированные эксперименты помогают определить причинно-следственную связь?

Продолжая предыдущий пример, представьте, что каждый раз, когда у вас болела голова за последние 5 лет, перед приемом лекарства вы также спали на 15 минут дольше, чем обычно, выпили немного дополнительного кофе и не получили Звонок от Бетси: эта надоедливая подруга, которая звонит тебе каждый день и просто болтает и болтает. Как узнать, что облегчило вашу головную боль - лекарство, сон, кофе или отсутствие Бетси? Ответ: вы не можете.

Как насчет того, чтобы сделать следующее: каждый раз, когда у вас болит голова, бросайте монетку, чтобы решить, принимать ли лекарство или нет. Обратите внимание, что вы не должны принимать никаких других решений, основываясь на результате подбрасывания монеты. Вот здесь и проявляется магия случайности: если вы всегда бросаете монетку, прежде чем принять решение о приеме лекарства, и не принимаете никакого другого решения на основе результата, то, в конечном итоге, группа случаев, когда вы принимали лекарство и группа случаев, когда вы этого не сделали, будет похожа во всех аспектах, за исключением наличия или отсутствия лекарств! Следовательно, «разумно» предположить, что любое различие между группами является результатом действия лекарства.

2. Структура: концепции и определения

Фреймворк, который мы используем в Patreon для размышлений о рандомизированных экспериментах, на удивление прост.

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

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

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

Подводя итог, можно выделить три основных понятия, о которых мы говорили:

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

Вот диаграмма, которая может помочь визуализировать концепции.

Главное помнить, что для каждой единицы наблюдения существуют разные потенциальные состояния, в которых они могут оказаться после приема каждого лечения, но мы просто сможем когда-либо увидеть одно из потенциальных состояний, представленное одним измерением реакции. метрическая.

3. Рандомизированные эксперименты на веб-сайтах.

3.1 Почему компании, занимающиеся разработкой программного обеспечения (и веб-сайтов), прибегают к экспериментам?

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

Итак, почему A / B-тестирование является такой горячей темой в «Силиконовой долине», если несколько отраслей делают это в течение многих лет? Что ж, это может быть связано с тем, что люди из кремниевой долины (такие как я, к сожалению) склонны утверждать, что все, что они делают, является новым и интересным, но более вероятно, потому что разработка экспериментов и сбор данных в компаниях-разработчиках программного обеспечения и, в частности, на веб-сайтах, - это простой и быстрый способ узнать о том, как пользователи взаимодействуют с продуктом, и перебрать функции, чтобы улучшить продукт.

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

3.2 Определение единиц наблюдения

Для определения единицы наблюдения мы используем два понятия: идентифицируемость и правомочность.

3.2.1 Идентифицируемость.

Вам следует начать с поиска способа идентифицировать своих пользователей. Если эксперимент виден только зарегистрированным пользователям, вы, вероятно, сможете идентифицировать своих пользователей с помощью user_id. Однако, если эксперимент также виден для вышедших из системы пользователей, вы, вероятно, захотите сделать это, установив «постоянный» уникальный идентификатор пользователя (uuid) в файлах cookie посетителей. Это позволит вам приблизительно отслеживать поведение конкретного человека при просмотре сайта.

В нашем эксперименте вышедшие из системы пользователи могут видеть любую страницу создателя, поэтому мы использовали uuid, который мы помещаем в файлы cookie браузера всякий раз, когда кто-то взаимодействует с какой-либо частью нашего сайта. Эти uuid не имели отношения 1 к 1 с пользователями, поскольку файлы cookie меняются в зависимости от браузера / устройства, но мы пришли к выводу, что этот идентификатор достаточно хорош.

3.2.2 Право на участие.

Ключевым моментом здесь является четкое определение последнего общего у всех пользователей во всех лечебных группах непосредственно перед тем, как их разветвляют на разные виды опыта (лечения). В Patreon мы обнаружили, что регистрация события для этого «последнего опыта» является хорошей практикой, поскольку позволяет очень четко указать, кто участвует в эксперименте и, следовательно, на кого вы можете экстраполировать свои результаты. Мы называем это мероприятием, подтверждающим право на участие.

В нашем эксперименте событие правомочности получало запрос на загрузку страницы создателя. Таким образом, любой uuid, который запрашивал страницу создателя в течение данной недели, мог быть единицей наблюдения.

Обратите внимание, что событие приемлемости может быть чем-то более сложным, например, проведением 10 секунд на данной странице, получением определенного электронного письма, выполнением определенного запроса и т. Д.

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

Часто есть дополнительные характеристики, которые нужно учесть, чтобы дать пользователю право участвовать в эксперименте. В Patreon мы называем эти дополнительные критерии критериями приемлемости и обычно регистрируем их как свойства события приемлемости.

В нашем эксперименте, например, мы хотели понять поведение людей только в США, поэтому в момент, когда был сделан запрос страницы создателя, мы определили, где находится пользователь, и зарегистрировали свойство местоположения в событии приемлемости.

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

  • Идентифицируемость
  • Право на участие (событие, отвечающее критериям отбора в течение определенного периода времени и критериев отбора)

3.3 Применение лечения

Способ, которым мы назначаем лечение единицам наблюдения в Patreon, заключается в сопоставлении идентификатора со случайным числом от 0 до 1 (для этого вы можете использовать хеш-функцию, чтобы гарантировать, что число является случайным, но всегда одинаковым для данного идентификатора). Затем вы можете просто перенаправить пользователя к другому опыту на основе полученного случайного числа. Здесь важно отметить, что вы всегда должны случайным образом назначать лечение на уровне единицы наблюдения через выбранный вами идентификатор.

Чтобы упростить анализ, мы также регистрируем лечение, которое получает пользователь, как свойство события соответствия критериям.

В нашем примере в тот момент, когда мы получили запрос на загрузку страницы создателя, который был выполнен внутри нас, мы хэшировали uuid, чтобы сопоставить его с числом от 0 до 1, а когда результат был выше 0,5, мы показали новый макет страницу создателя, иначе мы показали старую версию.

Чтобы быть очень конкретным, событие правомочности, которое вы должны регистрировать, должно выглядеть примерно так:

{ 'event': 'request_creator_page',
  'uuid': '0f3e39a8-ff84-11e6-bc64-92361f002671',
  'event_time': '2016-11-07 10:04:03',
  'event_properties': {
      'location': 'US',
      'treatment': 'new_creator_page'
  }
}

3.4 Измерение показателя отклика

Если вы помните, метрика отклика отвечает за представление состояния единицы наблюдения после того, как лечение было применено. Следовательно, вы всегда должны иметь возможность измерить метрику отклика для каждой единицы наблюдения. Если вы не можете измерить его для всех единиц наблюдения, значит, что-то определено неправильно.

В нашем примере мы проверили, было ли у нас событие «Регистрация», связанное с uuid, в течение 1 дня после того, как мы увидели событие загрузки их первой страницы создателя. Если это так, мы присвоили единицу этой единице наблюдения, в противном случае мы присвоили ноль.

3.5 Анализ результатов

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

Чтобы провести сравнение по группам, вы, вероятно, захотите суммировать ответы с помощью некоторой агрегации, например среднего, медианного или максимального. Теоретически от этого можно сойти с ума, но чем безумнее вы сходите с ума, тем сложнее будет правильно проанализировать. Наиболее типичный анализ, который нужно сделать здесь, - это использовать вашу любимую библиотеку (например, pandas или plyr), чтобы вычислить среднее значение и дисперсию метрики ответа для каждой группы лечения, построить доверительные интервалы для каждого среднего и посмотреть, перекрываются ли доверительные интервалы . Или, что еще лучше, вы можете использовать t-критерий Велча, чтобы оценить разницу средних значений между двумя группами.

3.6 Некоторые важные темы, о которых мы не говорили

Мы не говорили об анализе очень формально, мы не говорили об инструментах анализа, которые мы используем, мы не обсуждали технические аспекты того, как мы рандомизируем наших пользователей или как мы регистрируем события, мы не упоминали ничего о Убедившись, что эксперимент проводится правильно (обеспечение качества), мы не говорили о том, как определить размер вашего эксперимента (или определить время выполнения). Мы планируем осветить некоторые из этих тем в других статьях нашего блога из серии A / B-тестирования, так что следите за ними!

4. Завершение

Рандомизированные эксперименты (также известные как A / B-тестирование) - мощный инструмент, который позволяет нам делать выводы о причинно-следственной связи. Технологические компании часто используют их, потому что сбор данных относительно прост и позволяет им объективно узнать, как пользователи используют их продукты, быстро и итеративно на основе того, что они наблюдают. Фреймворк, который мы используем в Patreon, состоит в основном из трех концепций: единицы наблюдения, процедуры и показатели отклика. Мы кратко обсудили, что такое каждый из них, и как их идентифицировать и использовать в контексте эксперимента на веб-сайте. Надеемся, вам понравилось читать этот пост!

Ссылка: Как упоминалось ранее, эта структура основана на схеме потенциальных результатов, также известной как причинно-следственная модель Рубина. Вы можете найти более формальное обсуждение этого в книге Причинный вывод для статистики, социальных и биомедицинских наук: введение (Гвидо Имбенс и Дон Рубин).