🆎 CUPED как метод сокращения дисперсии для проведения A/B экспериментов.
🤭 Всем привет! В этом посте хочу рассказать о том что такое
CUPED, зачем он нужен?
🤩 CUPED (Controlled-experiment Using Pre-Experiment Data) - один из методов сокращения дисперсии при проведении экспериментов, используемый в индустрии на основе данных предэкспериментального периода. Обычно метрику, которая используется до эксперимента, называется
ковариатой.
🔨 Предположим, мы дизайним эксперимент, рассчитываем
MDE (Minimum Detectable Effect) и Sample Size (необходимый размер выборки для проведения A/B теста). Рассмотрим стандартную формулу для нахождения MDE подробней:
MDE = (F(1-alpha / 2) + F(1 - beta)) * sqrt(Var(X)) / sqrt(sample_size)
F(1-alpha / 2) - квантильная функция для 1 - ошибки первого рода (двусторонняя гипотеза) aka критическое значение для H0
F(1 - beta) - квантильная функция для мощности
Var(X) - дисперсия метрики
sample_size - размер выборки (обычно рассчитывается на основе трафика, целевых действий)
🕺 Обычно в экспериментах мы можем влиять на
размер выборки (по сути длительность эксперимента и количество трафика и дисперсию метрики).
🍴 Отсюда два вопроса:
а) Можем ли мы нагенерить столько трафика, чтобы MDE стало допсутимым при выборе определенной метрики?
б) Можем ли мы что-то сделать с целевой метрикой и соответствующей дисперсией, чтобы сократить MDE?
🍿 А к чему вообще сокращать MDE? Для того чтобы детектировать большее количество прокрашиваемых экспериментов и сокращать время для проведения экспериментов.
Итак, к CUPED. Канонический вид:
Ycuped = Y - theta * (X - Xmean)
Ycuped - модифицированная метрика CUPED
theta = некий коэффициент, про который я напишу ниже
X - значение ковариаты в предэкспериментальном периоде
Xmean - среднее значение ковариаты в предэкспериментальном периоде
😐 Давайте рассмотрим матожидание Ycuped
E(Ycuped) = E(Y) - E(theta * X) + E(theta * Xmean) = E(Y) - theta * E(X) + theta * E(Xmean) = E(Y) - theta * E(X) + theta * E(X) = E(Y)
🤸 Вуаля, оценка получается
несмещенной, то есть благодаря поправке на среднее значение ковариаты мы получили такое же матожидание.
😨 А что с
дисперсией? Нам ведь нужно понять, как это повлияет на
MDE при дизайне эксперимента
Var(Ycuped) = Var(Y - theta * (X - Xmean))
Проведем замену X - Xmean = k
Var(Ycuped) = Var(Y - theta * k) = Var(Y) - 2 * cov(Y, theta * k) + Var(theta * k) = Var(Y) - 2 * theta * cov(Y, k) + theta^2 * Var(k) = theta^2 * Var(k) - 2 * theta * cov(Y,K) + Var(Y)
🫡 Нам нужно минимизировать дисперсию. Решим относительно параметра
theta, можно взять производную, или посмотреть на вершину параболы.
theta (вершина) = - b / 2a = 2 * cov(Y,k) / 2 * Var(K) = cov(Y,k) / Var(k).
Обратная замена:
theta (вершина) = cov(Y, (X - Xmean)) / Var(X - Xmean) = cov(Y, X) / Var(X)
🚘 Нашли точку, в которой дисперсия достигает минимума (вершина параболы). Вывели соответствующие значение theta.
😏 Чем больше ковариация, тем больше линейная связь между двумя случайными величинами, поэтому обычно и берут метрики до эксперимента, которые сильно коррелируют друг с другом (эта же метрика в предэкспериментальном периоде).
🫴 На практике выбор сильно коррелированной метрики в предэкспериментальном периоде позволяет сократить дисперсию в несколько раз, что приводит к увеличению чувствительности теста.
😱 НО! есть ограничения, которые также я опишу в следующих постах.
⌨️ А какие способы снижения дисперсии знаете вы? Пишите в комментариях, ставьте реакции. Следующая часть не заставит себя долго ждать
😀#аб