Перейти до змісту
Увійти

Теорія

Хто потрапляє в тест: тригери й кластерна рандомізація

Хто має бути в A/B-тесті: включення за тригером, розбавлення і кластерна рандомізація цілих груп, коли користувачі впливають одне на одного.

~9 хв читання · 9 вправ · 250 балів

Перед початком

Чому тест нічого не знайшов?

У Maya є старий результат тесту в Halves, який розчарував команду. Навесні тестували пропозицію зробити регулярним рахунок, що повторюється, і розділили між двома версіями всіх, хто відкривав застосунок. Результат — частка пункту, і ніхто не знає, чи провалилася ідея, чи сам тест.

У цьому уроці ти розберешся, хто взагалі має потрапляти в тест, як люди, що не можуть побачити зміну, розмивають її, і що робити, коли користувачі впливають одне на одного.

Розбавлення: ефект, розмазаний по тих, хто його не бачив

Тест вимірює середній ефект серед усіх його учасників. Якщо більшість із них ніколи не може зіткнутися зі зміною, їхній нульовий ефект теж потрапляє в середнє.

Весняний тест «Зробити регулярним?» поділив усіх 34 000 щотижневих активних користувачів. Лише 5100 із них (5100 ÷ 34 000 = 15%) додали рахунок, що повторює попередній, а тільки в такій ситуації підказка з'являється. Серед цих 15% вона підвищила налаштування регулярних рахунків на 3 п. п. У всіх інших ефект рівно нульовий. Тож серед усіх учасників тесту:

Загальний ефект = ефект серед тих, кого зачепило × частка таких = 3 п. п. × 0,15 = 0,45 п. п.

Це розбавлення (dilution). Незачеплені 85% знищуються в різниці між варіантами, але не знищуються в шумі: їхня поведінка однаково різниться від людини до людини, тож інтервал лишається широким, а ефект стискається до частки пункту.

Одна крапля помаранчевої фарби майже зникає у великій ванні з водою, але помітно забарвлює маленьку склянку поруч.
Розбавлення: користувачі, які не стикаються зі зміною, ховають її ефект у шумі.

У результаті тест показує «частку пункту, інтервал перетинає нуль» для зміни, яка добре працює для тих, для кого її зробили.

  • Так
    3 п. п. × (5100 ÷ 34 000) = 3 × 0,15 = 0,45 п. п. загалом
  • Не так
    «Підказка додає 3 п. п. серед усіх користувачів.»

    3 п. п. стосуються лише тих 15%, хто міг її побачити.

Розбавлений тест — не доказ відсутності ефекту

Розбавлений тест мусить ловити ефект, набагато менший за справжній, тож пласкі результати — не доказ відсутності ефекту (аргумент про потужність з уроку Наскільки великий і наскільки довгий). Перш ніж робити висновки, перевір, хто був у тесті.

Серед усіх частка налаштувань регулярних рахунків змінюється з 0,15 × 24% + 0,85 × 2% = 5,3% у контролі до 5,75% з підказкою. Щоб виявити 5,3% → 5,75% при α = 5% і потужності 80%, потрібно 40 414 користувачів на варіант. Серед тих, хто додає повторний рахунок, та сама зміна — це 24% → 27%, і для неї потрібно лише 3306 на варіант: приблизно вдванадцятеро менше, два тижні повторних рахунків.

Підказку можуть побачити лише 15% користувачів; якщо рахувати з тригера, потрібно 3306 користувачів на варіант замість 40 414 при поділі всіх.

Тож весняний результат мало що каже про підказку. Тест розрахували на всіх і запустили на всіх, а ефект жив у 15% з них. «Інтервал перетинає нуль» тут означає, що тест не міг побачити ефекту, а не що його немає.

Чесне прочитання — «непевно, бо тест розбавлений», а далі повторний тест, який рахує лише тих, хто доходить до моменту, коли підказка може з'явитися. Відмовитися від функції через пласкі результати розбавленого тесту — значить викинути зміну, яка цілком може працювати.

  • Так
    «Непевно: 85% учасників ніколи не могли побачити підказку. Повторити з тригера: 3306 на варіант.»
  • Не так
    «Інтервал перетинає нуль, отже, підказка не працює. Прибираємо.»

    Щоб побачити розбавлений ефект, тесту потрібно було 40 414 на варіант.

Включення за тригером: рахуй з моменту, коли версії можуть відрізнятися

Включення за тригером (triggered enrollment) виправляє розбавлення: користувач потрапляє в аналіз у перший момент, коли дві версії можуть відрізнятися. Для підказки «Зробити регулярним?» це додавання рахунку, що повторює минуломісячний.

