Я розробник програмного забезпечення, який працює над системами тестування 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_CONTROL0,1 та CRM_EXPERIMENTAL0,128 - це результат, коли переможця можна оголосити.
У відповідному запитанні користувачі повідомили, що такий тест є менш достовірним через заохочення ранніх зупинок, що мають меншу кількість зразків, а також є вразливим до зміщення оцінок та збільшення кількості помилок типу I та типу II. Чи є якийсь спосіб змусити це правило зупинення роботи? Це наш переважний підхід, оскільки він означає менший час програмування для нас. Можливо, це правило зупинки може спрацювати, запропонувавши якусь числову оцінку чи бали, що вимірюють достовірність тесту, чи слід його припинити достроково?
2. Використання послідовного аналізу або SPRT .
Ці методи тестування розроблені саме для ситуації, в якій ми опинилися: як наші користувачі можуть почати тест і закінчити його таким чином, щоб вони не витрачали зайвий час на тестування? Або тест запускається занадто довго, або потрібно починати тест із різними параметрами.
З двох вищезазначених методів я віддаю перевагу SPRT, оскільки математика мені трохи легше зрозуміти і тому, що, схоже, це може бути легше програмувати. Однак я не розумію, як використовувати функцію ймовірності в цьому контексті. Якщо хтось міг би побудувати приклад того, як обчислити коефіцієнт ймовірності, сукупну суму коефіцієнта ймовірності та продовжити на прикладі, що ілюструє ситуацію, коли можна продовжувати моніторинг, коли можна прийняти нульову гіпотезу та альтернативну гіпотезу, це допоможе нам визначити, чи SPRT - це правильний шлях.