Question

Au lieu d'éléments de notation avec les notes de 1 à 10, je voudrais avoir 1 vs 1 « combats ». Deux éléments sont affichés à côté de l'autre et vous choisir celui que vous aimez plus. Sur la base de ces résultats de « combat », un algorithme doit calculer les cotes pour chaque élément.

Vous pouvez voir cette approche sur Flickchart.com où les films sont évalués en utilisant cette approche.

Il ressemble à ceci:

Comme vous pouvez le voir, les éléments sont poussés vers le haut s'ils gagnent un « combat ». Le classement est toujours en évolution en fonction des résultats « de combat ». Mais cela ne peut pas être uniquement basée sur la citation de gain (ici 54%), car il est plus difficile de gagner contre « Titanic » que contre « 25 heures » environ.

Il y a quelques choses qui sont tout à fait clair pour moi: - Comment les évaluations calculées? Comment décidez-vous quel film est la première place dans le classement? Vous devez considérer combien de fois un des éléments gagne et la qualité sont les objets battus. - Comment choisir les éléments qui ont un « combat »

Bien sûr, vous ne pouvez pas me dire comment Flickchart fait exactement tout cela. Mais vous pouvez peut-être me dire comment cela pourrait se faire. Merci d'avance!

Était-ce utile?

La solution

Cela pourrait ne pas être exactement ce que flickchart fait, mais vous pouvez utiliser une variante du ELO algorithme utilisé dans les échecs (et autres sports), puisque ceux-ci sont essentiellement combat / jeux qu'ils gagnant / perdant.

En fait, tous les films commencer avec 0 victoires / défaites et chaque fois qu'ils obtiennent une victoire ils obtiennent un certain nombre de points. Vous avez généralement une moyenne d'environ 20 (mais un nombre suffit) et de gagner contre un film avec la même note que vous donnera exactement que 20. Gagner contre un mauvais film sera peut-être donner environ 10 points, tout en gagnant contre un meilleur film pourrait vous donner 30 points. Dans l'autre sens, perdant face à un bon film que vous perdez seulement 10 points, mais si vous perdez à un mauvais film, vous perdez 30 points.

Les détails de l'algorithme se trouve dans le lien wikipedia.

Autres conseils

  

Comment les évaluations calculées? Comment décidez-vous quel film est la première place dans le classement? Vous devez considérer la façon dont un des éléments gagne souvent et la qualité sont les éléments battus.

Qu'est-ce que vous voulez est une note pondérée, appelée aussi une estimation bayésienne.

Je pense que Top 250 films de IMDB est un meilleur point de départ pour faire un site web classement. Certains films ont 300,000+ votes tandis que d'autres autres ont moins de 50 000. IMDB utilise une estimation bayésienne pour les films de rang contre un autre sans pondération injustement les films populaires. L'algorithme est donné en bas de la page:

  

weighted rating (WR) = (v ÷ (v+m)) × R + (m ÷ (v+m)) × C où:

     
      
  • R = moyenne pour le film (moyenne) =   (Note)
  •   
  • v = nombre de voix pour la   film = (votes)
  •   
  • m = votes minimum   doivent être énumérés dans le Top 250   (Actuellement 3000)
  •   
  • C = le vote moyen   dans l'ensemble du rapport (actuellement   6.9)
  •   
     

pour le Top 250, seuls les votes de   les électeurs réguliers sont considérés.

Je ne sais pas comment IMDB a choisi 3000 comme leur vote minimum. Ils auraient pu choisir 1000 ou 10000, et la liste aurait été plus ou moins la même chose. Peut-être qu'ils utilisent « nombre moyen de votes après 6 semaines dans le box-office » ou peut-être qu'ils utilisent tâtonnement.

Dans tous les cas, il n'a pas vraiment d'importance. La formule est à peu près au-dessus de la norme pour normalisant votes sur les sites Web de classement, et je suis presque certain Flickrchart utilise quelque chose de semblable en arrière-plan.

La formule fonctionne si bien parce qu'il « tire » note vers la moyenne, donc notes dessus de la moyenne sont légèrement diminué, les notes en dessous de la moyenne sont légèrement augmenté. Cependant , la force de la traction est inversement proportionnelle au nombre de voix a un film. Ainsi, les films avec peu de voix sont tirés de façon plus agressive vers la moyenne que les films avec beaucoup de votes. Voici deux points de données pour démontrer la propriété:

Rank  Movie            Votes            Avg Rating        Weighted Rating
----  -----            -----            ----------        ---------------
219   La Strada        15,000+          8.2               8.0
221   Pirates of the   210,000+         8.0               8.0
      Caribbean 2

sont tirés les cotes des deux films vers le bas, mais la traction sur La Strada est plus spectaculaire car il a moins de voix et est donc pas aussi représentatif que les évaluations pour potc.


Pour votre cas, vous avez deux éléments dans un « combat ». Vous devriez probablement concevoir votre table comme suit:

