Introduction aux systèmes de recommandation

Many receive advice, only the wise profit from it.” – Harper Lee

Les systèmes de recommandation sont pour beaucoup d’entre nous des entités mystérieuses qui semblent deviner nos pensées. Pensons simplement à Netflixqui nous suggère des films, ou encore à Amazon, qui croit connaître les produits que nous devrions acheter. Depuis leurs débuts, les outils de recommandation ont été améliorés et raffinés et ils ne cessent d’enrichir l’expérience utilisateur. Bien que plusieurs d’entre eux soient des ensembles très complexes, leur fondement et leurs racines demeurent très simples. Je me suis penché sur la question afin de démystifier pour vous ces étranges systèmes.

Qu’est-ce qu’un système de recommandation?

Un système de recommandation est une forme spécifique de filtrage de l’information qui a pour but de présenter à un utilisateur des éléments qui sont susceptibles de l’intéresser, et ce, en se basant sur ses préférences et son comportement. On tente donc de prédire votre appréciation face à un élément pour ainsi vous suggérer ce que vous serez le plus en mesure d’apprécier.

Comment créer un système de recommandation?   

Bien qu’il existe de nombreuses techniques pour mettre en place un système de recommandation, j’ai choisi ici de vous présenter les trois techniques les plus simples et les plus utilisées. Tout d’abord, le filtrage collaboratif, puis les systèmes basés sur le contenu et finalement les systèmes basés sur la connaissance. Je vous présente également le principal problème des systèmes de recommandation ainsi qu’une solution à ce problème. À la toute fin, un exemple d’implémentation complète vous attend.  

Filtrage collaboratif

L’une des premières techniques utilisées et qui demeure encore aujourd’hui parmi les plus simples et les plus efficaces est le filtrage collaboratif. Ce procédé en trois étapes commence par la collecte d’information sur les utilisateurs. Puis, on forme une matrice afin de calculer des associations. Finalement, nous sommes en mesure de faire une recommandation avec un niveau de confiance assez élevé. Cette recommandation se divise en deux grandes catégories : l’une se base sur les utilisateurs et l’autre sur les items qui composent l’environnement.

Filtrage collaboratif utilisateur

L’idée derrière le filtrage collaboratif utilisateur consiste à trouver des utilisateurs qui ont des goûts similaires à l’utilisateur cible. Plus concrètement, si Jean-Pierre et Jason ont évalué plusieurs films d’une manière similaire dans le passé, nous pouvons considérer ceux-ci comme des utilisateurs semblables et ainsi utiliser les cotes de Jean-Pierre pour prédire les cotes de Jason. Par exemple, si Jean-Pierre a beaucoup apprécié les films Return Of The Jedi et The Empire Strikes Back et que Jason a également aimé le film Return Of The Jedi, alors il serait judicieux de suggérer à Jason The Empire Strikes Back. Généralement, un nombre restreint d’utilisateurs semblables à Jason est suffisant pour prédire les évaluations de celui-ci.

 

dev-recommandation-filtrage-userDans un tableau où chaque ligne est un utilisateur et où chaque colonne représente un film, il suffit de trouver les similarités entre les lignes de la matrice pour repérer les utilisateurs similaires.

dev-recommandation-matrice
Il existe cependant certains problèmes associés à ce type d’implémentation.

– Les préférences des utilisateurs changent avec le temps. Cela peut donc générer de nombreuses suggestions inappropriées.

– Plus le nombre d’utilisateurs augmente, plus il sera long de générer des recommandations.

– Le filtrage par utilisateur est sensible au Shilling Attack, qui est une façon pour certaines personnes mal intentionnées de détourner le système et de faire en sorte que certains produits soient plus recommandés que d’autres, et ce, à leur avantage.

Filtrage collaboratif objets

Le processus est simple. On calcule la ressemblance de deux éléments en se basant sur les notes données par les utilisateurs. Retrouvons Jean-Pierre et Jason qui ont tous les deux apprécié les films The Return Of The Jedi et The Empire Strikes Back. Nous pouvons donc déduire que la majorité des utilisateurs qui apprécie le premier film risque également d’apprécier le second. Ainsi, il serait pertinent de suggérer The Empire Strikes Back à Larry, qui a adoré The Return Of The Jedi.

