CUPED III
Вот тут обсудили варианты CUPED-трансформации. А тут я рассказал про корректную формулу для θ, а также подружил CUPED с дельта-методом. Теперь научимся добавлять в CUPED несколько ковариат, а также рассмотрим кандидатов на эти ковариаты.
Погружаемся в матрицу
Вы, возможно, встречали вариант реализации множественного CUPED в старой статье от Авито. В ней Дима Лунин предлагает брать ковариату, рассчитывать θ по обычной формуле для одиночного CUPED, трансформировать метрику, а затем повторять этот процесс со следующей ковариатой, используя трансформированную метрику в качестве исходной. Норм подход, но сразу возникают сложности с тем, в каком порядке эти ковариаты брать – от этого будет зависеть, насколько чувствительнее в итоге станет критерий.
Хочется найти более простой способ, позволяющий посчитать оптимальные значения θ без перестановок ковариат. За нас это уже сделали Алекс Денг и Виктор Ху в аппендиксе к статье 2015 года.
Представьте, что у нас есть целевая метрика Y, а также n ковариат X_i, которые записаны столбцами в матрицу X. Для того, чтобы найти вектор оптимальных значений θ* = [θ_1, ... ,θ_n], нам для каждой группы эксперимента нужно вычислить две величины:
- Сov(Y, X) – вектор ковариаций между целевой метрикой и каждой из ковариат X_i
- Var(X) – ковариационную матрицу ковариат X_1, ... , X_n
Посчитав эти величины в контрольной и тестовой группах, подставляем их в итоговую формулу и получаем вектор θ* = [θ_1, ... ,θ_n]:

Далее умножаем коэффициенты на соответствующие ковариаты и вычитаем произведения из исходной метрики:

Чтобы построить доверительный интервал, понадобится рассчитать дисперсию разности средних. Если вы трансформировали данные на уровне пользователя по формуле выше, то здесь ничего нового – берем Var_t() / n_t + Var_c() / n_c по трансформированным данным. Если вдруг хотите формулу, которая сразу оперирует агрегированными значениями, то Алекс Денг любезно вывел её для вас:

Если мы возьмем производную по вектору θ от этой формулы, приравняем её к 0 и выразим θ, то как раз и получим формулу для θ*.
Где взять ковариаты
Круто – научились вычитать несколько ковариат. Возникает вопрос: откуда их брать? Единственное требование, которое предъявляет CUPED к ковариатам – это то, что они не должны быть подвержены влиянию изменения. Другими словами E[X^t] = E[X^c]. Вот несколько источников вдохновения:
- Пост-стратификация
Характеристики пользователей, выраженные через бинарные переменные: is_new, is_from_Moscow и т.д. Тут будьте аккуратнее с использованием сегментов (типа is_heavy_user) – они должны быть определены на основе данных до начала эксперимента.
По моему опыту, такие ковариаты если и дают снижение дисперсии, то на уровне погрешности.
- CUPED++
EPPO предлагают использовать предэкспериментальные данные по другим метрикам эксперимента. Опять же, такой подход может давать какое-то снижение дисперсии, но инкрементальный эффект от них при добавлении к ковариате по целевой метрике тоже, скорее всего, будет не очень большим.
- Триггеринг
Эта штука в определенных ситуациях может быть имбой. Если пользователи попадают в эксперимент в момент открытия приложения, а фича расположена где-нибудь в "Избранном", то активность пользователя с начала эксперимента и до первого захода в "Избранное" будет попадать под требование к ковариате, так как не будет подвержена влиянию тритмента.
Подробнее об этом методе можно почитать в уже упомянутой статье Алекса Денга и Виктора Ху, а также в моей статье на медиуме (там, правда, не совсем точная формула для θ* – лучше использовать ту, что я привел здесь).
Что еще почитать про CUPED
Алекс Денг продолжает свои изыскания на тему триггеринга. Если будете читать, обратите внимание на то, как формируется ковариата. Вторая её часть – уже не среднее по контрольной группе, а взвешенное среднее.

Это концептуально важный момент, так как предлагаемый подход не позволяет провести поюзерную CUPED-трансформацию. Из-за этого приходится сразу вычислять статистику в агрегированном виде и считать ДИ с помощью бутстрэпа.
Небольшая статья-осмысление концепции CUPED. Трансформацию в ней представляют в довольно абстрактном виде, который Алекс Денг называет augmentation view:

Здесь уже нет акцента на том, что CUPED – это регрессия остатков. Delta_hat_0 необязательно должна существовать на уровне пользователя или быть разностью средних (как, кстати, в предыдущем пункте). Единственное требование к этой величине – чтобы её мат. ожидание было равно 0 (ну и наличие корреляции с delta_hat, очевидно).
Вот что пишет Алекс Денг про аугментацию:

Также кратко упоминается применение CUPED для декомпозиции метрик. Но об этом лучше почитать в
Статья Алекса Денга, в которой он отходит от требования о нулевом мат. ожидании ковариаты и уговаривает нас согласиться на требование о почти нулевом мат. ожидании ковариаты.
Прежде чем читать эту статью, рекомендую ознакомиться с моей. Это немного упростит понимание того, что там вообще происходит. Обратите также внимание на этот абзац:

Когда вам будет казаться, что формулы походят на классическую формулу для θ, помните, что ковариация и дисперсия, используемые в статье (сигма_12 и сигма_22), вычисляются не на основе данных текущего эксперимента, а чуть более сложным способом.
Про CUPED на этом все. Мой тгк @abtesticles