Прикладна аналітика при розробці IT
КНУ імені Тараса Шевченка, ФІТ
Для неперервних метрик можна використовувати методи підвищення чутливості шляхом зменшення дисперсії
Яка середня позиція у банера?
Банер показувався в списку на 1-5 позиціях. Але взяти середнє по всіх позиціях — неправильно. Щоб дізнатися реальне середнє, будемо рахувати середнє зважене
Позиція | Покази |
---|---|
1 | 300 |
2 | 150 |
3 | 200 |
4 | 50 |
5 | 30 |
Яка середня позиція у банера?
Банер показувався в списку на 1-5 позиціях. Але взяти середнє по всіх позиціях — неправильно. Щоб дізнатися реальне середнє, будемо рахувати середнє зважене
Позиція | Покази | Позиція * Покази |
---|---|---|
1 | 300 | 1 * 300 = 300 |
2 | 150 | 2 * 150 = 300 |
3 | 200 | 3 * 200 = 600 |
4 | 50 | 4 * 50 = 200 |
5 | 30 | 5 * 30 = 150 |
Сума | 730 | 1550 |
Середня зважена позиція
\[ = \frac{\sum{(\text{Покази} \times \text{Позиція})}}{\sum{\text{Позиція}}} \]
\[ = \frac{1550}{730} \approx 2.12 \]
Яка середня позиція у банера?
Банер показувався в списку на 1-5 позиціях. Але взяти середнє по всіх позиціях — неправильно. Щоб дізнатися реальне середнє, будемо рахувати середнє зважене
Позиція | Покази |
---|---|
1 | 300 |
2 | 150 |
3 | 200 |
4 | 50 |
5 | 30 |
Яка середня позиція у банера?
Банер показувався в списку на 1-5 позиціях. Але взяти середнє по всіх позиціях — неправильно. Щоб дізнатися реальне середнє, будемо рахувати середнє зважене
Позиція | Покази | Покази / Сума показів |
---|---|---|
1 | 300 | 300 / 730 = 0.411 |
2 | 150 | 150 / 730 = 0.205 |
3 | 200 | 200 / 730 = 0.274 |
4 | 50 | 50 / 730 = 0.068 |
5 | 30 | 30 / 730 = 0.041 |
\(\sum\) = 730 | \(\sum\) = 1 |
Множимо позицію на вагу та додаємо
\[ \begin{aligned} & = 1 \times 0.411 \\ & + 2 \times 0.205 \\ & + 3 \times 0.274 \\ & + 4 \times 0.068 \\ & + 5 \times 0.041 \approx 2.12 \end{aligned} \]
Спосіб розрахунку повторює логіку розрахунку будь-якої зваженої оцінки:
Відмінність пре-стратифікації від пост-стратифікації в тому, що ваги визначаються на етапі конфігурації
\[ \text{var}_{\text{strat}}(\hat{Y}_{\text{strat}}) = \frac{1}{n} \sum_{k=1}^{K} p_k \sigma_k^2 \]
де \(p_k\) — ймовірність потрапляння в \(k\)-ту страту (вага),
\(\sigma_k^2\) — дисперсія в \(k\)-тій страті
Середня стратифікована за вибіркою буде такою самою, як і середня за ГС, тому що рахується середня зважена за стратами.
Можна особливо не заглиблюватися:
\[\mathbb{E}_{\text{strat}}(\hat{Y}_{\text{strat}}) = \sum_{k=1}^{K} p_k \mathbb{E}_{\text{strat}}(\bar{Y}_k) = \sum_{k=1}^{K} p_k \mu_k = \mu\]
де \(Y\) — метрика,
\(\mu\) — середнє метрики у ГС,
\(\mu_k\) — середнє метрики у \(k\)-тій страті,
\(p_k\) — частка \(k\)-тої страти в ГС (ймовірність потрапляння в страту)
Стратифікована дисперсія за вибіркою рахується зважено за кожною стратою.
Вага визначається ймовірністю потрапляння користувача в страту.
Наприклад, якщо за страти ми беремо регіони і їх у нас 3 з аудиторією, розбиті за частками 30%, 50%, 20%, то ваги для них \(p_{k1} = 0.3\), \(p_{k2} = 0.5\), \(p_{k3} = 0.2\).
\[\text{var}_{\text{strat}}(\hat{Y}_{\text{strat}}) = \frac{1}{n} \sum_{k=1}^{K} p_k \sigma_k^2\]
\[ \text{var}(\hat{Y}) = \sum_{k=1}^{K} \frac{w_k}{n} \sigma_k^2 + \sum_{k=1}^{K} w_k (\mu_k - \mu)^2 \]
\[ \text{var}(\hat{Y}) = \sum_{k=1}^{K} \frac{w_k}{n} \sigma_k^2 + \sum_{k=1}^{K} w_k (\mu_k - \mu)^2 \]
\(\bar{Y} = 8\)
\(\sigma^2 = 1\)
\(w = 0.22\)
\(\bar{Y} = 7.25\)
\(\sigma^2 = 1.6874\)
\(w = 0.44\)
\(\bar{Y} = 5.33\)
\(\sigma^2 = 1.555556\)
\(w = 0.33\)
Внутрішньогрупова дисперсія
0.22 * 1 + 0.44 * 1.6874 + 0.33 * 1.555556 = 1.490741
Міжгрупова дисперсія
0.22 * (8 - 6.777778)2 + 0.44 * (7.25 - 6.777778)2 + 0.33 * (5.33 - 6.777778)2 = 1.126543
\[\text{var}(\hat{Y}) = 1.490741 + 1.126543 = 2.617284\]
На маленьких ефектах найчастіше ми бачимо низьку потужність на ранніх етапах експерименту. Причиною цього є висока дисперсія:
Скорочення досягається шляхом використання перед-експериментальних даних:
\[ Y_{\text{CUPED}} = Y - \theta X \]
де \(Y\) — метрика,
\(X\) — метрика до експерименту.
Для збереження середнього використовується:
у CUPED ми дивимося не просто на бізнес-метрику \(Y\), а на змінену \(Y_{\text{CUPED}}\), яка чутливіша, завдяки її зв’язку з перед-експериментальним періодом
Ідея полягає в тому, що дисперсія зумовлена двома компонентами: дисперсією коваріати і дисперсією невідомих змінних. Після корекції, ми позбуваємося дисперсії і залишаємо вплив невідомих змінних
CUPED має дві модифікації: використання попередньої стратифікації або коваріати:
На практиці частіше використовується коваріата, оскільки вона дає змогу сильніше скоротити дисперсію, ніж стратифікація
id | exp_variant | sessionDuration (метрика) | sessionDuration (попередня метрика) | sessionDuration (CUPED) |
1 | control | 31 | 30 | 31 - (30 - ср.коваріата) * θ |
2 | control | 23 | 20 | 23 - (20 - ср.коваріата) * θ |
3 | treatment | 25 | 22 | 25 - (22 - ср.коваріата) * θ |
4 | treatment | 41 | 46 | 41 - (46 - ср.коваріата) * θ |
Cереднє за коваріатом і \(\theta\) підбираються за всіма групами
Вибіркова метрика
\[\bar{X} = \frac{1}{n} \sum_{i=1}^{n} X_i\]
Метрика за користувача
\[\bar{R} = \frac{\bar{Y}}{\bar{Z}} = \frac{\sum{Y_i}}{\sum{Z_i}}\]
Користувач | Дій на сторінці | Переглядів сторінки |
---|---|---|
1 | 10 | 200 |
2 | 3 | 259 |
3 | 90 | 139 |
4 | 10 | 20 |
\(ratioUser1 = \frac{10}{200} = 0.05\)
\(ratioUser2 = \frac{3}{259} = 0.0116\)
\(ratioUser3 = \frac{90}{139} = 0.6475\)
\(ratioUser4 = \frac{10}{20} = 0.5\)
\(naiveAVG = \frac{0.05 + 0.0116 + 0.6475 + 0.5}{4} = 0.302\)
Користувач | Дій на сторінці | Переглядів сторінки |
---|---|---|
1 | 10 | 200 |
2 | 3 | 259 |
3 | 90 | 139 |
4 | 10 | 20 |
\(globalRatio = \frac{10 + 3 + 90 + 10}{200 + 259 + 139 + 20} = \frac{113}{618} = 0.182\)
\[naiveAVG = \frac{0.05 + 0.0116 + 0.6475 + 0.5}{4} = 0.302\]
\[bias = 0.302 - 0.182 = 0.12\]
Ratio метрику ми можемо порахувати як мінімум трьома способами
naiveRatio
globalRatio
L-метрика (лінеаризація)
\[Lx, y, k(U) = X(u) - kY(u)\]
Ми хочемо зрозуміти відхилення метрики в експерименті відносно ratio у контролі
Інакше кажучи — дивимося, що змінилося в експерименті відносно ситуації в контролі