Un système de recommandations conserve un journal des recommandations qui ont été faites à un utilisateur particulier et si cet utilisateur accepte la recommandation. C'est comme
user_id item_id result
1 4 1
1 7 -1
5 19 1
5 80 1
où 1 signifie que l'utilisateur a accepté la recommandation tandis que -1 signifie que l'utilisateur n'a pas répondu à la recommandation.
Question: Si je vais faire des recommandations à un groupe d'utilisateurs en fonction du type de journal décrit ci-dessus et que je souhaite maximiser les scores MAP @ 3, comment dois-je traiter les données implicites (1 ou -1)?
Mon idée est de traiter 1 et -1 comme des notes et de prédire la note en utilisant des algorithmes de type machines de factorisation. Mais cela ne semble pas correct, compte tenu de l'asymétrie des données implicites (-1 ne signifie pas que l'utilisateur n'aime pas la recommandation).
Edit 1 Réfléchissons-y dans le contexte d'une approche de factorisation matricielle. Si nous traitons -1 et 1 comme des notes, il y aura un problème. Par exemple, l'utilisateur 1 aime le film A qui obtient un score élevé dans un facteur (par exemple, avoir une musique de fond glorieuse) dans l'espace des facteurs latents. Le système recommande le film B qui a également un score élevé dans la "musique de fond glorieuse", mais pour une raison quelconque, l'utilisateur 1 est trop occupé pour examiner la recommandation, et nous avons un film de classement B. Si nous traitons simplement 1 ou -1 également , alors le système peut être découragé de recommander un film avec un BGM glorieux à l'utilisateur 1 tandis que l'utilisateur 1 aime toujours les films avec un BGM glorieux. Je pense que cette situation est à éviter.
Réponses:
Votre système n'est pas seulement formé sur les éléments recommandés, non? si c'est le cas, vous avez une grande boucle de rétroaction ici. Vous voulez apprendre de tous les clics / vues, j'espère.
Vous suggérez que ne pas regarder un article est un signal négatif. Je vous suggère fortement de ne pas le traiter de cette façon. Ne pas interagir avec quelque chose est presque toujours mieux traité comme aucune information. Si vous avez un signal explicite indiquant une aversion, comme un vote négatif (ou, peut-être regardé 10 secondes d'une vidéo et arrêté), c'est peut-être valable.
Je ne considérerais pas cette entrée comme des données de type notation. (Bien que dans votre cas, vous puissiez vous en tirer.) Au lieu de cela, considérez-les comme des poids, ce qui est exactement le traitement dans l'article de Hu Koren Volinsky sur la SLA que @Trey mentionne dans un commentaire. Cela vous permet d'enregistrer la force relative des interactions positives / négatives.
Enfin, je voudrais noter que ce document, bien qu'il soit très probablement ce que vous recherchez, ne prévoit pas de pondérations négatives. Il est simple d'étendre de cette façon. Si vous arrivez jusque-là, je peux vous indiquer l'extension facile, qui existe déjà dans deux implémentations que je connais, dans Spark et Oryx .
la source