Un sistema de recomendaciones mantiene un registro de las recomendaciones que se han hecho a un usuario en particular y si ese usuario acepta la recomendación. Es como
user_id item_id result
1 4 1
1 7 -1
5 19 1
5 80 1
donde 1 significa que el usuario aceptó la recomendación, mientras que -1 significa que el usuario no respondió a la recomendación.
Pregunta: Si voy a hacer recomendaciones a un grupo de usuarios en función del tipo de registro descrito anteriormente, y quiero maximizar las puntuaciones de MAP @ 3, ¿cómo debo tratar los datos implícitos (1 o -1)?
Mi idea es tratar 1 y -1 como calificaciones y predecir la calificación usando algoritmos de tipo máquinas de factorización. Pero esto no parece correcto, dada la asimetría de los datos implícitos (-1 no significa que al usuario no le guste la recomendación).
Edición 1 Pensemos en ello en el contexto de un enfoque de factorización matricial. Si tratamos -1 y 1 como calificaciones, habrá algún problema. Por ejemplo, al usuario 1 le gusta la película A que tiene un puntaje alto en un factor (por ejemplo, tener una gloriosa música de fondo) en el espacio de factor latente. El sistema recomienda la película B, que también tiene un puntaje alto en "gloriosa música de fondo", pero por alguna razón, el usuario 1 está demasiado ocupado como para considerar la recomendación, y tenemos una calificación de película B. Si solo tratamos 1 o -1 por igual , entonces el sistema podría desanimarse a recomendar películas con música gloriosa al usuario 1, mientras que el usuario 1 todavía ama las películas con música gloriosa. Creo que esta situación se debe evitar.
Respuestas:
Su sistema no solo está entrenado en los elementos que se recomiendan, ¿verdad? Si es así, tiene un gran bucle de retroalimentación aquí. Desea aprender de todos los clics / vistas, espero.
Sugiere que no mirar un artículo es una señal negativa. Le sugiero encarecidamente que no lo trate de esa manera. No interactuar con algo casi siempre se trata mejor como si no hubiera información. Si tiene una señal explícita que indica una aversión, como un voto negativo (o, tal vez vio 10 segundos de un video y se detuvo), tal vez eso sea válido.
No interpretaría esta entrada como datos de calificación. (Aunque en su caso, puede salirse con la suya). En cambio, piense en ellos como pesas, que es exactamente el tratamiento en el documento de Hu Koren Volinsky sobre ALS que @Trey menciona en un comentario. Esto le permite registrar la fuerza relativa de las interacciones positivas / negativas.
Finalmente, quisiera señalar que este documento, aunque es muy probable que sea lo que está buscando, no proporciona pesos negativos. Es simple extender de esta manera. Si llega tan lejos, puedo señalarle la extensión fácil, que ya existe en dos implementaciones que conozco, en Spark y Oryx .
fuente