Recomendaciones basado en contenido.
Un sistema de recomendaciones basado en contenido trata de recomendar artículos a los usuarios, en función de su perfil. El perfil del usuario gira en torno a sus preferencias y sus gustos. Se configura en función de las valoraciones de los usuarios, incluyendo el número de veces que el usuario ha dado click a distintos elementos o tal vez, incluso le ha dado like esos artículos. El proceso de recomendación se basa en la similitud entre estos elementos. La similaridad, o cercanía de los artículos, se mide basado en la similitud en el contenido de dichos elementos. Cuando decimos contenido, estamos hablando de cosas como la categoría del artículo, la etiqueta, el género, etc… Por ejemplo, si tenemos 4 películas, y si al usuario le gusta o califica los 2 primeros elementos, y si el elemento 3 es similar al elemento 1, en términos de su genero, el motor también recomendará el artículo 3 al usuario.
En esencia, esto es lo que hacen los motores del sistema de recomendaciones basados en contenido. Vamos a bucear en un sistema de recomendaciones basado en contenido para ver cómo funciona: Supongamos que tenemos un conjunto de datos de 6 películas. Este conjunto de datos muestra películas que nuestro usuario ha visto, y también el género de cada una de las películas. Por ejemplo, «Batman versus Superman» está en los géneros de aventura y superhéroes. Y «Guardianes de la Galaxia» está en comedia, aventura, superhéroes y ciencia ficción. Digamos que el usuario ha visto y clasificado 3 películas hasta ahora y que ha dado una calificación de 2 de 10 a la primera película, 10 de 10 a la segunda película, y un 8 de 10 a la tercera. La tarea del motor de recomendaciones es recomendar una de las 3 películas candidatas a este usuario. En otras palabras, queremos predecir cuál es la posible calificación que el usuario le daría a las 3 películas candidatas si las viera.
Para lograr esto, tenemos que construir el perfil de usuario. En primer lugar, creamos un vector para mostrar las calificaciones para las películas que el usuario ya vió. Lo llamamos «input user ratings». Luego, codificamos las películas a través del enfoque «Hot Encoding». El genero de las películas se utiliza como un conjunto de características. Usamos las primeras 3 películas para hacer esta matriz, que representa la matriz ‘feature-set’ de película. Si multiplicamos estas 2 matrices, podemos obtener el «eighted feature set» para las películas. Al resultado también se le llama matriz «Weighted Genre», y representa los intereses del usuario por cada género basado en las películas que ha visto.
Ahora, dada la matriz «Weighted Genre», podemos formar el perfil de nuestro usuario activo. Esencialmente, podemos agregar los géneros ponderados, y luego normalizarlos para encontrar el perfil de usuario. Claramente indica que le gustan las películas de «super héroe» más que de otros géneros. Utilizamos este perfil para averiguar qué película es adecuada para recomendar a este usuario. Así que codificamos las 3 películas candidatas para la recomendación, que no han sido vistas por el usuario. Ahora ya podemos averiguar cuál de ellas es más adecuada para que se recomienden al usuario. Simplemente multiplicamos la matriz de perfil de usuario por la matriz de películas candidatas, y da como resultado la matriz de «películas ponderadas» que muestra el peso de cada género respecto al perfil de usuario. Si agregamos estas valoraciones ponderadas, obtenemos el posible nivel de interés del usuario activo en estas 3 películas. En esencia, es nuestra lista de «recomendaciones», la que podemos utilizar para clasificar las películas y recomendar al usuario. Por ejemplo, podemos decir que el «Hitchhiker el Guía de la Galaxia» tiene la puntuación más alta de nuestra lista, y es factible recomendarsela.
Podemos ver un ejemplo en Python en esta entrada: Recomendaciones basado en contenido en Python
Ir al artículo anterior de la serie: Introducción a los sistemas de recomendación
Ir al artículo siguiente de la serie: Recomendaciones basado en filtrado colaborativo