Como lidar com dados implícitos na recomendação


9

Um sistema de recomendação mantém um registro de quais recomendações foram feitas para um usuário específico e se esse usuário aceita a recomendação. É como

user_id item_id result
1       4       1
1       7       -1
5       19      1
5       80      1

onde 1 significa que o usuário aceitou a recomendação enquanto -1 significa que o usuário não respondeu à recomendação.

Pergunta: Se vou fazer recomendações para vários usuários com base no tipo de log descrito acima e quero maximizar as pontuações do MAP @ 3, como devo lidar com os dados implícitos (1 ou -1)?

Minha idéia é tratar 1 e -1 como classificações e prever a classificação usando algoritmos do tipo máquinas de fatoração. Mas isso não parece certo, dada a assimetria dos dados implícitos (-1 não significa que o usuário não goste da recomendação).

Edit 1 Vamos pensar sobre isso no contexto de uma abordagem de fatoração matricial. Se tratarmos -1 e 1 como classificações, haverá algum problema. Por exemplo, o usuário 1 gosta do filme A, que pontua alto em um fator (por exemplo, com música de fundo gloriosa) no espaço de fator latente. O sistema recomenda o filme B, que também tem uma pontuação alta em "gloriosa música de fundo", mas por alguma razão o usuário 1 está ocupado demais para procurar a recomendação, e temos um filme de classificação -1. Se apenas tratarmos 1 ou -1 igualmente , o sistema pode ficar desanimado em recomendar filmes com gloriosa BGM ao usuário 1, enquanto o usuário 1 ainda gosta de filmes com gloriosa BGM. Eu acho que essa situação deve ser evitada.


Não há problema que -1 não signifique aversão. É simplesmente uma maneira de diferenciar que alguém viu o item. Nesse sentido, ele carrega mais informações do que um valor ausente. Na verdade, isso pode aumentar a precisão de sua recomendação. Dependendo da métrica da distância ao recomendar, considere alterá-la de um valor de -1 para um leve valor de métrica, para que não afete tanto a distância.
Cwharland

11
O artigo canônico para feedback implícito é Hu, Koren e Volinsky . Muitas recomendações boas estão lá, incluindo estimar sua confiança em que -1 indica uma antipatia ou apenas um "não viu".
Trey

Respostas:


5

Seu sistema não é apenas treinado em itens recomendados, certo? Nesse caso, você tem um grande ciclo de feedback aqui. Você deseja aprender com todos os cliques / visualizações, espero.

Você sugere que não olhar para um item é um sinal negativo. Eu sugiro fortemente que você não a trate dessa maneira. Não interagir com algo é quase sempre melhor tratado como nenhuma informação. Se você tem um sinal explícito que indica antipatia, como uma votação negativa (ou, talvez assistiu a 10 segundos de um vídeo e parou), talvez seja válido.

Eu não interpretaria essa entrada como dados do tipo classificação. (Embora no seu caso, você possa se safar.) Em vez disso, pense neles como pesos, que é exatamente o tratamento no artigo de Hu Koren Volinsky sobre ALS que @Trey menciona em um comentário. Isso permite registrar a força relativa das interações positivas / negativas.

Por fim, gostaria de observar que este artigo, embora seja provavelmente o que você está procurando, não fornece pesos negativos. É simples estender dessa maneira. Se você chegar tão longe, posso apontar a extensão fácil, que já existe em duas implementações que eu conheço, no Spark e no Oryx .


2
Penso que imputar pequenos valores negativos para itens que foram vistos muitas vezes, mas nunca escolhidos, é razoável. O OP não indica que eles têm acesso a dados que qualificam essas imputações negativas, mas eu não descartaria essa tática completamente. A magnitude ideal do valor negativo pode ser determinada a partir dos dados. Eu tive pequenos ganhos ao fazer isso em cenários de recsys. De qualquer forma ... você sugeriria outras maneiras de diferenciar o item visto uma vez e não escolhido versus o N vezes visto e nunca escolhido além da imputação negativa?
Cwharland 28/05
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.