Я работаю с разделенным A / B-тестированием и использую эту библиотеку:
https://github.com/namshi/AB
Каждый тест генерирует начальное число, которое сообщает тестеру AB, какие параметры использовать.
Допустим, я хочу получить лучший коэффициент конверсии для страницы оформления заказа, используя различные переменные, такие как цвет фона, цвет кнопки оформления заказа, тексты и т. Д.
Какой алгоритм получит начальное число с лучшим коэффициентом конверсии?
Что я пробовал:
Код, который я уже написал:
public function conversionTest()
{
// Store successful conversion to $seeds arr
$seeds = [];
// Run 200 "conversions"for ($i = 0; $i < 200; $i++) {
// Initialize seed container
$container = $this->initializeSeedArr($seeds);
// Random seed test
$randomSeed = new Test('random-seed', $container);
// Get seed
$seed = $randomSeed->getVariation();
// Push to $seeds as "successful conversion"$seeds[] = $seed;
}
dd($container);
}
private function initializeSeedArr($container)
{
$arr = [];
$count = count($container);
// Add random seed with 10% "weight" of container count
$arr[$this->randomSeed()] = $this->getSeedWeight($count);
// Add rest of the seeds
for ($i = 0; $i < count($container); $i++) {
// Get current seed
$seed = $container[$i];
// If multiple conversion add more weight to current seed
$arr[$seed] = isset($arr[$seed]) ? $arr[$seed] + 1 : 1;
}
return $arr;
}
private function randomSeed()
{
return mt_rand();
}
private function getSeedWeight($count)
{
$round = (int)round($count * 0.1);
$round = $round < 1 ? 1 : $round;
return $round;
}
Есть проблема с этим подходом, вот как выглядит большинство результатов.
array:21 [▼
1641197740 => 20
1787918404 => 155
2108274654 => 1
667244174 => 7
1296436374 => 3
213433208 => 4
450097167 => 4
465517336 => 1
1071877664 => 1
1430346867 => 6
444753032 => 2
1802187446 => 3
1937663980 => 2
315179639 => 2
2067012650 => 1
717546160 => 1
160677944 => 1
822938190 => 2
553738679 => 1
20707768 => 1
932884407 => 1
]
Семена в верхней части списка получают большую часть «конверсий» и большую часть веса, новые семена добавляются и тестируются, но они не получают никакого веса, так как большее количество конверсий начинает влиять на первые семена. Так что в долгосрочной перспективе это не очень хорошее решение.
Как бы вы это сделали?
Задача ещё не решена.
Других решений пока нет …