Алгоритм оптимизации коэффициента конверсии - PullRequest
0 голосов
/ 24 сентября 2018

Я работаю с разделенным A / B-тестированием и использую эту библиотеку: https://github.com/namshi/AB

Каждый тест генерирует начальное число, которое сообщает AB-тестеру, какие параметры использовать.

Допустим, я хочу получить лучший коэффициент конверсии для страницы оформления заказа, используя различные переменные, такие как цвет фона, цвет кнопки оформления заказа, тексты и т. Д.

Какой алгоритм получит начальное число с наилучшим коэффициентом конверсии?

Что я пробовал:

  • Каждое семя имеет "вес", больше вес = наиболее вероятно, выбран
  • При успешном преобразовании семя сохраняется и больше весдобавляется к текущему семени
  • В каждом прогоне добавляется одно случайное семя с 10% от общей массы семян, поэтому 1 из 10 посетителей получает случайное семя, чтобы продолжать тестировать новые варианты

КодЯ уже писал:

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
]

Семена в верхней части списка получают большую часть"конверсии" и большинство оПо весу новые семена добавляются и тестируются, но они не получают никакого веса, так как большее количество конверсий начинает поливать первые семена.Так что в долгосрочной перспективе это не очень хорошее решение.

Как бы вы это сделали?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...