使用加权进行拆分测试

时间:2012-02-12 00:27:45

标签: php

我希望弄清楚如何使用销售完成数据库来影响拆分测试。

例如,假设我有四种不同的页面布局,每种情况我都有以下统计数据:

  • 版本1:6销售,
  • 版本2:1促销,
  • 版本3:3销售,
  • 版本4:4销售,

然后,最常显示版本1,下一版本版本4是合理的,而版本2则根本不会显示。

我是如何实现这一目标的?

2 个答案:

答案 0 :(得分:1)

非常简单的解决方案,主要取决于您的数据目前看起来最简单的解决方案。

$sales = array
(
    1 => 6,
    2 => 1,
    3 => 3,
    4 => 4
);

$weight = array();

foreach ($sales AS $layout => $num_sales)
{
    for ($i = 0; $i < $num_sales; $i++)
    {
        $weight[] = $layout;
    }
}

/*
$weight = array
(
    1, 1, 1, 1, 1, 1,
    2,
    3, 3, 3,
    4, 4, 4, 4
);
*/

// Pick a random one to use
$layout_to_use = $weight[rand(0, count($weight))];

答案 1 :(得分:0)

假设您已显示具有以下权重的布局:

Version 1: 6
Version 4: 4
Version 3: 3
Version 2: 1

权重总和为14,权重6表示您希望在14个请求中显示页面大约6次。

如果您使用数据库(我假设您这样做)

SELECT SUM(weights) FROM version;

实现具有不同击中项目概率的随机选择的最简单方法是对权重求和,按权重对项目进行排序,而不是仅仅迭代所有项目直到达到零:

$i = rand( 1, $sum);
foreach( $items as $item){
     $i -= $item->weight;
     if( $i <= 0){
        break;
     }
}
// $item is now your desired $item

$items应该是{strong>排序 class Item{ public $weight; ... }的列表,因为最有可能使用第一个元素(第二个是第二个,依此类推),最少的迭代将是需要

里面发生了什么:

$i = 12;
// first iteration, $weight = 6
$i = 6; // condition didn't match
// second iteration, $weight = 4
$i = 2; // condition didn't match
// third iteration, $weight = 3
$i = -1; // condition matched
// using version 3