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.
Respostas:
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 .
fonte