Estoy creando un sitio de comercio electrónico y tengo problemas para desarrollar un buen algoritmo para clasificar los productos que se extraen de la base de datos en grupos intermedios. Intenté simplemente dividir el precio más alto en 4 y basarlo en cada grupo. También probé desviaciones estándar basadas en la media. Ambos podrían resultar en rangos de precios en los que no caería ningún producto, lo que no es una opción de filtrado útil.Algoritmo de agrupamiento del filtro de precios
También intenté tomar cuartiles de los productos, pero mi problema es que el precio oscila entre $ 1 artículos y $ 4,000. Los $ 4,000 casi nunca se venden, y son mucho menos importantes, pero siguen sesgando mis resultados.
¿Alguna idea? Debería haber prestado más atención en clase estadísticas ...
Actualización:
Terminé la combinación de métodos un poco. Utilicé el método de cuartil/cubo, pero lo pirateé un poco al codificar ciertos intervalos dentro de los cuales aparecería un mayor número de grupos de precios.
//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;
}
}
Parece que si enriquece la información del producto (que contiene solo los precios) con la información de ventas real, entonces podrá realizar una mejor división (aunque aún no sé cómo) –