Items
-----
ItemID (pk)
FightsWon (int)
FightsEngaged (int)

La note moyenne est FightsWon / FightsEngaged. La note pondérée est calculée en utilisant la formule ci-dessus.

Lorsqu'un utilisateur choisit un gagnant dans un combat, augmenter le champ de l'élément gagnant FightsWon par 1, augmenter à la fois les éléments champ FightsEngaged par 1.

Hope this helps! - Juliette

J'ai le problème caressaient de classement des articles par comparaison sage paire pendant un certain temps moi-même, et je voulais prendre le temps de décrire les idées que je suis venu avec jusqu'à présent.

Pour l'instant, je suis simplement le tri par <fights won> / <total fights>, le plus élevé. Cela fonctionne très bien si vous êtes le seul vote, ou s'il y a beaucoup de gens qui votent. Dans le cas contraire, il peut rapidement devenir inexact.

Un problème ici est comment choisir les deux articles devraient combattre. Une chose qui ne semble bien fonctionner (subjectivement) est de laisser l'élément qui a le moins de combats à ce jour, la lutte contre un élément aléatoire. Cela conduit à un nombre relativement uniforme de combats pour les articles (-> précision), au prix d'être peut-être ennuyeux pour l'électeur (s). Souvent, ils compareront le plus récent élément contre quelque chose d'autre, ce qui est un peu ennuyeux. Pour remédier à cela, vous pouvez choisir le n éléments avec le plus bas combat-comte et a choisi au hasard un de ceux que le premier concurrent.

Vous avez mentionné que vous voulez faire des victoires contre des adversaires forts comptent plus que contre les faibles. Comme mentionné dans d'autres postes ci-dessus, les systèmes de notation utilisés pour les échecs et similaires (Elo, Glicko) peuvent travailler. Personnellement, j'aimerais utiliser le TrueSkill de Microsoft, comme il semble être le plus précis et fournit également un bon moyen de prendre deux points à fosse les uns contre les autres - ceux qui ont le plus haut tirage probabilité calculé par TrueSkill. Mais hélas, ma compréhension de mathématiques ne sont pas assez bon pour vraiment comprendre et mettre en œuvre les détails du système, et il peut être soumis à des droits de licence de toute façon ...

choix collectif: systèmes de classement compétitifs a une belle vue d'ensemble de quelques différents systèmes de notation si vous avez besoin plus d'informations / inspiration.

autres que les systèmes de notation, vous pouvez également essayer différents systèmes d'échelle simples. Un exemple:

  1. Randomiser la liste des articles, ils sont classés de 1 à n
  2. Choisissez deux points à se battre au hasard et laissez-les
  3. Si le gagnant est classé au-dessus du perdant: Ne rien faire
  4. Si le perdant est classé au-dessus du gagnant:
    • Si le perdant est directement au-dessus du gagnant: les échanger
    • Sinon:. Déplacez le gagnant l'échelle x % vers le perdant de la lutte
  5. Aller à 2

Ceci est relativement instable au début, mais devrait améliorer au fil du temps. Il ne cesse de fluctuer cependant.

L'espoir que je pourrais aider au moins un peu.

En ce qui concerne flickchart, je joue avec elle un peu, et je pense que le système de notation est assez peu sophistiquée. En pseudo-code, je suppose qu'il ressemble à ceci:

if rank(loser) == null and rank(winner) == null
    insert loser at position estimated from global rank
    insert winner at position estimated from global rank
else if rank(winner) == null or rank(winner) < rank(loser)
    then advance winner to loser's position and demote loser and all following by 1

Pourquoi est-ce que je pense que cela? Tout d'abord, je suis tout à fait convaincu que leurs prieurs bayésienne ne sont pas basées sur une exploitation minière minutieuse de mes choix précédents. Ils semblent avoir aucun moyen de deviner que parce que j'aime Retour du Jedi que j'aime The Empire Strikes Back. En fait, ils ne peuvent pas comprendre que, parce que J'ai vu Home Alone 2 que je l'ai vu Home Alone 1. Après des centaines d'évaluations, le choix est venu pas.

Deuxièmement, si vous regardez le code ci-dessus, vous trouverez peut-être un petit bug, que vous aurez certainement remarqué sur le site. Vous remarquerez peut-être que parfois vous faire un choix et le gagnant diapositive par un . Cela semble se produire que lorsque le perdant n'a pas été précédemment ajouté. Je pense que ce qui se passe est que le perdant est ajouté plus élevé que le gagnant.

En dehors de cela, vous remarquerez que les classements ne changent pas du tout, sauf un film classé inférieur bat un film mieux classé directement . Je ne pense pas que les scores réels sont conservés:. Le site semble être tout à fait à l'exception du sans mémoire rang ordinal de chaque film et votre note la plus récente

Ou vous pouvez utiliser une variante de PageRank voir prof. Description cool Wilf .

Après avoir pensé les choses à travers, le meilleur solution pour ce classement du film est le suivant.

