Проблема подглядывания за результатами теста лично мне хорошо знакома. Она возникает, когда тест не набрал еще необходимых данных, а мы уже пытаемся увидеть его результаты. Статистическая значимость теста – это тоже случайная величина, и она «скачет» в первое время после запуска теста. Так происходит и на симуляциях тестов, и в реальных условиях. Я столкнулся с этим впервые в компании Ostrovok.ru, когда А/Б-тесты были выведены на дашборды офисных мониторов. Мне позвонил CEO с вопросом, почему результаты значимости недавно запущенного теста прыгают туда-сюда. Поэтому если вы примете решение в этот момент, признав тест успешным, то совершите ошибку, так как через некоторое время тест «устаканится» и будет показывать отсутствие статистической значимости. Я считаю, что единственный способ решить проблему подглядывания – определить минимально детектируемую разницу в метриках, которая вас устроит. По ней с помощью калькулятора мощности или симуляций вычисляется нужный объем выборки. И именно после достижения нужного объема данных можно смотреть на результат и принимать решения. Здесь вы столкнетесь с дилеммой – если разница слишком мала, то понадобится очень много данных, что плохо для бизнеса. Потому что чтобы получить много данных, придется долго ждать – тратить время. Рекомендую понять, сколько времени вы готовы ждать, и уже исходя из этого определить минимально детектируемую разницу. Минимальная длительность теста также ограничена бизнес-циклом принятия решений клиентами. Например, если мы знаем, что среднее время принятия решения о покупке составляет три дня, то тест должен идти не меньше двух бизнес-циклов – шесть дней. До этого времени за тестом можно приглядывать, но только с целью обнаружить пропущенные технические ошибки.
Хороший пост-анализ эксперимента гипотезы может помочь понять, что еще можно сделать для улучшения метрики. Как я уже писал, желание обнаружить ошибку, когда тест новой версии продукта провалился, естественно, как и его отсутствие, когда тест выигран. В Retail Rocket мы действительно находили в тестах ошибки не только технического характера, но и идейного. Для этого обычно применяли сводные таблицы и искали проблемы во множестве срезов. Очень приятное чувство, когда находишь ошибку или придумываешь модификацию гипотезы и побеждаешь в следующем тесте. Это можно делать и для положительных тестов, чтобы искать новые идеи по улучшению продукта.
А/А-тесты
Впервые про A/A-тесты я услышал от Ди Джея Патила – до этого я никогда к ним не прибегал. А/А-тест – это проверка последней мили, всего того, что вы сделали для теста: генератора случайных чисел, схемы сбора данных и выбранного статистического критерия для метрики. Сам тест запускается с реальным делением аудитории на две части, но в контрольной и тестовой группах используется одна и та же версия продукта. В финале вы должны получить сходящийся тест без опровержения нулевой гипотезы, так как версия продукта одна и та же.
Первое, что нужно проверить, – насколько хорошо работает генератор случайных чисел, по значениям которого будет происходить разделение на группы в тесте. Само назначение на группы можно делать двумя способами: через назначение случайного числа и через хеширование информации об объекте. Когда пользователь посещает сайт, обычно ему в куки пишут его идентификационный номер. Этот номер используется для того, чтобы узнать пользователя при повторном посещении. Для A/B-тестов этот номер хешируется, то есть его превращают из текста в число, далее берут две или три последние цифры для распределения по группам: 00–49 контрольная группа, 50–99 тестовая. Похожий принцип реализован в нашем проекте Retail Rocket Segmentator [85]. В А/А-тесте вы должны получить то же самое распределение, что и в тесте! Если распределение задано пополам, 50/50, то вы его и должны получить на выходе. Даже небольшие расхождения в 3 % в данных теста могут поставить под угрозу весь тест. Если в тесте есть 100 000 пользователей, вы хотите разделить их пополам, а в итоге получается в одной группе 48 000, а в другой 52 000 – это говорит о проблемах в «случайности» разбиения по группам. Эти распределения можно проверить и на симуляциях, когда вам точно известен алгоритм. Но моя практика показывает, что мелкие нюансы разработки, о которых мы не знаем, могут приводить к «сдвигам» распределений. Поэтому я больше доверяю A/A-тестам.