ZASQL_PYTHON Telegram 195
🆎 MDE и Uplift в A/B тестах

MDE - минимальный детектируемый эффект в A/B тестах. Тот эффект, который мы планируем задетектировать при заданном уровне мощности и ошибке первого рода.

Например, мы рассчитали критическое значение из нулевого распределения статистики (верной H0). Придумали критерий и зафиксировали alpha на уровне 0.05.

1️⃣ Что в данном случае ошибка первого рода?
Это вероятность того, что мы примем альтернативную гипотезу при условии, что нулевая верна. Поэтому заранее всегда и определяют ошибку первого рода.

2️⃣ Что такое ошибка второго рода?
Теперь представьте, что у нас есть альтернативное распределение статистики (H1). Мощность - это вероятность того, что мы отклонили нулевую гипотезу, при условии, что альтернатива верны (TP).

😙 Так вот, MDE говорит следующее. При заданном уровне мощности и ошибки первого рода найди мне МИНИМАЛЬНЫЙ ЭФФЕКТ.

Напоминаю, что формула MDE выглядит так, в предыдущем посте есть:

import numpy as np
from scipy.stats import norm

alpha = 0.05
power = 0.8
std = 20
sample_size = 10000

(norm.ppf(1 - alpha) + norm.ppf(power)) * std / np.sqrt(sample_size)


🐍 Самостоятельно можно запрогать и посмотреть следующим образом:

from scipy.stats import norm

mu_h0 = 100
std = 20
alpha = 0.05
power = 0.8

crit_value = norm(mu_h0, std).ppf(1 - alpha)
diff = np.linspace(0, 100, 10000)
powers = 1 - norm(mu_h0 + diff, std).cdf(crit_value)
mu_h1 = mu_h0 + diff
mu_actual_power = mu_h1[powers >= power].min()

print(mu_actual_power)

print(mu_h0 + (norm.ppf(1 - alpha) + norm.ppf(power)) * std)


Как мы видим: минимальное значение статистики при условии, что мощность = 0.8.

😱 А когда мы сравниваем наблюдаемый аплифт с MDE, подставляя фактические значения после теста, мы можем получить, например, мощность, которая оказалась меньше, чем при дизайне

✝️ Означает ли это то, что критерий плох?
Нет, потому что в ситуации получения статзначимых результатов нас волнует только значение p-value при верной H0 (при односторонней гипотезе).

🥂 Дополнительные материалы, которые советую почитать по этой теме:
1. Статья на Хабр. Как же мощно я провел A/B-тест, или почему не стоит сравнивать наблюдаемый аплифт с MDE.
2. Статья на Medium. Когда останавливать A/B-тест? Часть 1: MDE
3. Статья на X engineering. Power, minimal detectable effect, and bucket size estimation in A/B tests
4. Хабр. Шесть причин, почему ваши A/B-тесты не работают

Ставьте 🕺, если пост был интересным, делитесь с друзьями, пишите комментарии

🍔 Если захотите какие-то кастомные реакции, оформление текстов, велком (буст).
Поддержать канал
Please open Telegram to view this post
VIEW IN TELEGRAM
255🔥3🤔1🕊1🐳1🌭1🤪1👾1



tgoop.com/zasql_python/195
Create:
Last Update:

🆎 MDE и Uplift в A/B тестах

MDE - минимальный детектируемый эффект в A/B тестах. Тот эффект, который мы планируем задетектировать при заданном уровне мощности и ошибке первого рода.

Например, мы рассчитали критическое значение из нулевого распределения статистики (верной H0). Придумали критерий и зафиксировали alpha на уровне 0.05.

1️⃣ Что в данном случае ошибка первого рода?
Это вероятность того, что мы примем альтернативную гипотезу при условии, что нулевая верна. Поэтому заранее всегда и определяют ошибку первого рода.

2️⃣ Что такое ошибка второго рода?
Теперь представьте, что у нас есть альтернативное распределение статистики (H1). Мощность - это вероятность того, что мы отклонили нулевую гипотезу, при условии, что альтернатива верны (TP).

😙 Так вот, MDE говорит следующее. При заданном уровне мощности и ошибки первого рода найди мне МИНИМАЛЬНЫЙ ЭФФЕКТ.

Напоминаю, что формула MDE выглядит так, в предыдущем посте есть:

import numpy as np
from scipy.stats import norm

alpha = 0.05
power = 0.8
std = 20
sample_size = 10000

(norm.ppf(1 - alpha) + norm.ppf(power)) * std / np.sqrt(sample_size)


🐍 Самостоятельно можно запрогать и посмотреть следующим образом:

from scipy.stats import norm

mu_h0 = 100
std = 20
alpha = 0.05
power = 0.8

crit_value = norm(mu_h0, std).ppf(1 - alpha)
diff = np.linspace(0, 100, 10000)
powers = 1 - norm(mu_h0 + diff, std).cdf(crit_value)
mu_h1 = mu_h0 + diff
mu_actual_power = mu_h1[powers >= power].min()

print(mu_actual_power)

print(mu_h0 + (norm.ppf(1 - alpha) + norm.ppf(power)) * std)


Как мы видим: минимальное значение статистики при условии, что мощность = 0.8.

😱 А когда мы сравниваем наблюдаемый аплифт с MDE, подставляя фактические значения после теста, мы можем получить, например, мощность, которая оказалась меньше, чем при дизайне

✝️ Означает ли это то, что критерий плох?
Нет, потому что в ситуации получения статзначимых результатов нас волнует только значение p-value при верной H0 (при односторонней гипотезе).

🥂 Дополнительные материалы, которые советую почитать по этой теме:
1. Статья на Хабр. Как же мощно я провел A/B-тест, или почему не стоит сравнивать наблюдаемый аплифт с MDE.
2. Статья на Medium. Когда останавливать A/B-тест? Часть 1: MDE
3. Статья на X engineering. Power, minimal detectable effect, and bucket size estimation in A/B tests
4. Хабр. Шесть причин, почему ваши A/B-тесты не работают

Ставьте 🕺, если пост был интересным, делитесь с друзьями, пишите комментарии

🍔 Если захотите какие-то кастомные реакции, оформление текстов, велком (буст).
Поддержать канал

BY Заскуль питона (Data Science)


Share with your friend now:
tgoop.com/zasql_python/195

View MORE
Open in Telegram


Telegram News

Date: |

To upload a logo, click the Menu icon and select “Manage Channel.” In a new window, hit the Camera icon. 1What is Telegram Channels? The imprisonment came as Telegram said it was "surprised" by claims that privacy commissioner Ada Chung Lai-ling is seeking to block the messaging app due to doxxing content targeting police and politicians. How to create a business channel on Telegram? (Tutorial) Your posting frequency depends on the topic of your channel. If you have a news channel, it’s OK to publish new content every day (or even every hour). For other industries, stick with 2-3 large posts a week.
from us


Telegram Заскуль питона (Data Science)
FROM American