Données requises:

  • Le nombre de voix prises sur chaque paire de films.
    • Et aussi une version triée de ces données groupées comme dans une sorte radix
  • Combien de fois chaque film a été voté dans chaque paire de films

Données facultatives:

  • Combien de fois chaque film a été impliqué dans un vote pour chaque utilisateur

Comment sélectionner un vote pour un utilisateur:

  • Choisissez une sélection de vote de la liste triée dans le groupe le plus bas utilisé radix (au hasard)
  • En option:. Utiliser les statistiques de vote personnelles de l'utilisateur pour filtrer les films qu'ils ont été invités à voter trop de fois, se déplaçant éventuellement sur des seaux de Radix plus s'il n'y a rien de convenable

Comment calculer le score de classement pour un film:

  • Démarrer le score à 0
  • Passez par l'autre film dans le système
    • Ajouter voteswon / votestaken contre ce film au score
      • Si aucun vote n'a été prise entre ces deux films, ajouter 0,5 au lieu (Ceci est bien sûr que vous voulez que les nouveaux films en supposant pour commencer en moyenne dans le classement)

Remarque:. Le truc en option est juste là pour arrêter l'utilisateur s'ennuyer, mais peut être utile pour d'autres statistiques aussi, surtout si vous incluez combien de fois ils ont voté pour ce film sur une autre

Faire en sorte que les films nouvellement ajoutés ont des statistiques sur les ASAP être cumulées et réparti de façon homogène dans tous les votes des films existants est essentielle pour maintenir les statistiques correctes pour le reste des films. Il peut être utile d'étaler l'entrée d'un tas de nouveaux films au système pour éviter temporairement de problèmes dans le classement (mais pas immédiate ni sévère).

=== C'EST LA RÉPONSE ORIGINAL ===

Le problème est en fait très facile. Je suppose ici que vous voulez commander par préférence à voter pour le film à savoir le # 1 film classé est le film qui est le plus susceptible d'être choisi au vote. Si vous faites en sorte que chaque vote, vous choisissez deux films complètement au hasard, vous pouvez calculer cela avec les mathématiques simples.

Tout d'abord chaque sélection de deux films à voter sur est tout aussi probable, si les résultats de chaque vote peuvent simplement être additionnés pour un score (multiplication par 1 permet d'économiser / nC2 sur tout). Et, évidemment, la probabilité d'une personne de voter pour un film spécifique contre un autre film spécifique est juste votesforthisfilm / numberofvotes.

Donc, pour calculer le score pour un film, vous additionnez juste votesforthisfilm / numberofvotes pour chaque film, il peut être en correspondance avec.

Il y a un peu de mal ici si vous ajoutez un nouveau film qui n'a pas eu un grand nombre de voix contre tous les autres films, vous voulez probablement laisser sortir du classement jusqu'à ce qu'un nombre de voix a construit .

=== CE QUI SUIT EST SURTOUT MAL ET EST PRINCIPALEMENT ICI POUR LE CONTEXTE HISTORIQUE ===

Cette méthode de notation est dérivé d'une chaîne de Markov de votre système de vote, en supposant que toutes les questions de vote possibles sont également probables. [Cette première phrase est erronée parce que faire toutes les questions vote doivent être tout aussi probable dans la chaîne de Markov pour obtenir des résultats significatifs] Bien sûr, ce n'est pas le cas, et vous pouvez réellement corriger cela aussi, puisque vous savez quelle est la probabilité chaque question de vote était, il est juste le nombre de voix qui ont été fait sur cette question! [La probabilité d'obtenir une question de vote particulier est en fait hors de propos si cela ne fonctionne pas] De cette façon, en utilisant le même graphique, mais avec les bords pondérés par votes fait ...

probabilité d'obtenir chaque film étant donné qu'il a été inclus dans l'évaluation est la même que la probabilité d'obtenir chaque film et étant au vote divisée par la probabilité qu'il a été inclus dans le vote. Cela vient à sumoverallvotes((votesforthisfilm / numberofvotes) * numberofvotes) / totalnumberofvotes divisé par sumoverallvotes(numberofvotes) / totalnumberofvotes. Avec l'annulation de beaucoup ce comes à votesforthisfilmoverallvotes / numberofvotesinvolvingthisfilm. Ce qui est vraiment simple!

Je crois que ce genre de scénario 1 vs 1 pourrait être un type d'analyse appelée choix discret . Je vois ces assez souvent dans les sondages sur le Web pour la recherche sur le marché. Le client est généralement demandé de choisir entre deux + différents ensembles de caractéristiques qu'ils préféreraient le plus. Malheureusement, il est assez compliqué (pour un gars non statistiques comme moi) donc vous pouvez avoir des difficultés à comprendre.

Je recommande vivement le livre Programmation Intelligence collective pour toutes sortes d'analyse des algorithmes intéressants et des données le long de ces des lignes.

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