Question

Pour un projet scolaire, nous allons devoir mettre en place un système de classement. Cependant, nous avons pensé qu'une moyenne de rang muet sucerait:. Quelque chose qui un utilisateur a été classé 5 étoiles aurait une meilleure moyenne que quelque chose 188 utilisateurs classé 4 étoiles, et c'est tout simplement stupide

Je me demande si vous avez un exemple d'algorithme de classement « intelligent ». Il n'a besoin que de prendre en compte les classements donnés et le nombre de classements.

Merci!

Était-ce utile?

La solution

Vous pouvez utiliser une méthode inspirée par probabilité bayésienne . L'essentiel de l'approche est d'avoir une croyance initiale sur la vraie note d'un élément, et utiliser les évaluations des utilisateurs de mettre à jour votre croyance.

Cette approche nécessite deux paramètres:

  1. Que pensez-vous est la vraie note « par défaut » d'un élément, si vous avez pas encore d'évaluation du tout pour l'article? Appelez ce numéro R, la "croyance initiale".
  2. Combien donnez-vous à la croyance initiale, par rapport aux évaluations des utilisateurs? Appelez cette W, où la croyance initiale est « valeur » évaluations des utilisateurs de W de cette valeur.

Avec les paramètres R et W, calcul de la nouvelle note est simple: supposons que vous avez W évaluations de valeur R ainsi que toutes les évaluations des utilisateurs, et de calculer la moyenne . Par exemple, si R = 2 et W = 3, on calcule le score final pour les différents scénarios ci-dessous:

  • 100 (utilisateur) notation de 4: (3*2 + 100*4) / (3 + 100) = 3.94
  • 3 notes 5 et 1 note de 4: (3*2 + 3*5 + 1*4) / (3 + 3 + 1) = 3.57
  • 10 évaluations de 4: (3*2 + 10*4) / (3 + 10) = 3.54
  • 1 note 5: (3*2 + 1*5) / (3 + 1) = 2.75
  • Aucun avis utilisateur: (3*2 + 0) / (3 + 0) = 2
  • 1 note de 1: (3*2 + 1*1) / (3 + 1) = 1.75

Ce calcul prend en compte le nombre d'évaluations des utilisateurs et les valeurs de ces évaluations. En conséquence, le score final correspond à peu près à la façon dont on peut attendre heureux d'être sur un élément particulier, compte tenu des données.

Choisir R

Lorsque vous choisissez R, pensez à ce que la valeur que vous seriez en supposant confortable pour un élément sans notes. Est-ce le si vous deviez avoir instantanément article no-note en fait 2,4 sur 5 typique, tout le monde Estimez-? Dans ce cas, R = 2.4 serait un choix raisonnable.

Vous devez pas utiliser la valeur minimale sur l'échelle de notation pour ce paramètre, car un élément noté extrêmement mal par les utilisateurs devraient finir par « pire » qu'un élément par défaut sans notes.

Si vous voulez choisir R à l'aide des données plutôt que de simplement l'intuition, vous pouvez utiliser la méthode suivante:

  • Considérez tous les éléments avec au moins un certain seuil des notations des utilisateurs (donc vous pouvez être sûr que la note moyenne des utilisateurs est assez précise).
  • Pour chaque élément, supposons que son « score réel » est la note moyenne des utilisateurs.
  • Choisissez R être la médiane de ces scores.

Si vous voulez être un peu plus optimiste ou pessimiste sur un élément sans note, vous pouvez choisir R être différent percentile des scores, par exemple le 60e percentile (optimiste) ou 40 e percentile (pessimiste).

Choisir W

Le choix de W devrait dépendre du nombre de votes un élément typique a, et comment évaluations sont-elles cohérentes. W peut être plus élevé si les éléments obtiennent naturellement de nombreuses évaluations et W devrait être plus élevé si vous avez moins confiance dans les notations des utilisateurs (par exemple, si vous avez une activité de spammeur). Notez que W ne doit pas être un entier, et peut être inférieur à 1.

