2011-02-23 17 views
14

Estoy creando un sitio donde las personas pueden calificar un objeto de su elección mediante la asignación de una calificación de estrellas (por ejemplo, 5 estrellas). Los objetos se organizan en una serie de etiquetas y categorías, por ej. electrónica> tarjetas gráficas> pci express> ... o mantenimiento> contratista> plomero.Algoritmo para los objetos de clasificación basados ​​en la cantidad de votos y la clasificación de 5 estrellas

Si otro usuario busca una categoría o etiqueta específica, las visitas deben devolver el objeto "calificado" más alto en esa categoría. Sin embargo, el sistema sería defectuoso si 1 persona solo vota 5 estrellas por un objeto, mientras que 1000 usuarios votan un promedio de 4.5 estrellas por otro objeto. Obviamente, la lógica dicta que se otorgará credibilidad al objeto calificado de 1000 usuarios en oposición al objeto que es evaluado por 1 usuario a pesar de que tiene un puntaje "más bajo".

Por el contrario, es confiable confiar en un objeto con una calificación de 500 usuarios con una puntuación de 4.8 que en confiar en un objeto con una calificación de 1000 usuarios de 4.5, por ejemplo.

¿Qué algoritmo puede lograr esta ponderación?

+0

Sin tener una buena respuesta para usted, diría que un objeto que fue calificado por 1000 usuarios se ha centrado más en sí mismo que un objeto con solo 500 calificaciones, independientemente de las calificaciones. –

+0

Otra observación: una calificación de 4 estrellas de alguien que califica todo como 3, 4 o 5 vale menos que una calificación de 4 estrellas de alguien que usa todo el rango. –

+0

Relacionados: http://fulmicoton.com/posts/bayesian_rating/ – Palec

Respuesta

10

Una gran respuesta a esta pregunta es aquí: http://www.evanmiller.org/how-not-to-sort-by-average-rating.html

+3

+1 - Nice. Aún así, la fórmula en la página "considera [s] solo calificaciones positivas y negativas (es decir, no una escala de 5 estrellas)". ¿Alguna idea de cómo expandirlo a una escala de calificación de 5 estrellas? – Justin

+0

Mapa 5stars a 1, 1star a 0, interpola el resto. Cambie la fracción observada de la calificación positiva a la calificación promedio. Sin embargo, esto arroja información sobre la distribución de calificaciones, solo usa los números promedio y totales, no estoy seguro de cómo tomar esto en cuenta, pero puede que no sea muy importante. – drewrobb

+0

No creo que el intervalo de Wilson funcione de esa manera. Está diseñado para variables binomiales (es decir, solo dos resultados). Cuando comparas tamaños pequeños, estos detalles realmente importan. – mhum

2

estaría tentado a tener un punto de corte (por ejemplo, cincuenta votos, aunque esto es obviamente tráfico dependiente) ante el cual se tiene en cuenta el artículo como sin ranking. Eso reduciría significativamente la motivación para las clasificaciones de spam/idiota (especialmente si cada voto está vinculado a una cuenta de usuario), y también le brinda un sistema simple, rápido de implementar y razonablemente confiable.

3

Puede usar el Bayesian average al ordenar por recomendación.

+0

¿Podría agregar más información? Parece bastante vago en Wikipedia: "Tenga en cuenta que la información adicional incorporada en el cálculo de la media [puede ser] un valor determinado subjetivamente por la persona que califica el promedio como relevante y al servicio del propósito del cálculo". – Justin

+1

Acepto que está escrito de una manera demasiado general. Probablemente la explicación más simple es que invisiblemente comienzas cada objeto con un montón de valores de calificación en algún lugar alrededor del promedio. No necesita calcular el promedio real, puede simplemente elegirlo arbitrariamente y todavía funciona. – jprete

1
simboid_function(value) = 1/(1+e^(-value)); 

rating = simboid_function(number_of_voters) + simboid_function(average_rating); 
+0

¡Proporcione alguna explicación sobre su solución! :) –

Cuestiones relacionadas