Головна ▸ ШІ та Машинне навчання ▸ Оптимізатор A/B тестів — багаторукий бандит UCB1 наживо
🎰 Оптимізатор A/B тестів — багаторукий бандит UCB1 наживо
Спостерігайте, як справжній алгоритм багарукого бандита UCB1 (верхня довірча межа) наживо розподіляє симульований трафік між варіантами сторінки, по-справжньому балансуючи дослідження та використання, щоб зійтися до варіанта з найкращою конверсією швидше за фіксований розподіл 50/50.
ШІ та Машинне навчання
3D
Помірно
60 FPS
UCB1
Аналіз жалю
Про цю симуляцію
Ця симуляція запускає справжній алгоритм багарукого бандита UCB1 (верхня довірча межа) проти кількох симульованих варіантів сторінки ("рук"), кожен з яких має приховану справжню конверсію, якої алгоритм ніколи не бачить. Кожного раунду вона обчислює фактичний рахунок UCB1 — середня спостережувана винагорода + √(2·ln(N)/ni) — для кожної руки та тягне ту, що має найвищий рахунок, після чого спостерігає справжній результат конверсії з розподілу Бернуллі, взятий з прихованої частоти цієї руки. Ідентична рівномірно-випадкова базова лінія 50/50 запускається на тих самих базових вибірках конверсії кожного раунду, тож дві стратегії чесно порівнюються за накопиченими конверсіями та накопиченим жалем.
🔬 Що показано
3D-вежі для кожного варіанта: золоті вежі показують кількість тяжінь UCB1 і світяться яскравіше зі зростанням оціненої частоти конверсії; приглушені сірі вежі позаду показують кількість тяжінь наївної рівномірної базової лінії на тому самому симульованому трафіку. Тонке біле кільце позначає справжню (прихованню від алгоритму) частоту конверсії кожного варіанта. Під вежами живий 2D-графік відстежує накопичені конверсії та накопичений жаль обох стратегій у часі.
🎮 Як користуватися
Встановіть кількість варіантів (2–6) і перетягуйте повзунок справжньої частоти конверсії кожного варіанта, щоб визначити приховане середовище. Налаштуйте раунди за тік, щоб пришвидшити чи сповільнити симуляцію, перетягуйте по 3D-вежах, щоб обертати камеру, та використовуйте «Скинути» для нового запуску. Спостерігайте, як вежа UCB1 для найкращого варіанта стає найвищою, перенаправляючи трафік від слабших варіантів.
💡 Чи знали ви?
Накопичений жаль UCB1 доведено обмежений O(ln N) — він зростає дедалі повільніше з накопиченням раундів. Натомість фіксований розподіл 50/50 має жаль, що зростає лінійно назавжди, бо ніколи не припиняє надсилати трафік до програшного варіанта. Ця гарантія логарифмічного жалю — причина, чому бандити у стилі UCB використовуються в реальних промислових A/B тестах і системах показу реклами замість статичних розподілів.
Часті запитання
Що таке проблема багарукого бандита?
Багарукий бандит — це задача прийняття рішень, у якій агент багаторазово обирає серед кількох варіантів («рук») з невідомими ймовірностями винагороди, прагнучи максимізувати накопичену винагороду з часом. Назва походить від ряду ігрових автоматів («однорукі бандити»), де гравець має вирішити, який автомат продовжувати грати, не знаючи справжньої частоти виплат кожного. У A/B тестуванні кожен варіант сторінки — це рука, а «тяжіння» — це показ цього варіанта одному відвідувачу та спостереження, чи відбудеться конверсія.
Що таке UCB1 і як працює формула?
UCB1 (верхня довірча межа) — це алгоритм, який на кожному раунді обирає руку, що максимізує середня_винагорода + √(2·ln(N)/n_i), де середня_винагорода — спостережувана частота конверсії руки дотепер, N — загальна кількість зіграних раундів, а n_i — скільки разів саме цю руку було потягнуто. Перший доданок винагороджує руки, що добре показали себе (використання); другий доданок — це довірчий бонус, що зменшується зі збільшенням кількості тяжінь руки, але повільно зростає із загальною кількістю раундів N, тож недостатньо випробувані руки продовжують вибиратися (дослідження), доки дані не виключать їх. Це дає UCB1 математично доведену межу накопиченого жалю, що зростає лише логарифмічно з кількістю раундів.
Чим UCB1 відрізняється від фіксованого розподілу A/B тесту 50/50?
Традиційний A/B тест із фіксованим розподілом продовжує надсилати постійну частку трафіку до кожного варіанта протягом усього тесту, навіть коли статистично стає ясно, що один варіант гірший. UCB1 натомість безперервно адаптує розподіл трафіку: він все ще досліджує кожну руку на початку, але з накопиченням доказів переміщує дедалі більшу частку трафіку до кращого варіанта, зменшуючи кількість відвідувачів, яким показано програшний варіант. Це знижує накопичений жаль — загальні втрачені конверсії через невибір найкращої руки — порівняно з наївним рівномірним розподілом, оціненим на тих самих базових вибірках конверсії.
Що означає «накопичений жаль» і чому це важливо?
Накопичений жаль — це поточна сума за всі раунди дотепер розриву між справжньою частотою конверсії найкращої можливої руки та справжньою частотою конверсії тієї руки, що була фактично обрана кожного раунду. Він вимірює, скільки конверсій було втрачено через невибір оптимального варіанта щоразу. Жаль хорошого алгоритму бандита зростає логарифмічно з кількістю раундів (майже плоско після достатньої кількості даних), тоді як жаль наївної рівномірно-випадкової базової лінії зростає лінійно назавжди, оскільки вона продовжує надсилати фіксовану частку трафіку до гірших варіантів безкінечно.
Чому UCB1 тягне кожну руку принаймні раз, перш ніж використовувати формулу?
Довірчий бонус рахунку UCB1, √(2·ln(N)/n_i), не визначений (ділення на нуль) для будь-якої руки з нульовою кількістю тяжінь, і інакше був би нескінченно оптимістичним щодо рук без даних. Тому стандартна реалізація вважає рахунок невипробуваної руки нескінченним, гарантуючи, що кожна рука отримує початкове дослідницьке тяжіння, перш ніж алгоритм почне довіряти спостереженим середнім. Цей принцип «оптимізму перед обличчям невизначеності» дає UCB1 доведену гарантію логарифмічного жалю.