Ценовой алгоритм группировки фильтра

Я создаю сайт электронной коммерции, и я испытываю затруднения при разработке хорошего алгоритма для сортировки продуктов, которые вытягивают от базы данных в промежуточные соответствующие группы. Я попытался просто делить самую высокую цену на 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;
    }
}
8
задан Dave W. 24 July 2010 в 18:53
поделиться

4 ответа

Вот идея: в основном вы сортируете цены в ведра по 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, чтобы получить min/max каждого ведра

Типа грубой силы, но может быть полезно...

3
ответ дан 5 December 2019 в 22:15
поделиться

Вот идея, следующая по линии мысли моего комментария:

Я предполагаю, что у вас есть набор продуктов, каждый из которых помечен ценой и оценкой объема продаж (в процентах от общего объема продаж). Сначала отсортируйте все продукты по их цене. Затем приступите к разбивке: пройдитесь по упорядоченному списку, накапливая объем продаж. Каждый раз, когда вы достигаете примерно 25%, сокращайте его. Если сделать это 3 раза, то в результате получится 4 подмножества с разными диапазонами цен и одинаковым объемом продаж.

3
ответ дан 5 December 2019 в 22:15
поделиться

Что именно вы ищете в качестве конечного результата (не могли бы вы привести нам пример группировки)? Если ваша единственная цель состоит в том, чтобы все группы имели значительное количество достаточно важных продуктов, тогда, даже если вы придумаете идеальный алгоритм, который работает для вашего текущего набора данных, это не означает, что он будет работать с набором данных завтрашнего дня. В зависимости от количества необходимых вам наборов групп, я бы просто создал произвольные группы, соответствующие вашим потребностям, вместо использования алгоритма. Бывший. (1–25 долларов, 25–100 долларов, 100+ долларов США). С точки зрения потребителя, я естественным образом делю продукты на 3 разные ценовые категории (дешевые, средние и дорогие).

0
ответ дан 5 December 2019 в 22:15
поделиться

Думаю, вы слишком много думаете.

Если вы знаете свои продукты и любите подробные результаты, я бы просто жестко закодировал эти ценовые диапазоны. Если вы думаете, что от 1 до 10 долларов имеет смысл для того, что вы продаете, положите их, вам не нужен алгоритм. Просто сделайте проверку, чтобы отображались только диапазоны, по которым есть результаты.

Если вы не знаете свои продукты, я бы просто отсортировал все продукты по цене и разделил их на 4 группы по равному количеству продуктов.

0
ответ дан 5 December 2019 в 22:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: