Systèmes de recommandation dynamiques

14

Un système de recommandation mesurerait la corrélation entre les évaluations de différents utilisateurs et produirait des recommandations pour un utilisateur donné sur les éléments qui pourraient l'intéresser.

Cependant, les goûts changent avec le temps, de sorte que les anciennes notes peuvent ne pas refléter les préférences actuelles et vice versa. Vous avez peut-être déjà mis "excellent" dans un livre que vous qualifieriez de "pas trop dégoûtant" et ainsi de suite. De plus, les intérêts eux-mêmes changent également.

Comment les systèmes de recommandation devraient-ils fonctionner dans un environnement en évolution?

  1. Une option consiste à supprimer les "anciennes" notes, ce qui peut très bien fonctionner en supposant que vous définissiez correctement les "anciennes" (vous pouvez même dire que les notes n'expirent jamais et prétendre que le problème n'existe pas). Mais ce n'est pas la meilleure option possible: bien sûr, les goûts évoluent, c'est un flux de vie normal, et il n'y a aucune raison pour laquelle nous ne pouvons pas utiliser la connaissance supplémentaire de notes antérieures une fois correctes.
  2. Une autre option consiste en quelque sorte à tenir compte de ces connaissances supplémentaires. Ainsi, nous ne pouvions pas simplement trouver une "correspondance instantanée" pour vos intérêts actuels, mais vous suggérer les choses que vous pourriez aimer ensuite (par opposition aux choses que vous pourriez aimer maintenant ).

Je ne sais pas si je l'explique assez bien. Fondamentalement, je suis en faveur de la deuxième approche et je parle d'un système de recommandation qui mesurerait les corrélations des trajectoires gustatives et produirait des recommandations qui répondront à ... eh bien, appelons cela une croissance personnelle - car elles proviendront de personnes dont La "trajectoire des goûts" (et pas seulement "l'instantané des goûts") est similaire à la vôtre.

Maintenant, la question: je me demande si quelque chose de similaire à "l'option 2" existe déjà et, si c'est le cas, je me demande comment cela fonctionne. Et s'il n'existe pas, vous êtes invités à discuter de la façon dont cela devrait fonctionner! :)

andreister
la source

Réponses:

8

Je recommande vraiment le papier Filtrage collaboratif avec dynamique temporelle de Yehuda Koren (Concours Netflix!) Où cette question est discutée en détail.

Je suis d'accord avec l'auteur, que la première option ("couper") n'est pas la voie à suivre. Il est vrai que les préférences obsolètes sont ignorées de cette façon, mais a) certaines préférences ne changent jamais, d'où l'on tue des données afin d'identifier les arbres à feuillage persistant et b) certaines préférences dans le passé sont nécessaires pour comprendre les préférences de l'avenir ( par exemple acheter la saison 1 -> vous êtes susceptible d'acheter la saison 2).

Cependant, Koren n'essaie pas d'identifier explicitement de telles trajectoires (c'est-à-dire pour que l'on puisse prédire les futurs changements de comportement d'un utilisateur), car c'est une tâche très très difficile. Vous pouvez l'imaginer en gardant cela à l'esprit, que les «stations» de préférence le long d'une trajectoire ne sont PAS liées au temps, mais au développement personnel d'un utilisateur, peut-être interrompues ou traversées par d'autres trajectoires ou exprimées simplement d'une manière différente. Par exemple, si l'on passe de films d'action durs à des films d'action, il n'y a rien de tel qu'un "film d'action doux d'entrée" ou quelque chose comme ça. L'utilisateur peut entrer dans cette zone à tout moment (dans le temps et l'espace de l'article). Ces problèmes combinés à la rareté des données rendent presque impossible la création d'un modèle réalisable ici.

Au lieu de cela, Koren essaie de séparer les données passées en signaux de modèle à long terme et en bruit quotidien afin d'augmenter l'efficacité des prévisions de notation. Il applique cette approche à la fois à la SVD et à un modèle neigborbood collaboratif simple. Malheureusement, je n'ai pas encore terminé les calculs, donc je ne peux pas fournir plus de détails à ce sujet.

Note complémentaire sur la modélisation explicite des trajectoires

Le domaine de l' exploration de séquences fournit des méthodes à faire, mais le point critique est de trouver une représentation abstraite appropriée des éléments (car l'utilisation des éléments eux-mêmes ne fonctionnera pas en raison de la rareté), par exemple le regroupement en balises. Cependant, bien que cette approche puisse fournir des informations sur le comportement de certains utilisateurs (Data Mining!), Elle peut ne pas être pertinente en ce qui concerne l'application à tous les clients (c'est-à-dire la masse), de sorte que la modélisation implicite suggérée par Koren pourrait être mieux à la fin.

steffen
la source
Le journal Yehuda est très proche de ce dont je parlais, bien qu'il ne parle en effet pas de "trajectoires gustatives". Peut-être que vous avez raison et que le "taux de changement de goût" n'est pas fixé pour n'importe qui. Merci pour le lien!
andreister
Ouais, c'est la première chose à laquelle j'ai pensé.
Stumpy Joe Pete
2

Je ne suis pas au courant d'un système qui fonctionne, mais je ne serais pas surpris si Amazon, NetFlix ou quelqu'un avait un tel système. Même le moteur de recherche Google pourrait avoir un type de système similaire.

J'y ai pensé en suivant le cours du Dr Ng au semestre dernier. L'approche que j'ai d'abord jugée optimale serait d'ajouter un facteur de pondération basé sur l'âge. Plus une donnée est à jour, plus elle serait pondérée. Cette approche serait relativement simple et peu coûteuse à mettre en œuvre.

Cependant, après avoir réfléchi plus attentivement à cette approche, je pense qu'elle présente de graves défauts pour de nombreuses applications. Personnellement, je vais souvent suivre un genre ou une émission pendant un certain temps, me lasser, passer à autre chose, mais revenir plus tard au genre original. Ce cycle d'épuisement et de rallumage apparaît également dans la société.

Par conséquent, je penche vers un système un peu plus compliqué. Les données devraient être divisées en deux ensembles; les données actuelles - le seuil devrait varier en fonction de l'application plus la durée des interactions de l'individu - qui seraient pondérées plus fortement et les données "historiques" qui seraient notées plus bas avec une lente baisse des valeurs au fil du temps. Deuxièmement, un facteur serait inclus pour essayer de détecter le «blocage» lorsqu'un intérêt ou une implication importante disparaît soudainement. Les données "actuelles" qui sont classées de manière similaire seraient reclassées comme si elles étaient historiques.

Aucune de ces approches n'a de rigueur ou de validation, mais je pense qu'il vaudrait la peine de construire quelques essais de l'hypothèse.


la source
Votre idée de poids plus bas pour les anciennes données est similaire à "l'option 1" en fait. Au lieu de cela, je dis que toute la trajectoire du goût changeant est importante - c'est-à-dire que si hier vous aimiez le genre A et aujourd'hui vous aimez le genre B, le système regarderait d'autres personnes avec le même "AB- ??" le goût bouge et suggère que demain vous aimeriez le genre C.
andreister
1

À mon avis, une version modifiée du filtrage collaboratif peut fonctionner. Cependant, vous devrez garder un horodatage sur chaque classement et poser une pénalité lors du calcul du poids d'un rang plus ancien.

vonPetrushev
la source