Нахождение значения P – объяснение

Вопрос или проблема

def get_pvalue(con_conv, test_conv, con_size, test_size,):  
    lift =  - abs(test_conv - con_conv)
    scale_one = con_conv * (1 - con_conv) * (1 / con_size)
    scale_two = test_conv * (1 - test_conv) * (1 / test_size)
    scale_val = (scale_one + scale_two)**0.5
    p_value = 2 * stats.norm.cdf(lift, loc = 0, scale = scale_val )
    return p_value

У меня есть эта функция, и я хотел бы понять, что она на самом деле делает и как она рассчитывает значение p.

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

con_conv --> Коэффициент конверсии контрольной группы
test_conv --> Коэффициент конверсии тестовой группы
con_size --> Объем выборки контрольной группы
test_size --> Объем выборки тестовой группы

Я понимаю, что scale_one и scale_two рассчитывают дисперсию для каждой группы, но я не понимаю, почему они складываются для расчета стандартного отклонения и почему cdf умножается на 2 для получения p_value.

p_value = 2 * stats.norm.cdf(lift, loc = 0, scale = scale_val )

Это ключ к вашему вопросу: Значение p — это вероятность того, что нулевая гипотеза истинна.

Если нулевая гипотеза истинна: Ваша модель не находит никаких различий между группами.
Если ложна: Ваша модель находит различия между группами.

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

Функция stats.norm.cdf возвращает вероятность того, что “lift близок к нулю”, если lift предполагается “нормальным”. Если lift равен нулю, то между группами нет различий, поэтому значение p <0.01 говорит нам, что вероятность того, что группы равны, почти 0, что означает, что ваши группы разные.

Двойка связана с концепцией “двустороннего распределения”: Разница между группами может быть A больше B или B больше A, поэтому вы измеряете разницу в любом из двух направлений.

Сложение между стандартными отклонениями подчиняется концепции:
$Var(X+Y) = Var(X) + Var(Y)$ если $X$ и $Y$ независимы.

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

Значение p — это вероятность того, что нулевая гипотеза истинна.

Это совершенно неверно. Если бы автор вопроса использовал байесовский подход, такое утверждение могло бы быть сделано, но в частной статистике значение p:

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

$$\mathcal{P}(\mathcal{D} \mid \mathcal{H_0})$$

где $\mathcal{H_0}$ — это нулевая гипотеза, а $\mathcal{D}$ — это статистика теста (рассчитанная на основе данных).

Вероятность, упомянутая в комментарии: “вероятность того, что нулевая гипотеза истинна,” на самом деле это:

$$\mathcal{P}(\mathcal{H_0} \mid \mathcal{D})$$

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

Ответ или решение

Понимание P-значения в A/B тестировании

Когда вы проводите A/B тест на сравнение конверсии между контрольной (con_conv) и тестовой группой (test_conv), вы хотите выяснить, есть ли статистически значимые различия между двумя группами. Для этого используется p-значение. В приведённом ниже коде вычисляется p-значение с использованием нормального распределения:

def get_pvalue(con_conv, test_conv, con_size, test_size):  
    lift = - abs(test_conv - con_conv)
    scale_one = con_conv * (1 - con_conv) * (1 / con_size)
    scale_two = test_conv * (1 - test_conv) * (1 / test_size)
    scale_val = (scale_one + scale_two) ** 0.5
    p_value = 2 * stats.norm.cdf(lift, loc=0, scale=scale_val)
    return p_value

Разбиение на компоненты

  1. Расчёт лифта (lift):

    • lift = - abs(test_conv - con_conv):
      Этот параметр показывает величину различия между конверсиями тестовой и контрольной групп. Отрицательный знак указывает на то, что мы рассчитываем отклонение в одну из сторон.
  2. Расчёт вариации (scale_one и scale_two):

    • scale_one = con_conv * (1 - con_conv) * (1 / con_size):
      • Это оценка дисперсии для контрольной группы на основе её конверсии и размера выборки. Формула p(1-p)/n используется для оценки вероятности в Bernoulli trial.
    • scale_two = test_conv * (1 - test_conv) * (1 / test_size):
      • Аналогично первой, эта формула даёт оценку дисперсии для тестовой группы.
  3. Калькуляция стандартного отклонения:

    • scale_val = (scale_one + scale_two) ** 0.5:
      • Мы суммируем вариации обеих групп, так как они независимы, и из результата извлекаем квадратный корень, чтобы получить общую стандартную ошибку (standard error). Это критически важно: для статистических тестов комбинированная вариация обычно складывается.
  4. Вычисление p-значения:

    • p_value = 2 * stats.norm.cdf(lift, loc=0, scale=scale_val):
      • Здесь мы используем кумулятивную функцию распределения (CDF) нормального распределения для расчёта вероятности того, что бы наблюдаемый лифт был так же мал, если бы гипотеза нулевого различия была истинной. Умножение на 2 необходимо для учёта двустороннего теста: различие может быть как положительным, так и отрицательным.

Статистическая интерпретация

  • Гипотеза:

    • Нулевая гипотеза (H0) предполагает отсутствие различий между группами: con_conv = test_conv.
    • Альтернативная гипотеза (H1) предполагает, что различия существуют: con_conv ≠ test_conv.
  • P-значение:

    • Это уровень значимости, который показывает вероятность того, что наблюдаемый результат мог бы произойти случайно, при условии, что H0 верна.
    • Низкое p-значение (обычно меньше 0.05 или 0.01) указывает на то, что есть достаточные доказательства для отклонения нулевой гипотезы.

Заключение

P-значение — это мощный инструмент для принятия решений на основе данных в A/B тестировании. Оно предоставляет количественную метрику для оценки различий между группами, формируя таким образом основание для последующих маркетинговых или продуктовых стратегий. Убедитесь, что вы правильно интерпретируете результаты, понимая, что p-значение не является вероятностью истинености нулевой гипотезы, а скорее вероятностью получения таких или больших различий, если H0 истинна.

Оцените материал
Добавить комментарий

Капча загружается...