2012-02-12 82 views
0

我在考慮如何使用銷售完成數據庫來影響分割測試。加權分割測試

例如,假設我有四個不同的頁面佈局和每個我有以下數據:

  • 版本1:6周的銷售,
  • 版本2:1銷售,
  • 第3版: 3個銷售,
  • 版本4:4周的銷售,

然後,它將使意義版1所示經常有,而第4版是下一個,而版本2應該幾乎不顯示。

任何想法,我可以如何實現這一點?

回答

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))]; 
0

比方說,你有以下的重量顯示佈局:

重量
Version 1: 6 
Version 4: 4 
Version 3: 3 
Version 2: 1 

總和爲14,體重6意味着你要展示網頁約6倍的14個請求。

如果您正在使用的數據庫(我假設你做這將是)

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應該排序class Item{ public $weight; ... }名單,因爲它是最有可能的是,第一的Elemen T將使用(第二第二等)和至少迭代將需要

發生了什麼事裏面:

$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