dev-recommandation-filtrage-objets

Pertinemment, la ressemblance est calculée en fonction des colonnes plutôt que les lignes, et ce, sur la même matrice utilisateur/films vue précédemment.

Le filtrage collaboratif objets (ou items) est souvent favorisé puisque celui-ci ne comporte aucun des inconvénients du filtrage utilisateur. D’abord, les items du système (ici des films) ne changent pas, donc les suggestions seront plus pertinentes. De plus, il y a souvent moins d’éléments que d’utilisateurs, ce qui diminue le temps de traitement. Finalement, il est beaucoup plus complexe de tricher avec ces systèmes.

Système basé sur le contenu

Dans les systèmes de recommandation basés sur le contenu, ce sont les attributs descriptifs des éléments qui sont utilisés pour formuler des recommandations. Le terme « contenu » fait référence à ces descriptions. Par exemple, en regardant l’historique d’écoute de Sophie, le système remarque que celle-ci semble apprécier le genre country. Il sera donc en mesure d’ajouter plus de titres du même genre à ses recommandations. Des systèmes beaucoup plus complexes sont en mesure de détecter les cohérences entre certains attributs, et ainsi, d’augmenter la qualité des suggestions. Notamment, le Music Genome Project catégorise chacune des chansons en 450 attributs différents; c’est de ce projet qu’est né le site d’écoute musicale Pandora.

Système basé sur la connaissance

Les systèmes de recommandation fondés sur la connaissance sont particulièrement utiles dans le cas d’articles qui sont rarement achetés. On parle ici de maisons, d’automobiles, de services financiers et même d’objets de luxe. Dans de tels cas, le processus de recommandation souffre souvent d’un manque d’évaluation des produits. Il n’utilise alors pas les évaluations des utilisateurs, mais sera plutôt effectué sur la base des similitudes entre les exigences des clients et des descriptions d’articles ou grâce à l’utilisation de contraintes spécifiant les exigences des utilisateurs. Cela rend ce type de système unique puisqu’il permet aux utilisateurs de spécifier explicitement ce qu’ils veulent. En ce qui concerne les contraintes, si applicables, elles sont le plus souvent implémentées par les experts du domaine. Par exemple, lorsque l’utilisateur spécifie clairement que le prix de la maison recherchée ne doit pas dépasser X, le système doit prendre en considération cette spécification.

Le problème de démarrage à froid

L’un des problèmes majeurs des systèmes de recommandation est que le nombre d’évaluations initialement disponibles est relativement faible. Que faire lorsqu’un nouvel utilisateur n’a pas encore noté de films, ou lorsqu’un nouveau film est ajouté au système? Dans de tels cas, il devient plus difficile d’appliquer les modèles traditionnels de filtrage collaboratif. Bien que les méthodes qui s’appuient sur le contenu et sur les connaissances soient plus robustes que les modèles collaboratifs, lorsqu’il s’agit de démarrage à froid, ces contenus ou connaissances pourraient ne pas toujours être disponibles. Par conséquent, un certain nombre de procédés spécifiques comme les systèmes hybrides ont été conçus. Ils visent à remédier au problème du démarrage à froid dans le contexte des systèmes de recommandation.

Les systèmes hybrides

Notons que les différents types de systèmes présentés ont tous des forces et des faiblesses et se basent sur différentes données pour générer des suggestions. Certains systèmes de recommandation, comme ceux qui s’appuient sur la connaissance, sont plus efficaces dans les environnements de démarrage à froid, où la quantité de données est limitée. D’autres systèmes de recommandation, comme les méthodes collaboratives, sont plus efficaces lorsque plusieurs données sont disponibles. Dans de nombreux cas, alors que les données sont très variées, nous avons la flexibilité d’utiliser différentes méthodes pour la même tâche. Nous pouvons donc combiner plusieurs techniques afin d’améliorer la qualité du système dans son ensemble. De nombreuses techniques de combinaisons ont été explorées, parmi lesquelles :

  • Pondéré : un poids différent donné aux recommandations de chaque technique utilisée afin de favoriser certaines d’entre elles.
  • Mixte : un seul ensemble de recommandations, sans préférences.
  • Augmenté : les suggestions d’un système sont utilisées comme entrée pour le suivant, et ainsi de suite jusqu’au dernier.
  • Commutation : choix d’une méthode au hasard.

