Trictrac et systèmes de recommandation

Il y a un gars sur BGG qui s’était amusé à faire ça en se basant sur les notes BGG, mais il a quand même été obligé d’introduire un “facteur de popularité” basé sur le nombre de votes afin d’avoir des résultats pertinents.

Il est assez difficile de faire de l’archéologie dans les forums de BGG, mais si j’ai quelques minutes je vais essayer de retrouver le topic.

En passant, j’avais essayé de le faire il y a quelques années sur les avis de quelques TTciens (avec un algo un peu différent du BGGiste), ça avait donné ça : http://vion.free.fr/toptt_history/pouic_20080612.html

La c’est de décomposition type SVD par gradient stochastique sur les valeurs fournies, du coup le coté “facteur de popularité” apparaît un peu ou seul car les zones peu notées n’ont pas d’importance dans la descente de gradient. C’est une classe d’algo assez différente des elos bayésiens.

Reste le problème des jeux sans avis, la c’est impossible d’être bon (la prédiction sera a peu de choses près la moyenne des avis attribués par le joueur). La seule chose à faire est d’essayer de leur construire un estimateur bricolé ou de les pousser en avant afin qu’ils aient des avis le plus vite possible. Déterminer la quantité optimale de favoritisme à appliquer est une question intéressante du point de vue recherche (qui est liée aux algos de bandits)

J’ai toujours réfléchi au problème sous l’angle du choix social, jamais des statistiques (chacun sa branche ^^). Du coup, j’ai toujours été un peu gêné par le problème des jeux avec peu d’avis, ou plus généralement des “trous” énormes dans les classifications des joueurs (les algos de choix social considèrent généralement un ordre complet)… Ceci dit, je pense être arrivé à un truc sympa avec l’algo, pourtant simpliste, que j’utilisais pour générer le classement que j’ai donné en lien ci-dessus (reprenant le principe du championnat de foot, avec 3 points pour le vainqueur et 1 point en cas d’égalité).

Sur BGG, il utilisait un Ranked Pairs je crois, mais un jeu avec un seul avis positif pouvait potentiellement être propulsé à la première place, d’où l’introduction d’une proportion de “faux votants”. J’ai retrouvé le post : http://boardgamegeek.com/thread/356968/ … ate/page/1

Il faudrait que je le recode dans un langage plus moderne pour voir ce que donnerait le classement quatre ans après…

Ah marrant ce que tu utilises n’est pas vraiment un algo bayésien (en tout cas pas dans le sens ou nous on l’utilise). Je pensais que tu entretenais une distribution de probabilité de la “qualité” de chaque jeu et que tu voyais ensuite chaque avis de joueur comme un match. Après cela devient de l’estimation de paramètres.

Un collègue donne des détails dessus
http://remi.coulom.free.fr/Bayesian-Elo/

Il y a aussi les approches type TrueSkill de Microsoft qui sont une légère variante de ce qui présenté sur le lien précédent (et qui sont utilisées pour déterminer le niveau des joueurs sur le réseau Xbox) .

ps: Supposes tu l’existence d’un ordre total ou au moins une forme de cohérence entre les ordres de chacun des joueurs ?

ps2: En fait qu’un élément peu noté soit propulsé devant c’est parfois souhaitable car permettant de collecter de nouvelles notes plus vite. En plus les algos bayésiens ont tendance à bien faire la chose (ie présenter proche du taux optimal). Par contre la grosse galère c’est quand il y a trop de nouveautés la on est obligé d’en sous sélectionner une partie et de les rendre accessible seulement au fur et à mesure.

edit: j’ai été voir ton lien. L’objectif n’est pas tout à fait le même car ici dans le fond je ne veux pas classer les jeux mais faire des recommandations de jeux ‘à voir’ pour une personne donnée. En particulier cela ne me dérange pas vraiment si un jeu avec pas autant noté que d’autre mais avec une moyenne très haute sort plus souvent. Je compte sur le fait que s’il n’est pas assez bon d’autres notes plus basses vont arriver.

Je n’ai jamais introduit de probabilités dans mes algos. Le principe de base est de faire des matchs en comparant les jeux deux à deux. Je regarde tous les votants qui ont mis une note aux deux jeux, le gagnant est celui pour lequel il y a le plus de votants qui ont mieux noté un jeu que l’autre. Les votants qui n’ont voté que pour un jeu, ou aucun des deux, ou ont mis la même note aux deux sont ignorés. De là, on construit un graphe orienté, auquel on peu appliquer des algorithmes comme Ranked Pairs ou Schulze, qui gèrent quand même assez mal les jeux avec peu de votes (c’est-à-dire finalement, des utilisateurs ayant noté les deux jeux).

