Как доверительные интервалы помогают решать задачи бизнеса?😏 Всем привет! В этом посте вообще опишу то, с какой ситуацией можно столкнуться, анализируя эксперименты. Представим, что мы задизайнили эксперимент, определили слои, запустили эксперимент, собрали все требования, ожидания, выбрали целевые метрики и вот мы уже подводи итоги эксперимента. Бизнесу важны по большей части деньги и пользовательский опыт. Так вот, смотрим на метрики, видим, что
p-value > alpha - уровня значимости, который определили заранее (возможно даже с какими-то поправками), сразу опускаем руки, ведь эффекта не нашли (нет). Как нам ответить на вопрос бизнесу, а что дальше делать с этой информацией?
😎 В дело вступают
доверительные интервалы. Вкратце, мы можем понять в каких заданных границах находится истинное среднее (в бизнесе мы всегда работаем с выборочными величинами, а истинное значение мы можем задать через выборочное среднее, z-значение, стандартное отклонение и размер выборки. Если доверительный интервал разницы средних включает 0, то значит, что эффект незначимый, но давайте рассмотрим конкретный пример.
Мы раскатили на любой из поверхностей фичу, ожидали получить рост конверсии в оплату.
import scipy.stats as stats
import numpy as np
control_conversions = 500
control_total = 10000
test_conversions = 555
test_total = 10000
control_rate = control_conversions / control_total
test_rate = test_conversions / test_total
effect = test_rate - control_rate
se = np.sqrt((control_rate * (1 - control_rate)) / control_total +
(test_rate * (1 - test_rate)) / test_total)
z_score = effect / se
p_value = 2 * (1 - stats.norm.cdf(abs(z_score)))
ci_low, ci_high = effect - 1.96 * se, effect + 1.96 * se
print('Разница средних, %')
print(np.round(effect, 3) * 100)
print('Доверительный интервал, %')
print([np.round(ci_low, 3) * 100, np.round(ci_high, 3) * 100])
print('p-value')
print(np.round(p_value, 2))
# Разница средних, %
# 0.5
# Доверительный интервал, %
# [-0.1, 1.2]
# p-value
# 0.08
😭 Видим, что p-value низкий, можно даже прокрасить CUPED, стратификацией, но давайте посмотрим более детально. Истинное значение конверсии лежит в промежутке от
-0.1% до 1.2%, но что значит для бизнеса?
Предположим, что мы сервис доставки продуктов. ARPPU составляет 1000 рублей => мы можем рассчитать эффект в деньгах, возьмем крайние границы доверительного интервала:
arppu = 1000
low_effect_arppu = ci_low * control_total * arppu
high_effect_arppu = ci_high * control_total * arppu
print([low_effect_arppu, high_effect_arppu])
# [-6955.767415148702, 116955.76741514866]
😮 Истинное значение эффекта конверсии лежит в диапазоне от -0.1% до 1.2%. Небольшое ухудшение или хорошее улучшение. Это значит, что при текущем дизайне эксперимента мы не можем с уверенностью сказать, что новая фича улучшает метрику. Однако, если перейти на бизнес-язык, мы видим следующий эффект в деньгах.
➖ Потенциальный минус: -7 000 рублей
➕ Потенциальный плюс: +116 955 рублейКажется, что если бизнес может рискнуть, стоит попробовать раскатить конфигурацию с тестовой группой на всех. В дальнейшем можно замерить долгосрочный эффект и посмотреть сколько мы инкрементально получаем денег при раскатке этой фичи с помощью других методов, ну а это в следующих постах!
Если наберется 150 🐳, выложу пост про подборку статей по 🆎