Я розробник програмного забезпечення, який працює над системами тестування A / B. Я не маю надійної статистики, але за останні кілька місяців я набираю знань.
Типовий тестовий сценарій включає порівняння двох URL-адрес на веб-сайті. Відвідувач відвідує, LANDING_URL
а потім випадковим чином пересилається на URL_CONTROL
або URL_EXPERIMENTAL
. Відвідувач являє собою зразок, і умова перемоги досягається, коли відвідувач виконує якісь бажані дії на цьому сайті. Це становить конверсію, а швидкість конверсії - швидкість конверсії (зазвичай виражається у відсотках). Типовий коефіцієнт конверсії для даної URL-адреси - це сфера від 0,01% до 0,08%. Ми проводимо тести, щоб визначити, як нові URL-адреси порівнюються зі старими URL-адресами. Якщо URL_EXPERIMENTAL
показано, що він перевершує URL_CONTROL
, замінимо URL_CONTROL
на URL_EXPERIMENTAL
.
Ми розробили систему з використанням простих методів тестування гіпотез. Я використовував відповіді на інше питання CrossValidated тут, щоб розробити цю систему.
Тест встановлюється наступним чином:
- Оцінка коефіцієнта конверсії обчислюється
CRE_CONTROL
зURL_CONTROL
використанням історичних даних. - Необхідний коефіцієнт конверсії цільової
CRE_EXPERIMENTAL
зURL_EXPERIMENTAL
цієї множини. - Зазвичай використовується рівень значущості 0,95.
- Зазвичай використовується потужність 0,8.
Усі ці значення разом використовуються для обчислення потрібного розміру вибірки. Я використовую функцію R, power.prop.test
щоб отримати цей розмір вибірки.
Тест триватиме, поки не будуть зібрані всі зразки. На цьому етапі довірчі інтервали для CR_CONTROL
та CR_EXPERIMENTAL
обчислюються. Якщо вони не перетинаються, то переможця можна оголосити рівнем значущості 0,95 та потужністю 0,8.
У користувачів наших тестів є дві основні проблеми:
1. Якщо в якийсь момент під час тестування зібрано достатньо зразків, щоб показати чіткого переможця, тест не можна зупинити?
2. Якщо в кінці тесту не оголошено переможця, чи можемо ми провести тест довше, щоб побачити, чи зможемо ми зібрати достатню кількість зразків, щоб знайти переможця?
Слід зазначити, що існує багато комерційних інструментів, які дозволяють їхнім користувачам робити саме те, що бажають наші власні користувачі. Я читав, що існує багато помилок з вищезазначеним, але я також натрапив на ідею зупиняючого правила і хотів би вивчити можливість використання такого правила у власних системах.
Ось два підходи ми хочемо розглянути:
1. Використовуючи power.prop.test
, порівняйте поточні виміряні коефіцієнти конверсії з поточною кількістю зразків і подивіться, чи було зібрано достатньо зразків для оголошення переможця.
Приклад: Тест встановлено, щоб перевірити, чи існує така поведінка в нашій системі:
CRE_CONTROL
: 0,1CRE_EXPERIMENTAL
: 0,1 * 1,3- При цих параметрах розмір вибірки
N
становить 1774.
Однак у міру проходження тесту і досягнення 325 проб CRM_CONTROL
(виміряна швидкість конверсії для контролю) становить 0,08 і CRM_EXPERIMENTAL
становить 0,15. power.prop.test
проводиться на цих коефіцієнтах конверсії і N
виявляється 325. Рівно кількість зразків, необхідних для оголошення CRM_EXPERIMENTAL
переможця! На даний момент ми сподіваємось, що випробування можна було б закінчити. Аналогічно, якщо тест досягає 1774 проби, але переможця не знайдено, але тоді він досягає 2122 зразків, що достатньо, щоб показати, що CRM_CONTROL
0,1 та CRM_EXPERIMENTAL
0,128 - це результат, коли переможця можна оголосити.
У відповідному запитанні користувачі повідомили, що такий тест є менш достовірним через заохочення ранніх зупинок, що мають меншу кількість зразків, а також є вразливим до зміщення оцінок та збільшення кількості помилок типу I та типу II. Чи є якийсь спосіб змусити це правило зупинення роботи? Це наш переважний підхід, оскільки він означає менший час програмування для нас. Можливо, це правило зупинки може спрацювати, запропонувавши якусь числову оцінку чи бали, що вимірюють достовірність тесту, чи слід його припинити достроково?
2. Використання послідовного аналізу або SPRT .
Ці методи тестування розроблені саме для ситуації, в якій ми опинилися: як наші користувачі можуть почати тест і закінчити його таким чином, щоб вони не витрачали зайвий час на тестування? Або тест запускається занадто довго, або потрібно починати тест із різними параметрами.
З двох вищезазначених методів я віддаю перевагу SPRT, оскільки математика мені трохи легше зрозуміти і тому, що, схоже, це може бути легше програмувати. Однак я не розумію, як використовувати функцію ймовірності в цьому контексті. Якщо хтось міг би побудувати приклад того, як обчислити коефіцієнт ймовірності, сукупну суму коефіцієнта ймовірності та продовжити на прикладі, що ілюструє ситуацію, коли можна продовжувати моніторинг, коли можна прийняти нульову гіпотезу та альтернативну гіпотезу, це допоможе нам визначити, чи SPRT - це правильний шлях.