{"id":14275,"url":"\/distributions\/14275\/click?bit=1&hash=bccbaeb320d3784aa2d1badbee38ca8d11406e8938daaca7e74be177682eb28b","title":"\u041d\u0430 \u0447\u0451\u043c \u0437\u0430\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0434\u0430\u0432\u0446\u044b \u0430\u0432\u0442\u043e?","buttonText":"\u0423\u0437\u043d\u0430\u0442\u044c","imageUuid":"f72066c6-8459-501b-aea6-770cd3ac60a6"}

Основы науки о данных — A/B тестирование

Сегодня новая статья в рубрике #чтопочитать , где поговорим о статистике, науке о данных и на простом примере разберем A/B тестирование (проверку статистических гипотез).

Замаскированная проверка гипотез

Фото пользователя it’s me neosiam с сайта Pexels

Если вы уже имели дело со статистикой, вы возможно задавались вопросом: "Разве A/B тестирование не тоже самое, что проверка статистических гипотез?". Так и есть! Поэтому давайте узнаем побольше об A/B тестировании, разобрав на простом примере принцип работы проверки статистических гипотез.

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

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

Наша цель — определить, экономят ли пользователи лучше благодаря новому дизайну приложения. Для начала, нам надо узнать, имеем ли мы необходимое нам количество данных, поэтому мы задаем вопрос: "Какие потенциально полезные данные вы уже собрали?"

Оказывается, наш клиент уже провел эксперимент и собрал некоторые данные:

  • Шесть месяцев назад, наш клиент выбрал 1000 новых пользователей и разделил их на две группы: 500 в контрольной группе и 500 в экспериментальной группе.

  • Контрольной группе был предоставлен текущий дизайн приложения.
  • В то же время, экспериментальной группе был предоставлен новый дизайн.
  • Все пользователи начали с 0% экономии.
  • 1000 пользователей составляют лишь маленькую часть всего количества пользователей данного приложения.

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

  • В контрольной группе среднее значение процента экономии составило 12% со стандартным (среднеквадратическим) отклонением в 5%.
  • В экспериментальной группе среднее значение процента экономии составило 13% со стандартным (среднеквадратическим) отклонением в 5%.

Результаты нашего эксперимента на гистограмме выглядят следующим образом:

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

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

Для решения этой проблемы нам необходимо задать следующий вопрос:

Какова вероятность того, что данный результат мы получили только из-за случайного стечения обстоятельств?

Суть проверки статистических гипотез (и А/В тестирования) как раз и заключается в ответе на данный вопрос.

Нулевая гипотеза

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

Как такое могло произойти? Это может произойти из-за того, что мы используем выборку. Приведу пример: если я случайном образом выберу 100 людей из десяти тысячной толпы и вычислю их средний рост, результат составит, например, 170 см. Но проведя данный эксперимент еще несколько раз, результат будет 177 см, 168 см и так далее.

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

Зная, что использование выборок приводит к вариациям, мы можем переформулировать предыдущий вопрос:

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

Формально говоря, мы формулируем нулевую гипотезу следующим образом: рост процента экономии контрольной группы равен росту процента экономии экспериментальной группы.

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

Многочисленное проведение эксперимента

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

Для тех, кому интересно, вот как мы это представляем:

  • Для каждой группы генерируем 500 нормально распределенных случайных величин с такими же статистическими характеристиками, как и у контрольной группы (среднее значение = 12%, среднеквадратическое отклонение = 5%). Теперь у нас есть контрольная группа и экспериментальная группа (средние значения одинаковы, так как мы рассматриваем ситуацию, в которой новый дизайн не имеет никакого эффекта). Технически, правильнее было бы использовать распределение Пуассона, но мы используем нормальное распределение для простоты примера.

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

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

