Question

Je dois trier une base de produits sur les cotes de l'utilisateur.

Supposons que nous ayons 3 produits {a, b, c} et nous avons le dos d'alimentation de l'utilisateur sur ces produits. Il est pas important qui nous donne l'utilisateur feed-back (cette question est sur le filtrage corrélative si vous êtes familier avec elle - les intérêts des utilisateurs est pas le cas ici)

Chacune de ces lignes ci-dessous sont des utilisateurs alimentent le dos quand ils ont essayé de comparer les 3 produits:

a 150 points - b 0 points (cet utilisateur vient de nous dire ce qu'il pense de 2 produits a et b et par rapport a et b il cependant que s'il donne un point 150 alors b vaut 0 points)

a 150 points - 20 points c

c 200 points - un 10 points (malgré le précédent cet utilisateur pense que c est mieux que a)

a 200 points - b - c 40 points 100 points

a 150 points - 50 points b

a 150 points - 20 points b

(Ces évaluations ne sont qu'un échantillon et le nombre du monde réel des produits et des évaluations sont beaucoup plus que cela)

Maintenant, je besoin d'un algorithme pour trouver le classement de produits basé sur les votes des utilisateurs. À mon point de vue, la meilleure façon de décrire ce problème avec un graphique de corrélation et connecter tous les produits à l'autre.

Toute aide ou des conseils est appréciée.

/ ********************************************** ******************************** / **

vous ne pouvez pas ajouter des points et calculer la moyenne des points de produit Parce qu'il est important de voir comment il a obtenu ses points de supposer un a obtenu 800 points contre b - puis c obtenir 10 points contre un comme ceci:

a 200 - b 0

a 200 - b 0

a 200 - b 0

a 200 - b 0

c 10 - 0 (cela signifie que c est meilleure que a)

donc certainement un est meilleur que B mais avec un petit 10 points c a obtenu un meilleur classement d'un

/ ********************************************** ****************************** /

Était-ce utile?

La solution

Jetez un oeil à http://msdn.microsoft .com / fr-fr / magazine / dd148646.aspx? pr = blog. Il décrit cinq systèmes « classement ». Le contexte est au sujet des tests mais je pense que les concepts sous-jacents appliquent assez bien à votre domaine de problème.

Autres conseils

Quelle étrange façon de classement. Je suggère que pour chaque utilisateur, vous devez créer un classement pour tous les produits qu'ils ont classé au premier rang. Par exemple, si un utilisateur fait ceci:

a 200 - b 0
c 10 - a 0

Ensuite, vous pouvez convertir en un ensemble complet pour l'utilisateur comme ceci:

c 210 - a 200 - b 0

Ensuite, vous devez normaliser (en supposant que tous les utilisateurs ont le même poids):

c 100 - a (200/210) - b 0

Ensuite, si les utilisateurs ont un poids différent (en d'autres termes, un utilisateur a plus de crédibilité qu'une autre), vous pouvez le faire (en supposant que cet utilisateur a la crédibilité 5):

c 100*5 - a (200/210)*5 - b 0

Une fois que vous avez fait cela, vous pourriez résumer tous les résultats pour chaque produit sur tous les utilisateurs.

Sons assez compliqué. La façon dont je l'aborde est reevaulate périodiquement le classement et stocker l'ordre de tri à la base de données. D'après ce que vous avez décrit cela ressemble à un système algébrique gigantesque. Je ne sais pas si cela peut être résolu dans le DB, mais même si elle pouvait, il pourrait prendre O (n ^ Bordel) longue à résoudre, donc je pense que la mise en cache sera votre ami ici.

En ce qui concerne la conclusion effective de l'ordre de tri, je construirais une liste d'équations, comme:

a = b + 400 c = a + 10

Et une fois que vous avez toute la construction de la liste, résoudre l'ensemble et mettre en cache les classements

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