Je ne sais pas trop si la méthode que j’ai appliquée (3 points/1 point) a été théorisée, mais je trouve qu’elle donne de bons résultats.

Maintenant, le système de “règle” proposé ci dessus serait applicable à ces techniques et serait plus “fin” que les notes (surtout sur 5). À voir quand même si ça aurait un réel impact avec un grand nombre de votants.

[edit mais faudrait arrêter de se télescoper ^^] Oui effectivement je cherche à établir des classements, pas des recommandations. Pour les recommandations, je partirais sur des algos de classification automatique, mais je ne m’y connais pas du tout.

Oui je vois bien ce que tu fais et comme je le disais pendant que tu écrivais, ce n’est pas tout à fait la même finalité (et du coup les inconvénients ne sont pas tout à fait les mêmes).

Ici pour les personnes ayant peu noté ils recevront une recommandation moyenne très peu personnalisée. On peut espérer que les choses s’améliorent s’ils notent plus de jeux. Ce qui est curieux c’est que je n’ai pas vraiment vu apparaître spontanément de groupes d’utilisateurs (genre ceux allergiques aux dés, aux cubes, aux figs…) mais plutôt une forme de consensus entre des “bons” jeux. Du coup je me disais que les TTciens n’allaient pas mettre une mauvaise note à un jeu qu’ils n’aiment pas trop quand celui-ci est d’un genre qu’ils savent ne pas aimer pas et cela se comprend (mais complique la recommandation personnalisée).

Espinha de Bacalhau dit:Oui mais cela doit être segmenté par genre : jeux d'apero, jeux de gestion, abstrait etc etc tout en étant conscient de la difficulté à dresser une telle typologie et à définir surtout certains jeux qui sont à cheval sur plusieurs catégories.
Mais cela me semble plus pertinent comme approche, que de classer dans l'absolu sa préférence entre Timeline et les échecs !

Je suis totalement convaincu du l'intérêt de permettre plusieurs classement personnels, plutôt qu'un seul.

Mais cette histoire de segmentation me chiffonne. Prise de front, la difficulté est effectivement de définir des catégories, d'y pré-classer les jeux (avec des choix contestables quand on s'écarte des canons d'un genre), de trouver comment gérer les jeux qui doivent apparaître dans plusieurs catégories, etc.

Est-ce qu'on ne pourrait pas plutôt laisser à chacun la possibilité de créer et gérer autant de listes de (bons) jeux qu'il le souhaite, avec les intitulés de son choix, sans rien de prédéfini et sans interdire à un jeu d’apparaître dans plusieurs listes?

Sans même aller très loin dans l'analyse numérique (cf Jeremie et Scand1sk), afficher les intitulés des listes dans lesquelles le jeu apparaît, ça fournirait probablement une base de mots clés.

Je suis d’accord c’est pour cela que j’imaginais la possibilité de créer plusieurs listes sans imposer de sujet particulier.
Juste si l’utilisateur ressent le besoin de mettre certains jeux sur une autre liste (voire avec des doublons) alors il est en train de transmettre une info utile.

Après on pourra essayer de faire des recommandations différentes pour chacune des listes.

Un exemple simple est celui des jeux avec lesquels j’aime jouer avec ma fille. J’ai tendance à leur mettre une bonne note, mais ce n’est pas évidemment pas des jeux que je recherche quand je veux jouer avec mes partenaires habituels. De même, je n’aime en général pas les party games, mais je pense savoir en reconnaitre un “bon”.

J’ai passé quelques jours à m’amuser à coder les algos (et à réunir les différentes éditions d’un même jeu dans la base TT, un travail de fourmi, souvent arbitraire, qui est loin d’être achevé). Je n’ai pris en compte que les jeux ayant au moins 25 avis, et n’étant pas des extensions. Tous les votants ayant donné plus d’un avis parmi les jeux concernés sont pris en compte.

Avec la méthode de Schulze, la très forte « abstention » donne des résultats plutôt suprenants, avec des jeux dans le top 10 qu’on n’a pas l’habitude de voir, et un Puerto Rico relégué à la 87e place. En fait, la méthode a tendance à mettre en avant les jeux qui ont peu de détracteurs, et a le défaut d’ignorer les égalités. Le résultat est ici : http://vion.free.fr/toptt_history/schulze20130103.html

Attention à la lecture, il y a énormément d’égalités (huit jeux en 4e place par exemple). Lors des confrontations, j’ai rajouté une demi-voix aux jeux ayant plus d’avis que les autres pour casser certaines égalités, mais ça ne change pas grand chose.

Le premier jeu du top est « Qui l’a vu », le Kinderspiel des Jahres 2008… Pour expliquer pourquoi Qui l’a vu est devant, par exemple, Puerto Rico, l’algorithme recherche des « chemins » de jeux allant de l’un à l’autre.

