我希望弄清楚如何使用销售完成数据库来影响拆分测试。
例如,假设我有四种不同的页面布局,每种情况我都有以下统计数据:
然后,最常显示版本1,下一版本版本4是合理的,而版本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