Algorithme de recommandation - Algo - Programmation
Marsh Posté le 16-04-2010 à 12:23:51
ReplyMarsh Posté le 16-04-2010 à 13:19:12
Fred999 a écrit : Salut, |
Tout à fait. Je l'ai déplacé dans la bonne sous-catégorie.
Marsh Posté le 16-04-2010 à 23:18:21
Salut Jérôme ,
tu devrais jeter un oeil au livre Programming Collective Intelligence plus précisément le chapitre 2 (Making recommendations) qui traite de ce sujet et qui pourra t'éclairer sur quelques algorithmes. Tu peux consulter quelques parties du livre en pdf sur le site d'oreilly (2 ou 3 pages ne seront pas affichées), ou tu peux te le procurer à la bibliothèque de ton école probablement.
Le principe est pas compliqué, il faut tenter de trouver des utilisateurs similaires (qui tendent à avoir les mêmes gouts (donné le même genre de notes aux films)), pour faire ça tu dois comparer chaque personne avec les autres et calculer un score de similitude, les deux approches que donne l'auteur sont soit de calculer une distance euclidienne, soit en utilisant le Coefficient de corrélation linéaire de Bravais-Pearson.
Une fois que tu as implémenté ta méthode de "scoring", il faut l'utiliser pour calculer la personne qui a le meilleur score pour une personne donnée, tu vas donc par exemple tenter de trouver la personne qui a donné les scores les plus similaires aux tiens sur les films que vous avez tous les deux vus. Avec ces deux étapes tu te retrouve donc avec la personne ayant noté le plus comme toi, mais il te faut encore trouver un moyen de savoir quels films cette personne à vu et que tu serais les plus susceptible d'aimer. Pour faire ça il te reste à calculer un score pondéré des reviews des autres utilisateurs.
Admettons que toi Jérôme tu ai vus les films A, B, C, et D, ainsi que Jessica, Emmanuel, Damien, et d'autres sauf qu'eux en ont également vus d'autres et que justement tu voudrais savoir quels films parmis ceux qu'ils ont vu tu devrais regarder aussi). Tu as déjà calculé des scores de similarité (S1, S2, ..., SN) entre toi et Jessica, toi et Emmanuel, etc.. Alors pour chaque films qu'ils ont vu et toi non, tu va multiplier leur note par le score de similitude entre vous deux, et tu divisera le tout par la somme des score de similarité entre toi et toutes les personnes qui ont vu ce film (afin d'éviter qu'un film vu par plus de personne qu'un autre n'ait forcément un meilleur score).
Et voila, tu n'a plus qu'à trier ces résultats de façon décroissante, et tu as une recommandation des films que tu es le plus susceptible d'aimer au vu des utilisateurs les plus proches de toi question goût!
Dans le bouquin tu as des exemples d'implémentation en Python si ça peut t'aider à te mettre sur la voie (je ne sais pas quel techno tu utilises pour ton site web).
Bonne chance
Si tu trouves ce genre de sujets intéressants, n'hésite pas à lire le livre, il est vraiment bien.
Marsh Posté le 17-04-2010 à 11:44:48
Tu peux utiliser la méthode d'analyse en composantes principales (ACP avec une SVD -> calcul de vecteurs et valeurs propres). Je l'ai employée pour le calcul de similarités entre documents : j'avais donc un petit côté sémantique dans le tas -> j'ai utilisé l'ago LSA http://fr.wikipedia.org/wiki/Analy [...] ue_latente avec le calcul des tf-idf. Ca me donne de bons résultats (par contre, faute de puissance de calcul, je me suis arrêté au calcul de la matrice des corrélations).
Marsh Posté le 13-04-2015 à 20:28:36
5 ans plus tard, je me rends compte que j'ai réussi à trouver ce que je cherchais mais que je n'ai jamais pris la peine de dire merci. Donc voilà: merci.
(Je sors )
Marsh Posté le 14-04-2015 à 09:24:20
Plus qu'un merci, tu poster ta solution, ça pourra servir à d'autres
Marsh Posté le 06-04-2010 à 19:13:35
Hello,
Je suis occupé à mettre au point, pour un travail dans un cours à l'école, un système de recommandation de films. Il m'est demandé de faire tout un site qui doit, entre autres, permettre aux utilisateurs ayant accordé une note entre 1 et 5 à plusieurs films de leur recommander des nouveaux films en fonction de leurs "goûts" (ce qu'ils ont aimé dans leurs précédents votes et ce qu'ils n'ont pas aimé).
Tout le site est terminé et fonctionne pas trop mal, mais il me reste maintenant la "grosse" partie, à savoir l'implémentation de l'algorithme de recommandation.
La partie intéressante de ma db, à savoir les ratings, se compose comme suit :
- id
- user_id
- movie_id
- rating
- timestamp
Au niveau de l'algo à implémenter, on m'a parlé de deux choses :
- Vectoriel : considérer chaque utilisateur comme un vecteur ayant n dimensions, où n est le nombre de films dans ma db. La ième coordonnée de ce vecteur étant le rating accordé par l'utilisateur au film i. Ensuite, il faudrait comparer les utilisateurs (vecteurs) entre-eux et trouver l'utilisateur qui ressemble le plus à celui auquel il faut recommander un film.
- Slope one : calculer pour ma table de ratings une matrice de "différences de moyenne", laquelle permettrait de dire qu'en moyenne, le film i et plus noté de 0.5 points que le film j, et d'ensuite appliquer cette "moyenne" à un utilisateur pour prédire la note qu'il accorderait à un film particulier.
Avez-vous déjà utilisé ces algorithmes? Une idée pour me lancer? Je pateauge un peu là...
Merci d'avance.
Jérôme.