Ici, 7 personnes ont mis une meilleure note à Qui l’a vu qu’à Mr Jack, et 15 personnes ont préféré Mr Jack à Puerto Rico. Qui l’a vu marque donc 7 points contre PR.

Dans l’autre sens, le meilleur chemin que l’on puisse trouver n’a qu’une valeur de 3 (par exemple, 139 avis pour PR contre Citadelles, 148 avis pour Citadelles contre LGDT, et 3 avis pour LGDT contre Qui l’a vu).

7 contre 3, Qui l’a vu est donc devant PR au classement.

Qui l’a vu est premier parce qu’il parvient ainsi à battre tous les autres jeux… Grâce aussi à son faible nombre d’avis !


Une autre méthode, celle de Borda, compte simplement combien de jeux chaque jeu bat « directement » (sans chercher à faire de chemins). Elle donne des résultats plus « traditionnels », avec Caylus, Puerto Rico et Agricola en tête. Les jeux ayant beaucoup d’avis ayant alors beaucoup de chances de battre de nombreux autres jeux. La méthode a aussi tendance à donner plus de poids aux votants ayant donné beaucoup d’avis (ce qui n’est peut-être pas plus mal ?). Le résultat : http://vion.free.fr/toptt_history/borda20130103.html

Marrant. Pour faire du classement pur et non de la recommandation, j’aurais eu tendance à utiliser un estimateur bayésien comme IMDB :

http://www.imdb.fr/chart/top

(la formule est en bas de la page).

Il est pas bon ce classement il n’y a pas ICE 3 dans le top 10 . :pouicgun:

Jeremie dit:Marrant. Pour faire du classement pur et non de la recommandation, j'aurais eu tendance à utiliser un estimateur bayésien comme IMDB :
http://www.imdb.fr/chart/top
(la formule est en bas de la page).


C'est aussi la formule utilisée sur BGG, je cherchais à faire un truc plus original, en rebondissant au passage sur l'idée de partir sur des échelles que sur des notes. Enfin, la version bayésienne est disponible ici : http://vion.free.fr/toptt_history/bayes20130103.html

(Toujours avec un minimum de 25 avis).

Le classement donné par l’algo de Schulze est vraiment étrange.
Il y a des vieilleries qui ressortent on ne sait pas comment : Hybrid, Zargos, Fief 2, etc. :shock:.
Est-ce qu’il faut y voir une tendance individuelle à noter les jeux plus sévèrement avec le temps? (si je comprends bien l’idée générale derrière l’algo).

Une remarque concernant Borda : la fin du classement me semble très pertinente et cohérente. C’est du jeu de société à papa alors que les autres classements ressemblent juste à un stock d’invendus d’une braderie ludique.

J’avais oublié de retirer un filtre qui supprimait les votants ayant posté moins de 10 avis : il n’est pas vraiment utile avec ces méthodes (le premier jeu Witty n’est au mieux que 427e avec la méthode de Bayes, et moins bien classé avec les autres). J’ai mis à jour les classements. En passant, on constate que ça ne change pas énormément les résultats.

Schulze : http://vion.free.fr/toptt_history/schulze20130103.html
Borda : http://vion.free.fr/toptt_history/borda20130103.html
Bayes : http://vion.free.fr/toptt_history/bayes20130103.html

Le classement donné par l’algo de Schulze est vraiment étrange.
Il y a des vieilleries qui ressortent on ne sait pas comment : Hybrid, Zargos, Fief 2, etc. Choqué.
Est-ce qu’il faut y voir une tendance individuelle à noter les jeux plus sévèrement avec le temps? (si je comprends bien l’idée générale derrière l’algo).


Schulze donne des résultats un peu bizarres avec les jeux ayant relativement peu d’avis. Le cas extrême, c’est un jeu qui n’aurait aucun avis. Il se retrouve à égalité avec tous les autres et se retrouverait à la première place. Pour ce genre de cas, j’avais introduit une demi-voix pour les jeux ayant plus d’avis, mais c’est insuffisant. J’ai ajouté le minimum de 25 avis pour figurer dans le classement, mais c’est encore faible. On retrouve la même dérive si on se réfère au classement par moyenne brute.

Maintenant, si tu regardes, par exemple, les avis sur Hybrid, tu te rendras compte qu’il a finalement une grosse majorité de bons avis, ce qui explique son bon classement, même si sa moyenne brute n’est pas faramineuse (4/5 quand même !). Il n’y a que 6 votants qui ont mis une meilleure note à PR qu’à Hybrid (aucun meilleur chemin n’est trouvé) ; dans l’autre sens l’algorithme trouve un chemin tortueux de valeur 11 qui passe par Elixir, Timeline, Olympos, Glory to Rome et Tigre & Euphrate.

