Comment traiter les données implicites dans la recommandation


9

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.


Il n'y a aucun problème que -1 ne signifie pas l'aversion. C'est simplement un moyen de différencier que quelqu'un a vu l'article. En ce sens, il contient plus d'informations qu'une valeur manquante. Cela peut en fait augmenter la précision de votre recommandation. En fonction de votre métrique de distance dans la recommandation, vous pouvez envisager de la changer de -1 à une légère valeur de métrique afin qu'elle n'influence pas autant la distance.
cwharland

1
Le document canonique pour la rétroaction implicite est Hu, Koren et Volinsky . Beaucoup de bonnes recommandations là-dedans, y compris l'estimation de votre confiance dans laquelle -1 indique une aversion ou simplement un "je n'ai pas vu".
Trey

Réponses:


5

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 .


2
Je pense que l'imputation de légères valeurs négatives pour des éléments qui ont été vus plusieurs fois mais jamais choisis est raisonnable. Le PO n'indique pas qu'il a accès aux données qui qualifient ces imputations négatives, mais je n'exclurais pas cette tactique complètement. L'amplitude optimale de la valeur négative peut être déterminée à partir des données. J'ai eu de petits gains en faisant cela dans des scénarios recsys. Dans tous les cas ... suggéreriez-vous d'autres façons de différencier un élément vu une fois et non choisi par rapport à N fois vu et jamais choisi en plus de l'imputation négative?
cwharland
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.