Правильний тригер має три властивості:

  1. Він відбувається однаково в обох варіантах. Додавання повторного рахунку не залежить від того, чи є підказка.
  2. Він відбувається до того, як зміна може подіяти. Підказка з'являється лише після того, як повторний рахунок додано.
  3. Його фіксують і в контролі. У контролі підказка не з'являється, але система однаково записує «цей користувач побачив би її зараз». Без такого запису не зібрати відповідної контрольної групи.

Варіант можна призначити й раніше, наприклад при реєстрації; змінюється лише те, звідки починається підрахунок.

Спокуслива помилка — тригер, на який впливає сам варіант: налаштування регулярного рахунку чи натискання на підказку. Підказка змінює, хто це робить, тож кожен варіант набирав би інших людей, і порівняння перестало б бути чесним. Тест paywall живе за тим самим правилом: користувачі потрапляють у нього при першому paywall_viewed, а не при trial_started.

  • Так
    Тригер: користувач додає рахунок, що повторює минуломісячний (фіксується в обох варіантах)
  • Не так
    Тригер: користувач натискає «Зробити регулярним?»

    У контролі кнопки немає, а хто натискає, вирішує варіант.

Мережевий ефект: коли варіант одного користувача протікає до іншого

Звичайний A/B-тест припускає, що результат кожного користувача залежить лише від його власного варіанта. У продукті, побудованому навколо груп, це припущення часто не справджується.

Візьмімо груповий план: платить один учасник, а Plus отримують усі в групі. Розділи квартиру на трьох за користувачами — і сусід у новому варіанті може купити план, давши Plus двом сусідам у контролі. Контроль більше не контроль. До того ж люди порівнюють екрани: «чому твій paywall пропонує груповий план, а мій — ні?»

Троє сусідів по квартирі на одному дивані зазирають у телефони одне одного; на одному екрані помаранчева пропозиція, якої в інших немає.
Коли група має спільний баланс, ділити тест треба за групами, а не за людьми.

Такий витік — це мережевий ефект (network effect) між варіантами, і зазвичай він робить виміряну різницю меншою за справжню, бо контроль частково отримав зміну.

Рішення — кластерна рандомізація (cluster randomization): підкидати монетку для цілих груп, щоб усі учасники групи отримали той самий варіант.

При поділі за користувачами груповий план одного сусіда дає Plus сусідам у контролі; при поділі за групами всі в квартирі отримують той самий варіант.

Швидка перевірка, чи вона потрібна: чи зміну бачать, ділять або купують для інших учасників групи? Груповий план, підказки розрахунку для групи і спільний графік витрат — так, тож рандомізуй їх групами. Темна тема чи іконка особистих налаштувань лишаються в того, хто їх бачить; тут підходить рандомізація за користувачами.

  • Так
    Спільний графік витрат → рандомізувати групами
  • Не так
    Груповий план, поділ 50/50 за користувачами

    Покупець у тестовій групі дає Plus сусідам у контролі.

Дизайн-ефект: скільки коштують кластери

Рандомізація цілими групами захищає порівняння, але коштує розміру вибірки. Учасники однієї групи поводяться схоже: разом подорожують, разом платять оренду й часто разом ідуть. Троє сусідів дають менше незалежної інформації, ніж троє незнайомців.

Дизайн-ефект (design effect, DE) показує, у скільки разів більше користувачів потрібно кластерному тесту порівняно з тестом за користувачами:

DE=1+(m−1)×ICC\text{DE} = 1 + (m - 1)\times \text{ICC}
Дизайн-ефект: помнож кількість користувачів, потрібну для тесту за користувачами, на DE.

DE = 1 + (m − 1) × ICC

  • m — середній розмір групи в тесті;
  • ICC (внутрішньокластерна кореляція) міряє, наскільки схожі учасники групи за метрикою, від 0 (різні, як незнайомці) до 1 (однакові). Її оцінюють за минулими даними тієї самої метрики.

Для квартир у Halves: m = 3, ICC = 0,15, тож DE = 1 + 2 × 0,15 = 1,3.

Помнож розмір для тесту за користувачами на DE: 6735 × 1,3 = 8755,5 → 8756 користувачів на варіант, або 8756 ÷ 3 = 2918,7 → 2919 груп. Кластери коштують на 30% більше користувачів.

Формула — наближення для планування; вона припускає групи схожого розміру. Коли розміри дуже різняться, ціна дещо вища.

  • Так
    DE = 1 + (3 − 1) × 0,15 = 1,3; 6735 × 1,3 → 8756 на варіант
  • Не так
    DE = 1 + 3 × 0,15 = 1,45

    Взято m замість m − 1: кожен учасник додається до першого, а не до нуля.

Більші групи — більший дизайн-ефект