Ce qu’il faut voir aussi, c’est que ce n’est pas les mêmes joueurs qui vont jouer à PR qu’à Hybrid. Bien que le public d’Hybrid soit plus restreint sur TT que celui de PR, l’intérêt de la méthode Schulze (à mon avis), c’est de faire « cohabiter » les classements des différents publics. Ainsi, on retrouve plus de jeux pour enfants, de wargames, d’ameritrash ou de jeu abstraits dans le top Schulze que dans les autres.

Je pense aussi que beaucoup de votants vont noter les jeux « dans l’absolu » et pas les uns par rapport aux autres. Est-ce que les 6 TTciens qui ont donné une meilleure note au Monopoly qu’à 6 Qui Prend préfèreraient vraiment jouer au Monopoly qu’au 6 Qui Prend ? Pourtant, ces 6 votes sont cruciaux pour départager un certain nombre de confrontations avec la méthode…

J’ai mis en ligne une nouvelle version des classements avec un petit texte introductif supplémentaire :
http://vion.free.fr/toptt_history/Bayes20130103.html
http://vion.free.fr/toptt_history/Borda20130103.html
http://vion.free.fr/toptt_history/Schulze20130103.html

Oui le faire sur des classements est intéressant.
Le problème c'est que les humains ont du mal à classer au dela d'une centaine d'item. Par contre j'imagine assez bien un système de "matchs" bien choisis entre deux jeux ou l'utilisateur donne sa préférence (ou un je ne connais pas celui la) et ensuite on pourrait faire la reco


Tu veux parler de la Tric Trac Cup ? :mrgreen:

Je trouve ce sujet très intéressant, mais je ne l’ai lu qu’en diagonale.

L’idée de Fred Henry d’un classement “Timeline” est originale et à creuser, mais il me semble que cela pose un problème lié à l’effet nouveauté.

Un classement individuel, quel qu’il soit, est un instantané, susceptible d’évoluer dans le temps. Un tel classement est pour la plupart des joueurs influencé par l’effet nouveauté : on a tendance à surnoter un jeu récent qui nous plait, ou tout du moins à avoir plus envie d’y jouer qu’un jeu plus ancien dont on à fait de nombreuses parties.
Et comme on classe souvent selon ce critère d’envie…

Au contraire, je pense que les joueurs ont tendance -là encore il s’agit d’une tendance générale - à donner un avis sur un jeu après un temps relativement uniforme, propre à chacun.
Certains vont noter les jeux après 1 partie, d’autre après 10 parties ou un an, etc.
Et donc cette note est beaucoup plus indépendante de l’effet nouveauté que le classement évoqué précédemment.

Exemple :
j’ai adoré Caylus, je l’ai noté 5/5 après 1 partie. Note que je ne changerais pas aujourd’hui.
Je viens d’acquérir Myrmes, que j’adore après 2 parties. Je vais le noter 5/5.
Si je devais les classer, lequel mettrais-je devant l’autre ? Sans doute Myrmes, car mon envie d’y jouer est plus forte, il m’attire plus aujourd’hui.
Mais dans 5 ou 10 ans, quand ce facteur nouveauté aura disparu ? Je n’en sais fichtre rien…

Si l’on veut essayer (c’est illusoire) d’obtenir un classement en “valeur absolue” des jeux, il faut essayer d’éviter cette prime à la nouveauté.

Pourquoi pas ne pas :
- prendre toute les notes d’un testeur
- faire leur moyenne
o si la moyenne dépasse 3, baisser ses notes pour avoir une moyenne à 3
o si la moyenne est en dessous de 3, monter ses notes pour avoir une moyenne à 3
- passer au prochain testeur

Et ce, chaque semaine.

Cela présenterait le mérite de :
- défoncer tout les faux comptes qui cassent les jeux des autres.
- avoir une idée de tout les faux comptes qui cassent les jeux des autres en notant mieux les leurs.
- normer les avis sur une moyenne arbitraire (qui est la même pour tous) afin de comparer vieux jeux et nouveau jeux. Si la moyenne d’un jeu dépasse 3, l’utilisateur sait qu’il est assez bon. Sinon, il l’est moins.

Voila voila

Ca ne marcherait pas.
Un faux utilisateur qui veut doper la note d’un jeu lui collera 5, puis ira prendre une fiche au hasard et lui collera 1 (ou inversement si il veut casser un jeu).
Ca fait 3 de moyenne sur les deux jeux, ces fausses notes ne seront pas affectées par ton système.

Mais surtout, ce n’est pas du tout de ça qu’il s’agit ici. Il ne s’agit pas de mettre au point des mesures anti-faux comptes, mais de discuter de moyens de classer légitiment ses jeux au sein de sa propre ludothèque et plus globalement de générer des classements sur l’ensemble de la base.