我正在创建一家电子商务网站,但是我在开发一个好的算法来将从数据库中提取的产品分成合适的组时遇到了麻烦。我尝试过简单地将最高价分为四份,并以此为基础建立每个组。我还尝试过以平均数为基础的标准偏差。但是这两种方法都可能导致价格范围没有任何产品符合,这不是一个有用的筛选选项。
我还尝试过将产品分成四分位数,但我的问题是价格范围从1美元到4,000美元。4,000美元的产品几乎不销售,也不那么重要,但它们却使我的结果产生偏差。
有什么想法吗?我应该在统计课上更加认真一些...
更新:
最终,我结合了一些方法。我使用了四分位数/桶方法,但通过硬编码某些范围,在其中出现更多的价格组。
我还尝试过将产品分成四分位数,但我的问题是价格范围从1美元到4,000美元。4,000美元的产品几乎不销售,也不那么重要,但它们却使我的结果产生偏差。
有什么想法吗?我应该在统计课上更加认真一些...
更新:
最终,我结合了一些方法。我使用了四分位数/桶方法,但通过硬编码某些范围,在其中出现更多的价格组。
//Price range algorithm
sort($prices);
//Divide the number of prices into four groups
$quartilelength = count($prices)/4;
//Round to the nearest ...
$simplifier = 10;
//Get the total range of the prices
$range = max($prices)-min($prices);
//Assuming we actually are working with multiple prices
if ($range>0 )
{
// If there is a decent spread in price, and there are a decent number of prices, give more price groups
if ($range>20 && count($prices) > 10)
{
$priceranges[0] = floor($prices[floor($quartilelength)]/$simplifier)*$simplifier;
}
// Always grab the median price
$priceranges[1] = floor($prices[floor($quartilelength*2)]/$simplifier)*$simplifier;
// If there is a decent spread in price, and there are a decent number of prices, give more price groups
if ($range>20 && count($this->data->prices) > 10)
{
$priceranges[2] = floor($prices[floor($quartilelength*3)]/$simplifier)*$simplifier;
}
}