Как доверительные интервалы помогают решать задачи бизнеса?



😏 Всем привет! В этом посте вообще опишу то, с какой ситуацией можно столкнуться, анализируя эксперименты. Представим, что мы задизайнили эксперимент, определили слои, запустили эксперимент, собрали все требования, ожидания, выбрали целевые метрики и вот мы уже подводи итоги эксперимента. Бизнесу важны по большей части деньги и пользовательский опыт. Так вот, смотрим на метрики, видим, что 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 🐳, выложу пост про подборку статей по 🆎