价格过滤分组算法

时间:2010-07-21 22:30:18

标签: php algorithm statistics e-commerce

我正在创建一个电子商务网站,我无法开发一个好的算法来将从数据库中提取的产品分类到适当的中间组。我试过简单地将最高价格划分为4,然后将每个组别除以此。我也尝试了基于均值的标准偏差。两者都可能产生没有产品落入的价格范围,这不是一个有用的过滤选项。

我也尝试过四分之一的产品,但我的问题是价格从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;
    }
}

4 个答案:

答案 0 :(得分:3)

这是一个想法,遵循我的评论思路:

我假设您有一组产品,每个产品都标有价格和销量估算值(占总销售额的百分比)。首先,按价格对所有产品进行分类。接下来,开始拆分:遍历有序列表,并累计销售量。每次达到约25%,切割到那里。如果这样做3次,将导致4个子集具有不相交的价格范围和相似的销售量。

答案 1 :(得分:3)

这是一个想法:基本上你会把价格分成10个桶,每个价格作为数组中的关键,价值是给定价格点的产品数量:

public function priceBuckets($prices)
{    
    sort($prices);

    $buckets = array(array());
    $a = 0;

    $c = count($prices);
    for($i = 0; $i !== $c; ++$i) {
        if(count($buckets[$a]) === 10) {
            ++$a;
            $buckets[$a] = array();
        }

        if(isset($buckets[$a][$prices[$i]])) {
            ++$buckets[$a][$prices[$i]];
        } else if(isset($buckets[$a - 1][$prices[$i]])) {
            ++$buckets[$a - 1][$prices[$i]];
        } else {
            $buckets[$a][$prices[$i]] = 1;
        }
    }

    return $buckets;
}

//TEST CODE
$prices = array();

for($i = 0; $i !== 50; ++$i) {
    $prices[] = rand(1, 100);
}
var_dump(priceBuckets($prices));

从结果中,您可以使用reset和end来获取每个桶的最小值/最大值

有点蛮力,但可能有用......

答案 2 :(得分:0)

您到底想要什么作为最终结果(您能给我们一个示例分组)吗?如果您的唯一目标是让所有群体拥有大量足够重要的产品,那么,即使您提出了适用于您当前数据集的完美算法,但这并不意味着它将适用于明天的数据集。根据您需要的组的数量,我将简单地制作符合您需求的任意组,而不是使用算法。防爆。 ($ 1 - $ 25,$ 25-100,$ 100 +)。从消费者的角度来看,我的思想自然会将产品分为3种不同的价格类别(便宜,中档和昂贵)。

答案 3 :(得分:0)

我认为你的想法太多了。

如果你了解你的产品,并且你喜欢细粒度的结果,我只需要硬编码这些价格范围。 如果您认为1到10美元对您销售的产品有意义,请将其放入,您不需要算法。只需进行检查,以便只显示有结果的范围。

如果您不了解您的产品,我会按价格对所有产品进行分类,并将其分为4组相同数量的产品。