L’une des utilisations les plus célèbres d’un système hybride est celle du Netflix Prize, de 2006 à 2009. Le but poursuivi était d’améliorer les suggestions de l’algorithme Cinematch de Netflix d’au moins 10 %. L’équipe Bellkor’s Pragmatix Chaos a remporté le prix d’un million de dollars avec sa technique composée de 107 algorithmes différents et a réussi à améliorer de 10.06% les suggestions de Cinematch.

Et l’intelligence artificielle dans tout ça?

Les systèmes de recommandation sont couramment utilisés en lien avec l’intelligence artificielle. Leur capacité à fournir un aperçu global, à prédire les événements et à mettre en évidence des corrélations contribue à expliquer leur utilisation en IA. Par ailleurs, les techniques de Machine Learning sont fréquemment utilisées pour créer les algorithmes de recommandation. Par exemple, chez Arcbees, nous avons construit un système de prédiction des préférences de films qui utilise un réseau de neurones et les données de IMDb. Les réseaux de neurones peuvent effectuer rapidement des tâches complexes et manipuler facilement des données massives. En fournissant une liste de films comme entrées et en comparant la sortie avec la note de l’utilisateur, le réseau peut apprendre par lui-même la règle permettant de prédire les évaluations futures d’un utilisateur spécifique.

Les trucs de l’expert

Tout au long de mes lectures, j’ai remarqué deux grands conseils qui reviennent toujours parmi ceux prodigués par les experts du domaine. Le premier consiste à faire reposer les recommandations sur les items que les utilisateurs paient. Lorsqu’un utilisateur est prêt à payer, on peut être certain que l’évaluation qu’il fournira sera beaucoup plus juste et fidèle. Deuxièmement, il est toujours préférable d’avoir un plus grand nombre d’algorithmes que de raffiner un seul algorithme. Le système de Netflix en est un bon exemple.

Implémentation d’un algorithme de filtrage collaboratif objets

Le code qui suit montre à quel point il est facile et rapide de mettre en place un système de recommandation par filtrage collaboratif item. Le langage utilisé est Python et j’utilise les librairies Pandas et Numpy qui sont parmi les plus populaires dans le domaine. Les données utilisées sont des évaluations de films et l’ensemble est disponible sur le site MovieLens.

Étape 1 : Trouver des films semblables à un film

  1. Lire les données
  2. Créer la matrice utilisateur X films
  3. Choisir un film et générer la valeur de similitude (corrélation) de tous les autres films avec le film choisi
  4. Enlever les films peu populaires et qui peuvent générer des recommandations inadéquates
  5. Extraire les films populaires et semblables au film cible

Étape 2 : Faire des recommandations à un utilisateur en s’appuyant sur toutes ses évaluations

  1. Générer la valeur de similarité entre chaque paire de film et en gardant seulement les plus populaires
  2. Générer la liste des suggestions pour chacun des films contenus dans la liste des évaluations de l’utilisateur cible (ici l’utilisateur numéro zéro)
  3. Regrouper les films identiques en additionnant leur score
  4. Conserver seulement les films qui n’ont pas encore été visionnés par l’utilisateur

Comment aller plus loin ?

Dans le cas présenté plus haut, la librairie Panda et notre simple processeur suffisaient pour pouvoir travailler sur un ensemble de données de MovieLens. Cependant, il se peut que ce ne soit pas optimal pour des ensembles plus gros, et donc, vous chercherez probablement à vous tourner vers Spark ou MapReduce pour rendre l’exécution plus rapide.

J’espère bien avoir réussi à vous faire voir qu’il n’y a rien de compliqué dans le fait de mettre en place un système de recommandation simple et efficace. N’hésitez pas à commenter et à poser vos questions. Vous pouvez aussi me contacter directement par email.