Красная вертикальная линия показывает тот результат, который получил наш клиент при проведении эксперимента (1%). Для нас важен процент количества значений справа от красной линии — он показывает вероятность того, что при проведении эксперимента мы получим разность, равную 1% или выше (мы используем односторонний критерий, потому что он легче для понимания).

В данном случае это значение очень маленькое — из 10 000 экспериментов только в 9 мы получили разность процентов экономии групп, равную 1% или выше.

Это означает, что результат, который наш клиент получил при проведении эксперимента, по случайному стечению обстоятельств может быть получен с вероятностью лишь 0.09%!

Данная вероятность, 0.09%, является нашим p-значением. "Каким значением? Хватит забрасывать меня какими-то случайными терминами!" — вы можете подумать. И правда, когда дело доходит до проверки статистических гипотез, приходится использовать много различных терминов, и, мы, пожалуй, оставим их разъяснение Википедии.

Наша задача, как и всегда, состоит в построении интуитивного понимания того, как работают эти инструменты статистики и для чего они пользуются, поэтому по возможности мы постараемся избегать использования терминологии в пользу простоты объяснении. Однако, p-значение является крайне необходимым термином, с которым вы еще не раз встретитесь в мире науки о данных, поэтому его мы должны обсудить. P-значение (в нашем случае 0.09%) представляет собой:

Вероятность получения, наблюдаемого нами результата, в случае если нулевая гипотеза правильна.

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

Теперь давайте рассмотрим способ быстрого вычисления p-значения.

Центральная предельная теорема

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

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

Взгляните на гистограмму, которую мы построили ранее. Выглядит как нормальное распределение, не так ли? Мы можем проверить нормальность с помощью КК (квантиль-квантиль) графика, который сравнивает квантиль нашего распределения с другим квантилем (в нашем случае, с нормальным распределением). Если наше распределение нормальное, то КК график будет близок к красной линии, находящейся под углом в 45°. И именно так и получается, здорово!

Значит, когда мы проводили наш эксперимент снова и снова, это был пример работы центральной предельной теоремы!

Так почему же это так важно?

Помните, как мы проверяли нашу нулевую гипотезу, проводя 10 000 экспериментов? Звучит очень утомительно, не так ли? На практике, это и утомительно, и дорого. Но благодаря центральной предельной теореме мы можем это избежать!

Теперь мы знаем, что распределение наших повторяющихся экспериментов будет нормальным, и мы можем использовать это знание для определения того, как распределяться наши 10 000 экспериментов без их проведения!

Давайте обобщим пройденное:

  • Мы знаем, что разность средних значений процента экономий экспериментальной группы и контрольной группы составляет 1%, и мы хотим узнать, является ли эта разность оправданной.
  • Важно помнить, что мы провели эксперимент лишь на маленькой части от всего количества пользователей приложения. Если мы проведем эксперимент заново, результат немного изменится.
  • Так как нас волнует возможность того, что новый дизайн не имеет никакого эффекта на экономию, мы формулируем нулевую гипотезу: разность средних значений экономии двух групп — 0%.
  • Согласно центральной предельной теореме, при повторном проведении данного эксперимента, его результаты будут нормально распределены.
  • Из основных формул статистики, мы также знаем, что дисперсия разности двух независимых случайных величин равна сумме дисперсий данных величин:

