2010-12-02 33 views
8

J'ai un site Web où les utilisateurs peuvent articles "J'aime" et "Je n'aime pas".Algorithmes de notation: comment convertir le nombre &% de "J'aime" & "Je n'aime pas" en un seul score?

Donc pour chaque article, j'ai des données telles que le nombre total de "J'aime" et le% du total des votes qui sont "J'aime".

Je voudrais calculer juste un seul score à montrer aux utilisateurs. Utiliser juste% ne fonctionnerait pas car même si item_A pourrait avoir 90% de "Likes" alors que item_B pourrait avoir 80% de "Likes", item_B devrait toujours être rangé devant item_A si item_B a 10,000 votes totaux alors que item_A seulement a 1 000 votes au total De même, l'utilisation du total "J'aime" ne fonctionnerait pas car si un élément peut avoir un grand nombre de "J'aime", il ne devrait pas être classé très haut si le pourcentage de "J'aime" est faible.

Quel serait un bon algorithme pour créer un seul score sur les données ci-dessus?

Idéalement, le score devrait être «significatif» ou «normalisé» d'une manière ou d'une autre. Par exemple, si je vais à IMDB et que je vois qu'un film a un score de 8/10, je saurai immédiatement que c'est un bon film. D'un autre côté, si je vois un score de 1 370, je ne saurais pas nécessairement si c'est bon ou mauvais.

+1

Un algorithme que vous essayez de décrire est pas si simple à mettre en œuvre :) Dans la première étape du projet, je mettre en œuvre simplement le simple « algorithme de pourcentage » et garder un proche oeil au résultat. Il est assez simple (en connaissant quelques bases de programmation) de développer l'algorithme en conséquence. Je crois qu'il n'y a pas de réponse uniforme à votre question (malheureusement) – LambergaR

+0

http://en.wikipedia.org/wiki/Bayesian_average – user434507

Répondre

8

Il ya quelques très bons articles sur la façon dont Reddit fait ce genre de classement here, et here. En un mot, classer les postes selon l'extrémité inférieure de l'intervalle de confiance de 90% de leurs scores. Les entrées avec moins de votes ont des intervalles de confiance plus grands, et tendent donc à être plus basses que les entrées avec plus de votes mais la même moyenne.

+0

Mais alors le problème est de savoir comment calculer l'intervalle de confiance. Utilisez-vous l'écart-type de l'échantillon, ou l'écart-type de l'ensemble des votes, ou une sorte de moyenne pondérée, ou un nombre arbitraire? Quel est l'intervalle de confiance du score d'un item qui a 10 votes «oui» et 0 votes «non»? – user434507

+0

@ user434507 La formule pour calculer l'intervalle de confiance est dans l'article. –

1

Peut-être pouvez-vous utiliser un pourcentage basé sur stat, mais le colorier en fonction du volume? par exemple. rouge/orange/jaune pour le plus grand nombre d'intérêt, bleu/vert/violet pour le plus faible intérêt, puis permettre à l'utilisateur de trier en fonction du pourcentage ou de la couleur.

8

Bayesian Rating est un ajustement parfait pour ce que vous voulez faire. Il prend en charge le moins de votes mais un problème de notation plus élevé.

La classification bayésienne utilise la moyenne bayésienne. C'est un terme mathématique qui calcule une note d'un article basé sur la "crédibilité" des votes. Plus la certitude basée sur le nombre de votes est grande, plus la notation bayésienne se rapproche de la notation simple, non pondérée. Lorsqu'il y a très peu de votes, la notation bayésienne d'un article sera plus proche de la note moyenne de tous les items.

Utiliser cette équation:

br = ((avg_num_votes * avg_rating) + (this_num_votes * this_rating))/(avg_num_votes + this_num_votes)

Légende:

avg_num_votes: Le nombre moyen de votes de tous les éléments qui ont NUM_VOTES> 0
avg_rating: La note moyenne de chaque élément (encore une fois, de ceux qui ont NUM_VOTES> 0)
this_num_votes: nombre de votes pour ce produit
this_rating: la note de cet article

Note: avg_num_votes est utilisé comme poids "magique" dans cette formule. Plus cette valeur est élevée, plus il faut de voix pour influencer la valeur de la notation bayésienne.

Vous pouvez en lire plus here