Dis monsieur, recommande moi un mouton…

avril, 21, 2008
Sylvain

Recommander des produits à des utilisateurs selon leurs préférences n’est pas a priori quelque chose de très neuf, même les poissonniers font ça pour vendre leurs crevettes (« t’as aimé mon homard, tu aimeras mes crevettes »). Cependant, avec la mode web 2.0 communautaire et tout, la recommandation prend un sens nouveau et s’automatise au même rythme que nous nous faisons de nouveaux amis de plus en plus virtuels.
Plus sérieusement, avec les technos actuelles on peut stocker les avis et préférences de manière totalement massive, on dispose d’une puissance de calcul virtuellement illimitée et en plus les plateformes de commerce électronique et autres sites d’avis (comme Krinein d’ailleurs) permettent d’automatiser la collecte des données. Au final, on dispose de tout ce qu’il faut pour permettre la mise en place de système de préconisation automatique, aussi appelés système de recommandation.

Si on regarde un peu grossièrement comment on fait pour recommander aux gens des produits qui pourraient leur plaire, on s’aperçoit qu’il y a deux manières de faire.

  • On peut tout d’abord proposer à l’utilisateur des produits dont on sait, d’une manière ou d’une autre, qu’ils sont similaires à ceux qu’il a déjà aimé. Cette approche, centrée sur le produit, est appelée « content based approach » dans la littérature.
  • On peut aussi s’intéresser aux produits que des utilisateurs, perçues comme proche de l’utilisateur cible, ont aimé. Puis proposer à l’utilisateur cible ces derniers produits. Cette approche, basé sur la création de groupes de personnes aux goûts similaires, est connue sous le nom de « collaborative filtering ». Cette approche fonctionne sur l’idée que des utilisateurs qui ont été d’accord sur des produits dans le passé ont une grande chance d’être d’avis proche dans le futur.

Il est clair que chaque approche nécessite du boulot : dans la première qu’est ce qu’on va appeler des produits « similaires », dans la seconde des utilisateurs « en accord ».

Parlons un peu plus de la seconde approche. Généralement les utilisateurs sont groupés en classe qui correspondent à la relation « avoir les mêmes produits préférés » en se basant sur une notation donnée à chaque produit d’un ensemble de produit témoin. C’est en procédant ainsi que la plupart des algorithmes théoriques ont été mis au point, malheureusement en pratique l’hypothèse sous-jacente, qui est « les utilisateurs notent toujours de la même façon les mêmes produits », est fausse (sinon les gens qui passent le bac ne crieraient jamais à l’injustice ). Par conséquent les implantations de ces algorithmes théoriques ne sont jamais aussi efficace qu’on voudrait (il suffit de regarder ce que donne les sites web qui font de la recommandation).

Avec Sébastien Hémon, doctorant qui bosse avec moi sur des problèmes amusants, nous avons écrit un article qui explique qu’on peut s’affranchir de cette hypothèse pour obtenir des algorithmes au moins aussi performant. Au final, nous n’utilisons qu’une information de classement : chaque utilisateur doit classer un petit ensemble de produit, cela suffira a faire une bonne recommandation.
Bien sur, ce n’est pas si simple, et les preuves sont loin d’être triviales, mais croyez nous, cela fonctionne…

scheme_708

Le dessin résume le fonctionnement de l’algorithme. L’ensemble des produits témoins correspond aux produits que tout le monde doit classer pour que le système fonctionne. Par ailleurs il y a un comité de personnes dont les goûts servent à faire les recommandations, ce comité doit donc avoir classé quasiment tous les produits disponibles.
Imaginons maintenant que je sois l’utilisateur 2, et que mon classement sur les produits témoins coïncide avec celui de l’utilisateur 1, alors le produit préféré de 1 doit être aussi le mien (ou au moins un produit qui me plaira) avec grande probabilité. En pratique on trouvera difficilement une correspondance parfaite entre le classement de l’utilisateur cible et un membre du comité, on choisira alors le membre du comité qui soit le plus proche en terme de classement (je vous expliquerai comment dans un autre billet – mais c’est à l’aide d’une distance entre utilisateurs représentés par des vecteurs).

Picture: courtesy of Abby Blank