Я создаю сайт электронной коммерции, и у меня возникают проблемы с разработкой хорошего алгоритма для сортировки продуктов, извлеченных из базы данных, в соответствующие группы. Я попытался просто разделить самую высокую цену на 4 и основывать каждую группу на этом. Я также попробовал стандартные отклонения, основанные на среднем значении. Оба могут привести к ценовым диапазонам, в которые не попадет ни один продукт, что не является полезным параметром фильтрации.
Я также пытался взять квартили продуктов, но моя проблема в том, что цена колеблется от 1 до 4000 долларов. 4000 долларов почти никогда не продаются, и они гораздо менее важны, но они продолжают искажать мои результаты.
Какие-нибудь мысли? Я должен был уделять больше внимания статистике...
Обновление:
В итоге я немного комбинировал методы. Я использовал метод квартилей/сегментов, но немного усложнил его, жестко задав определенные диапазоны, в которых будет появляться большее количество ценовых групп.
//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;
}
}