Завершающие шаги

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

  • Перед тем как взглянуть на имеющиеся данные, нам надо выбрать уровень значимости, называемый альфа (если полученное p-значение меньше альфа, мы отвергаем нулевую гипотезу и делаем вывод, что новый дизайн привел к росту экономии). Значение альфа соответствует вероятности допущения ошибки первого рода — отвержения правильной нулевой гипотезы. Обычно специалисты используют значение 0.05, поэтому его мы и используем.
  • Далее нам надо вычислить тестовую статистику. Тестовая статистика является числовым эквивалентом вышеприведенной гистограммы и обозначает среднеквадратическое отклонение нашего наблюдаемого значения (1%) от значения нулевой гипотезы (в нашем случае 0%). Вычислить мы её можем по формуле:
  • Стандартная ошибка — это среднеквадратическое отклонение разности средне арифметических значений экономии экспериментальной группы и экономии контрольной группы. На графике выше, стандартная ошибка обозначена шириной синей гистограммы. Помните, что дисперсия разности двух случайных величин равна сумме дисперсий данных величин (а среднеквадратическое отклонение — это квадратный корень дисперсии). Зная это, мы с легкостью можем вычислить стандартную ошибку:
  • Среднеквадратическое отклонение равно 5% как для контрольной группы, так и для экспериментальной группы, поэтому наша выборочная дисперсия равна 0.0025. N — это количество наблюдений в каждой группе, поэтому N равно 500. Подставляем числа в формулу и получаем стандартную ошибку, равную 0.316%.

  • В формуле тестовой статистики наблюдаемое значение — 1%, а значение гипотезы — 0% (так как наша нулевая гипотеза, предполагает, что эффекта нет). Подставляя данные значения вместе со значением стандартной ошибки в формулу тестовой статистики, мы получаем результат 3,16.
  • Это значение довольно велико. Мы можем использовать приведенный ниже Python код для вычисления p-значения (для двустороннего критерия). Получится p-значение, равное 0.0016. Важно понимать, что мы используем двусторонний критерий, потому что мы не можем заранее быть уверенными в том, что новый дизайн или лучше текущего, или не имеет эффекта — новый дизайн может также иметь негативное влияние, и двусторонний критерий учитывает такую возможность.

from scipy.stats import norm

#Двусторонний критерий

print('The p-value is: ' + str(round((1 - norm.cdf(3.16))*2,4)))

  • P-значение (0.0016) меньше альфа (0.05), поэтому мы отвергаем нулевую гипотезу и говорим клиенту, что новый дизайн на самом деле помогает пользователям лучше экономить. Ура, победа!

Но обратите еще внимание на то, что p-значение, которое мы вычислили аналитически (0.0016), отличается от значения 0.0009, которое мы получили ранее. Связано это с тем, что наша симуляция была односторонней (односторонний тест более легок для понимания и визуализации). Мы можем удвоить данное значение для получения 0.0018, примерно равного настоящему 0.0016.

Подведем итоги

В реальной жизни A/B тестирование не настолько легко как в нашем выдуманном примере. Скорее всего, наш клиент не будет обладать готовыми данными, и нам придется самим искать нужные данные. Приведу несколько трудных моментов, с которыми вы можете встретиться при A/B тестировании:

  • Сколько данных вам нужно? Сбор данных требует много времени и денег. Плохо проведенный эксперимент может даже негативно повлиять на пользовательский опыт. Но недостаточное количество информации приведет к тому, что результаты вашей работы будут не очень надежными. Поэтому вам придется соблюдать баланс между преимуществами большего количества данных и возрастающими затратами на их сбор.
  • Что хуже — отвержение правильной нулевой гипотезы (ошибка первого рода) или принятие неправильной нулевой гипотезы (ошибка второго рода)? В нашем примере ошибка первого рода означала принятие нового дизайна, в то время как он не имеет никакого эффекта. Ошибка второго рода означала отказ от нового дизайна, хотя он помог бы людям экономить лучше. Мы находим подходящий баланс между вероятностями ошибки первого рода и ошибки второго рода выбирая уровень значимости (альфа). Более высокое значение альфа увеличит риск ошибки первого рода, меньшее значение увеличит риск ошибки второго рода.

Надеюсь, данная статья была для вас полезна!

0
2 комментария
Al Pr

*проностальгировал, взрыднул, подписался, перечитал заново*😢 
" джуном возьмете?" я даже R изучу завтра.
😀

Ответить
Развернуть ветку
Sociaro
Автор

hello@@sociaro.com пишите, обсудим!

Ответить
Развернуть ветку
-1 комментариев
Раскрывать всегда