2012-09-07 10 views
14

Estoy trabajando en un sitio web que es bastante similar a Yahoo! Respuestas: un usuario puede publicar la pregunta, esperar respuestas de otras personas y elegir la mejor. Con el fin de identificar a los mejores usuarios, existe un sistema de reputación que tiene estas características:¿Buenos sistemas de clasificación/reputación?

  • Uno puede votar con votos a favor o en contra del usuario;
  • Uno puede votar o rechazar una respuesta;
  • Hay una puntuación de "experiencia" para cada tema, que aumenta para cada pregunta respondida.

Ahora, si es posible, me gustaría encontrar un algoritmo para combinar todos estos factores y dar un puntaje de "confiabilidad" para cada respuesta.

Hasta ahora, he intentado hacerlo solo usando productos como Coefficient * (UpVotes/TotalVotes), pero era demasiado lineal. También probé de otras maneras, pero no funcionaron (algoritmo bayesiano). Por el momento, en la versión Alpha, estoy usando Trustability = sqrt(GoodAnswers).

Notas: el algoritmo debe ser individual (no es necesario escanear toda la base de datos para obtener datos como promedios, sumas, etc.) y rápido, si es posible. Voy a implementar esto en PHP-MySQL.

+8

Interesante, dijiste similitud con Yahoo, pregunté por SO :) – mishadoff

+2

También es posible que quieras pensar en la confiabilidad de los usuarios para votar/rechazar votos. Los usuarios que no son de confianza deben contar menos para la confiabilidad de los usuarios que los usuarios confiables. –

+1

Puede asignarle a cada usuario puntos por voto positivo, al igual que en SO. Trabaja para que la reputación sea un valor numérico. –

Respuesta

6

Hay un gran número de enfoques para el sistema de clasificación. Con el uso de la dimensión de tiempo, el número de votos arriba/abajo, la calificación de los votantes ascendentes y de abajo, los éxitos y casi cualquier cosa que te puedas imaginar.

Hay un buen artículo sobre el sistema de clasificación en Reddit.

La solución más sencilla que surgió en mi mente es calcular el peso del voto a favor del usuario individual. Eso significa que un usuario más confiable es más influyente que otro. P.ej. el usuario con rating 100 upvote es definitivamente mejor que downvote de dos usuarios con rating -100. Pero no podemos decir que esto sea mejor que 100 votos negativos de -100 usuarios. Intenta experimentar eso.

+0

Esa es una buena respuesta, definitivamente. No consideraría la dimensión del tiempo, principalmente por un problema de eficiencia: demasiada memoria utilizada. Escojo la segunda idea: no requiere memoria o cálculos, entonces supongo que usaré esto. (Por cierto, es más o menos el pensamiento de otros usuarios, solo mejor explicado). –

1

Puede utilizar la misma idea de la clasificación de la página de google: cuando un usuario lo vota o agrega su pregunta/respuesta como favorita, el aumento de su confiabilidad depende de la confiabilidad de este usuario.

http://en.wikipedia.org/wiki/PageRank

+0

Tenga en cuenta que [PageRank está patentado] (http: // www.google.com/patents/US6285999) de Stanford. – amit

+0

Tenga en cuenta que casi nadie conoce el funcionamiento exacto de PageRank. –

0

utilizar un ELO/Glicko como sistema. Todos los usuarios comienzan con el valor estándar, luego consideran downvoting o upvoting como resultados de una coincidencia uno a uno.

+0

Es un buen comienzo, pero aún requiere un algoritmo: necesitamos saber cuántos puntos agregar/restar en el "partido". –

Cuestiones relacionadas