Дизайн-ефект зростає з обома вхідними даними, і кожне примножує інше.

Формула: Дизайн-ефект: помнож кількість користувачів, потрібну для тесту за користувачами, на DE. · є вище

  • Розмір групи. За того самого ICC 0,15 групи по 3 дають DE = 1,3, по 4 — 1 + 3 × 0,15 = 1,45, а по 6 — 1 + 5 × 0,15 = 1,75. Групи поїздок зазвичай більші за пари чи квартири, тож тест, рандомізований за групами поїздок, коштує дорожче.
  • Схожість. При m = 3 ICC 0,05 дає DE = 1,1, а 0,30 — 1,6. Метрики, які група вирішує разом, як-от хто платить за Plus чи коли група перестає користуватися застосунком, зазвичай мають вищий ICC, ніж особисті.

Для груп по 4 з ICC 0,15: 6735 × 1,45 = 9765,75 → 9766 користувачів на варіант, тобто 9766 ÷ 4 = 2441,5 → 2442 групи.

Звідси дві практичні звички. Оцінюй ICC за минулими даними тієї самої метрики і того самого типу груп, які тестуватимеш, а не навмання. А коли дизайн-ефект робить тест задовгим, спершу шукай вужчий тригер: якщо включати лише групи, що дійшли до paywall, шуму стає менше ще до того, як кластери його примножать.

  • Так
    m = 4, ICC 0,15: DE 1,45 → 6735 × 1,45 → 9766 на варіант
  • Не так
    Взяти DE = 1,3 від квартир для тесту на групах поїздок

    Більші групи — більший дизайн-ефект.

Тригери на рівні групи

Коли монетку підкидають для груп, тригер теж працює для груп. Тест групового плану включає групу в перший момент, коли хтось із її учасників міг би побачити різницю: коли будь-хто з учасників уперше переглядає paywall. Відтоді в тесті вся група, зокрема й ті, хто сам paywall ніколи не відкриває, бо план однаково до них дістається.

Діють ті самі три правила, що й для тригера на рівні користувача:

  • він відбувається однаково в обох варіантах (перегляд paywall не залежить від того, чи пропонує він груповий план);
  • він стається до того, як зміна може подіяти;
  • його фіксують і в контролі.

Дві спокусливі альтернативи ламають тест. Включення при купівлі групового плану відбирає лише покупців, а вони можуть бути лише в одному варіанті, тож у контролі немає відповідної групи. Включення кожного учасника окремо при його власному першому перегляді paywall розриває групи в часі й в аналізі, а це повертає саме той витік, від якого мала захистити кластерна рандомізація.

Тож кожен план тесту до запуску відповідає на три питання: на кого зміна може вплинути, коли ці люди потрапляють у тест і для чого підкидаємо монетку.

  • Так
    Група потрапляє в тест, коли будь-хто з учасників уперше бачить paywall; аналізують усю групу разом
  • Не так
    Група потрапляє в тест, коли хтось купує груповий план

    Таку подію може дати лише новий варіант.

Аналізуй на рівні одиниці рандомізації

Якщо монетку підкидали для груп, аналіз має брати за одиницю групу. Одиниця рандомізації й одиниця аналізу мають збігатися.

Причина — та сама схожість, що створила дизайн-ефект. 8756 користувачів у групах по 3 з ICC 0,15 дають приблизно стільки ж інформації, скільки 8756 ÷ 1,3 ≈ 6735 незалежних. Звичайний інтервал «за користувачами» вдає, що це 8756 незалежних людей, тож виходить приблизно в √1,3 ≈ 1,14 раза завузьким.

Завузький інтервал надто впевнений: хиткі ефекти виглядають надійними, а хибних перемог стає більше за заплановані 5%.

Коректні варіанти: порахувати метрику для кожної групи й порівнювати групи або взяти стандартні похибки, що враховують кластеризацію. Хибний лише один, і він стоїть за замовчуванням: вважати кожного користувача рандомізованим окремо. Перш ніж читати результат, перевір, що одиниця аналізу збігається з одиницею рандомізації в плані.

Як це складається докупи: визначити, на кого зміна може вплинути, включати людей, коли вони доходять до тригера, підкидати монетку для того, що має спільний досвід, і аналізувати на тій самій одиниці. Далі урок Кейс: читаємо завершений тест.

  • Так
    Рандомізація групами → інтервал, де одиниця — група
  • Не так
    Рандомізація групами, аналіз звичайним тестом за користувачами на 8756 людях

    Інтервал приблизно в 1,14 раза завузький.

Готові потренуватися?

Виконайте вправи уроку й отримайте 250 балів, коли пройдете його вперше.

Розпочати вправи