Привет, меня зовут Настя, я продуктовый аналитик в Dodo. Недавно мы провели A/B-тест по запросу геолокации у пользователей. Когда я приступила к анализу, то с ужасом обнаружила, что данных — кот наплакал, а бизнес уже очень ждёт результатов. Тогда мне пришлось пустить в ход свои «секретные техники» A/B-тестирования.

В этой статье расскажу, как мне удалось увеличить выборку без загадочного бутстрапа, причём тут раскатка и почему отсутствие результата — тоже результат. Статья может быть интересна как аналитикам и продакт оунерам, так и всем неравнодушным, интересующимся A/B-тестированием.

Немного о самом тесте

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

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

Тест раскатился на всех неавторизованных пользователей в России и состоял из трёх групп:

  • контрольная группа с системным всплывающим окном на этапе карты (Группа 0);

  • группа с системным всплывающим окном с просьбой предоставить геолокацию на этапе саджестов (Группа 1);

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

Группа 0, Группа 1, Группа 2.
Группа 0, Группа 1, Группа 2.

Но есть (не)один нюанс. Сложности при анализе результатов

Первый нюанс — это то, что раскатка версии приложения с тестом может повлиять на качество данных. Так, мы запустили A/B-тест одновременно с раскаткой, и получили 2-3 недели данных, которые пришлось выкинуть в мусорку.

Иллюстрирую на нашем примере. На графике представлен процент пользователей, давших доступ к геолокации, и число уникальных пользователей в каждый из дней эксперимента. В первые недели A/B-теста мы наблюдали тенденцию роста доли новых пользователей с геолокацией на графике слева, но если взглянём на график справа, то увидим и тенденцию роста общего числа пользователей. При этом мы также видим, что эта тенденция замедляется.

Вывод: раскатка — это загадочное явление, которое лучше не смешивать с A/B-тестом, так как во время раскатки работают свои алгоритмы рандомизации, по которым выбирается, каким пользователям приложение станет доступно уже в первую неделю, а каким —только в самом конце.

Второй, более очевидный нюанс. Стоит ещё при планировании теста задаться вопросом, а можем ли мы уже посчитать целевые метрики теста или нужно завести отдельные события? Хотим ли мы анализировать только метрики или же ещё и взаимодействие с новой функциональностью (клики на баннеры, а не только доли с геолокацией в тестовой и контрольной группах)? В нашем дизайне мы упустили возможность анализа кликов по алертам и довольствовались только целевой метрикой. Не надо так!

Как увеличить выборку

Таким образом, мне пришлось откинуть первые 2 недели эксперимента и на момент анализа я имела всего 10 с небольшим дней. Это было очень мало для теста, и тогда я решила увеличить выборку, уменьшив временные интервалы. «А что если срезать долю пользователей с геолокацией не за день, а за час?» — подумала я. И не прогадала.

Так, например, вместо 10 наблюдений, я разом получила в 24 раза больше: 24*10 = 240 наблюдений. Также я смогла заметить выбросы, различия поведения в утренние и вечерние часы активности и в будни и выходные.

Можно ли было получить ещё больше наблюдений?

В итоге мы смогли увеличить число наблюдений, уменьшив их временной интервал. Вместо анализа подневных долей пользователей с геолокацией проанализировали часовые интервалы. Можно ли было взять ещё меньшую дискретность — хороший и всё ещё открытый вопрос. Если в одно прекрасное утро мы проснёмся и решим использовать минутные интервалы, то, скорее всего, получим зашумленные данные. Сессия пользователя обычно длится от нескольких минут до получаса, и если мы начнём снимать измерения слишком часто, то можем столкнуться с ситуацией, где пользователь ещё не успел даль доступ к геолокации, а мы на него уже наклеили лейбл «без геолокации».

Вот такие милые горбики у меня получились.
Вот такие милые горбики у меня получились.

Также, именно при анализе этих диаграмм, я заметила, что дневное распределение пользователей имеет более одного пика: один утренний, а второй — обеденный. Так и пришла идея сравнивать отдельно группы по времени суток: Night, Morning, Day и Evening и отдельные подгруппы будних дней и выходных.

Стал ли тест мощнее и что это действительно значит?

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

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

Так, например, согласно этому калькулятору, для маленького эффекта и уровня значимости 0.05 мощность теста на моих первоначальных 10 наблюдениях составила 10%, а для 240 - 60%. Это все еще не рекомендуемые 80%, однако это огромное улучшение.

Собственно, перейдём к самим тестам.

z и t тесты: какой выбрать?

Чаще всего для анализа долей (любая конверсия или процент пользователей с геолокацией) используется z-тест. Он ограничен тем, что не учитывает подневную динамику, а рассматривает группы целиком.

Расчёт z-статистики.
Расчёт z-статистики.
Пояснения к формуле z-теста

\hat p_1, \hat p_2— пропорции в группах 1 и 2 (например, процент людей с геолокацией);

n_1n_2— общее число наблюдений в группах 1 и 2;

\hat p— общая пропорция.

Более детально:

\hat p_1 = \frac{x_1}{n_1}\hat p_2 = \frac{x_2}{n_2}\hat p = \frac{x_1 + x_2}{n_1 + n_2}