Le choix W est une question plus subjective que le choix R. Cependant, voici quelques lignes directrices:

  • Si un élément typique obtient notes C, alors W ne devrait pas dépasser C, ou bien le score final sera plus dépendante R que sur les évaluations des utilisateurs réels. Au lieu de cela, W devrait être proche d'une fraction de C, peut-être entre C/20 et C/5 (selon le bruit ou les notes « sont » spammy).
  • Si évaluations historiques sont usually cohérente (pour un élément individuel), alors W devrait être relativement faible. D'autre part, si les évaluations pour un élément varient énormément, alors W devrait être relativement importante. Vous pouvez penser que cet algorithme « absorption » de notes W qui sont anormalement haut ou bas, transformant ces évaluations en d'autres plus modérés.
  • Dans l'extrême, la mise en W = 0 équivaut à utiliser que la moyenne des notes des utilisateurs. Réglage W = infinity équivaut à proclamer que chaque élément a une vraie cote de R, quelles que soient les évaluations des utilisateurs. De toute évidence, aucun de ces deux extrêmes sont appropriées.
  • Réglage W trop grand peut avoir pour effet de favoriser un élément avec beaucoup d'évaluations modérément élevé sur un élément avec un peu moins de notes exceptionnellement élevées.

Autres conseils

Puisque vous avez dit que la machine ne bénéficia que le classement et le nombre de classements , je dirais qu'il peut être négligent de tenter une méthode de pondération calculée.

Tout d'abord, il y a deux beaucoup d'inconnues pour confirmer la thèse selon laquelle, dans des circonstances assez une plus grande quantité de notations sont une meilleure indication de la qualité d'un plus petit nombre d'évaluations. Un exemple est combien de temps ont classement été donnés? Y at-il eu égale durée de la collecte (égale attention) accordée aux différents éléments classés avec cette même méthode? D'autres sont, quels marchés ont eu accès à cet élément et, bien sûr, qui a classé spécifiquement?

En second lieu, vous avez dit dans un commentaire ci-dessous la question que ce n'est pas pour la fin de l'avant, mais plutôt « les évaluations sont générées par des machines, des machines », comme une réponse à mon commentaire que « ce n'est pas nécessairement seulement statistique. une personne pourrait envisager 50 évaluations assez, où cela pourrait ne pas être suffisant pour une autre. Et certains profils de noteurs peut sembler plus fiable à une personne que d'une autre. Quand cela est transparent, il permet à l'utilisateur d'effectuer une évaluation plus éclairée « .

Pourquoi serait-ce différent pour les machines? :)

Dans tous les cas, si cela est sur le classement machine à machine, la question a besoin de plus de détails pour que nous puissions comprendre comment les différentes machines pourraient générer et utiliser le classement.

Peut un classement généré par une machine viciée (de manière à suggérer que plus classements peuvent en quelque sorte compenser ces classements « défectueux » Qu'est-ce que ça veut dire - est-ce une erreur de la machine ou parce que l'élément n'a pas? utiliser cette machine particulière, par exemple? Il y a beaucoup de questions ici, nous pourrions d'abord vouloir déballer, y compris si nous avons accès à la façon dont les machines génèrent le classement, à un certain niveau, nous pouvons déjà connaître la signification cet article peut avoir pour cette Machine, ce qui rend le classement agrégé superflu.

Ce que vous pouvez trouver sur différents est la zone morte Plateformes de des évaluations sans assez votations: « Cet article n'a pas assez de votations »
Le problème est que vous ne pouvez pas le faire dans une formule facile de calculer un classement.

Je suggère une cachette de classement avec moins de votations minimum mais stagiaire caclulate une moyenne mobile. Je préfère toujours la moyenne mobile contre moyenne totale car elle préfère des votations de la dernière fois contre très vieux votations qui pourrait être donnée dans des circonstances tout à fait différent.
En outre, vous n'avez pas besoin d'avoir trop ajouter une liste de tous les votes. vous venez de la moyenne et le vote suivant change juste cette valeur calculée.

newAverage = weight * newVoting + (1-weight) * oldAverage

avec un poids d'environ 0,05 pour une préférence des 20 dernières valeurs. (Juste expérimenter avec ce poids)

En outre, je commencerais à ces conditions:
pas votations = valeur moyenne portée (1-5 étoiles => commencer avec 3 étoiles)
la moyenne ne sera pas affiché si moins de 10 votations ont été données.

Une solution simple pourrait être une moyenne pondérée:

somme (votes) / number_of_votes

De cette façon, 3 personnes ayant voté 1 étoile, et une personne votant 5 donnerait une moyenne pondérée (1 + 1 + 1 + 5) / 4 = 2 étoiles.

Simple, efficace, et probablement suffisante pour vos besoins.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top