Skip to content
No description, website, or topics provided.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
README.md
index.html

README.md

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

Для запуска достаточно открыть страницу в браузере локально. Результат покажется спустя какое-то время в консоли браузера.

Конверсия

Допустим у нас есть две посадочные страницы. На эту страницу приходят люди, далеко не все из которых сконвертятся, но одна из страниц повышает этот шанс — то есть у нее выше конверсия.

Конверсия для каждой страницы/гипотезы задается через две переменные:

var control_conversion = [1,5];
var test_conversion = [0.3,4];

Запись конверсии [1,5] означает, что вероятность конверсии для этой страницы для случайного посетителя находится между 1% и 5% и нормально распределена (классический "колокол"). То есть основная масса посетителей будет иметь шанс конверсии в 3%, а например очень малая часть 1% или 5%. Запись [0.3,4] — означает, что шанс конверсии у посетителей между 0.3% и 4% (у основной массы 2.15%)

Симуляция одного эксперимента

В рамках симуляции одного A/B эксперимента мы "посылаем" трафик и случайно выбираем один из двух вариантов.

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

После этого мы еще раз случайным образом проверяем — сконвертился ли этот посетитель или нет (с учетом выбранной конверсии).

Очевидно, что будут ситуации, когда у конкретного посетителя на странице с низкой конвесией [0.3,4] будет выбрана бОльшая конверсия (например 3%) чем для конкретного посетителя с бОльшей общей конверсией [1,5] (например 1.5%). Это так и это часть модели — так оно и бывает. На большом количестве посетителей всё все равно приводится к среднему.

Для каждого теста мы также передаем размер рекомендованной выборки.

Тест завершается, когда:

  • Посетителей стало больше чем размер рекомендованной выборки, то есть мы собрали данные для нее и данные статистически значимы. Послали 1000 посетителей, на 1000-ом данные значимы → завершаемся

или

  • Посетителей стало больше чем размер рекомендованной выборки и мы получили статистически значимые данные раньше чем кончилась выборка или позже. Послали 1000 посетителей, на 400-ом данные значимы, ждем 1000-ого, снимаем данные → завершаемся. Или послали 2500 посетителей, на 1000-ом данные не значимы, тест идет дальше на 2500 получили значимые данные → завершаемся.

или

  • В тесте больше 1,000,000 посетителей (чтобы браузер не подвисал долго в расчетах при очень одинаковых конверсиях двух версий)

P-значение выставлено в 0.05

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

Много симуляций

Прогоняем каждую симуляцию много раз и собираем данные.

  • result_limited_time_notsignificant: количество симуляций в которых после рекомендованного сегмента результат не статистическо значимый

  • result_limited_time_significant_noerror: количество симуляций в которых после рекомендованного сегмента результат был значимый и тест правильно показал отличие версий

  • result_limited_time_significant_error: количество симуляций в которых после рекомендованного сегмента результат был значимый и тест неправильно показал отличие версий (ошибся)

  • result_unlimited_time_significant_error: количество симуляций в которых тест завершился рано или поздно рекомендованного сегмента и ошибся

  • result_unlimited_time_significant_error_is_early: количество симуляций в которых наступил момент, что результат статистически значим, это случилось ДО рекомендованного сегменат и тест ошибся

  • result_unlimited_time_significant_error_is_late: количество симуляций в которых наступил момент, что результат статистически значим, это случилось ПОСЛЕ рекомендованного сегменат и тест ошибся

  • result_unlimited_time_significant_noerror: количество симуляций в которых тест завершился рано или поздно рекомендованного сегмента и показал правильный результат

  • result_unlimited_time_significant_noerror_is_early: количество симуляций в которых наступил момент, что результат статистически значим, это случилось ДО рекомендованного сегменат и тест не ошибся (мы получили правильные данные раньше)

  • result_unlimited_time_significant_noerror_is_late: количество симуляций в которых наступил момент, что результат статистически значим, это случилось ПОСЛЕ рекомендованного сегменат и тест не ошибся (мы получили правильные данные, но позже)

Попробовать самому

Вот тут менять конверсии:

var control_conversion = [1,5];	
var test_conversion = [0.3,4];	

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

Тут меняем количество симуляций (10000) и размер рекомендованного сегмента (26000).

console.log(run_many_simulations(10000,26000));

Посчитать его можно тут: https://www.optimizely.com/sample-size-calculator/?conversion=3&effect=20&significance=95 Важно: размер рекомендованного сегмента должен быть СУММОЙ тестового и контрольного сегментов

You can’t perform that action at this time.