где x_1, x_2 — число ожидаемых исходов в группе 1 и 2 (например, число людей с геолокацией в обеих группах).

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

Расчёт t-теста для двух выборок с разной дисперсией.
Расчёт t-теста для двух выборок с разной дисперсией.
Пояснения к формуле t-теста

\bar x_1, \bar x_2— средние значения в группах 1 и 2;


S_1^2, S_2^2— несмещённые выборочные дисперсии в группах 1 и 2;

n_1, n_2— число наблюдений в группах 1 и 2.

Я решила проводить оба этих теста на выделенных подгруппах. Для z-теста я использовала метрику «процент пользователей с геолокацией», а для t-теста — «число пользователей с геолокацией». При разбиении по группам я не выявила разницы между буднями и выходными, поэтому сравнивала по группам Night, Morning, Day, Evening.

Также при построении гистограмм было видно, что общее распределение ближе к логнормальному, поэтому если мы хотим проводить проводить t-тест на всю группу, то необходимо нормализовать данные: например, можно логарифмировать значения.

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

Долгожданные результаты

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

После того, как я провела ряд t-тестов и z-тестов, я не смогла установить значимых различий и в этих двух группах.

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

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

Как трактовать такие результаты, или Всё не напрасно

 Так почему же отсутствие результата — тоже результат?

  1. Мы точно уверены, что существующее решение работает, и работает хорошо.

  2. Узнали что-то новое о наших пользователях: они меньше доверяют нам, если спрашивать у них геолокацию без веской причины (группа 1 <= группа 2), но при этом даже с объяснением причины те, кто не готов предоставить доступ, не хотят этого делать (группа 0 <= группа 2).

  3. Мы не спровоцируем непредвиденные побочные эффекты, если оставим все как есть.

  4. Нам удалось улучшить аналитический опыт и накопить больше знаний для последующих тестов и гипотез.

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

Комментарии (7)


  1. zubrbonasus
    20.09.2023 14:36
    +1

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


    1. RKrop
      20.09.2023 14:36
      +1

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


      1. zubrbonasus
        20.09.2023 14:36

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


    1. okolonasty Автор
      20.09.2023 14:36

      Спасибо большое за такой хороший вопрос и интерес к статье! Из моей практики, на принятие того или иного продуктового решения чаще всего влияет целый ряд факторов. К примеру, в данном конкретном кейсе, разработка этого варианта экрана стоила нам относительно дешево: мы уже имели шаблон этой страницы, который слегка перекрасили и изменили смысловое содержание. Цель этого аб-теста была скорее исследовательской и мы искали ответы на вопросы: "каким образом нарастить долю людей с геолокацией". В итоге, увидев неэффективность этого решения, мы пришли к решению не катить этот экран, Также у нас в планх было вынести карту в приложении в самое начало пути юзера, вне зависимости от результатов теста (во время этого теста во всех вариантах первым шел экран саджестов, и лишь после него можно было выйти на карту). Таким образом, после завершения теста, мы решили измерить, не принесет ли вынос карты нам желаемый прирост в доле людей с геолокацией, раз уж мы все равно это выкатываем (в итоге от вынесения карты вперед долю людей с геолокаций действительно выросла).Что касательно затрат на разработку, то  если считать затраты на разработку этого решения, то они оказались даже меньше затрат на работу аналитика на анализ данного аб-теста. Также для выпила старого варианта и поддержку нового было бы все-равно необходимо совершить некие затраты. И так как новый вариант прибыли не приносит, и в этом случае мы как будто бы в убытке. Я как аналитик хочу верить, что стоимость разработки пошла в накопленный аналитический опыт, мы смогли лучше понять наших пользователей, в дальнейшем не проводить подобных исследований, мы получили возможность принимать более выгодные и правильные  решения с бОльшим количеством информации, что в итоге дало нам нарастить конверсию  не в моменте, но в более долгом периоде. Надеюсь, мне удалось ответить на ваш вопрос, но если я что-то упустила, пожалуйста пишите!


  1. uuger
    20.09.2023 14:36
    +1

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


    1. okolonasty Автор
      20.09.2023 14:36
      +1

      Спасибо большое за методологический вопрос и интерес к статье! Если под "тем же самым результатом" имеется в виду то, что тест не отловит значимых отличий, если мы его дольше подержим, то данный вопрос будет достаточно накладно проверить в жизни. Чтобы догнать по количеству наблюдений тест с исходными интервалами, нам понадобится минимум 230 дней (10 у нас было, а еще 230 для того чтобы получить 240 наблюдений в сумме). Это получается, что нам бы пришлось держать тест  больше полугода. В комментарии ранее я рассказывала, что сейчас целевое решение вообще видоизменилось: карта вышла вперед, то есть мы физически не может продолжать этот эксперимент столь долго, да и боюсь к тому времени актуальность этого теста явно упала бы. К слову сказать, мы действительно подержали тест еще немного, и выводы остались все теми же. Про качественные методы, подскажите пожалуйста, какие на ваш взгляд методы могли бы это быть? Надеюсь, мне удалось ответить на ваш вопрос!


      1. uuger
        20.09.2023 14:36

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

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