Motores de Recomendación con Python (parte 2).

Inicio > Aplicaciones del Big Data > Motores de Recomendación con Python (parte 2).
Índice de contenidos

Lee la parte 1 aquí.

En realidad, comparar el grado de similitud entre dos películas puede que no sea lo que más interese al usuario. Puede ser más valioso encontrar todas aquellas películas que son más parecidas a la que nos gusta. Para ello, seleccionaremos la columna de la película que nos gusta y la ordenaremos de mayor a menor. Así, Python nos mostrará en orden decreciente de similitud las películas.

nQ1caYKL91FH5E4QGZzYmSjKBi6N k8Cos4kgrATHabmFYv4gdtOIv2m0la74ywMTx0wwUjynA9Kz9tpdTfrW5V7Yzt84jzmaCTRDjse2t8 V03t9p
Figura 13. Recomendar películas por grado de similitud con Python

3. Recomendaciones basadas en texto


Desafortunadamente, en el mundo real los problemas que tenemos que resolver no tienen etiquetas claras como los géneros para el caso particular de las películas. Por suerte, si hay texto relacionado con ese elemento entonces podemos hacer algo. Este texto puede ser un resumen, una descripción del elemento o la lista de contenidos de un libro. en estos casos usaremos «Term Frequency inverse Document Frequency» o TF-IDF para transformar el testo en información valiosa.


Estos algoritmos dividen el número de veces que una palabra aparece en un documento entre el ratio de documentos globales en que unes palabra aparece. De esta manera, se reduce la importancia de palabras comunes y se incrementa el peso de aquellas palabras que no aparecen en muchos documentos. Por ejemplo, si comparamos el texto de «Harry Potter y La Piedra Filosofal» con el resto de libros de la saga Harry Potter, la palabra Voldemort obtendrá una puntuación baja ya que aparece multitud de veces a lo largo de todos los libros. Por contra, la palabra elixir que está muy relacionada sólo al primer libro de la saga, obtendrá una puntuación alta.

bqY8lGhSYwnr2k9fw4iDTW1SlikH1yjnpX2EYYepmn4ee38dfoRlebzuZilY9yjzmKL8hHb uNxRoqfb GaVfOjnkGRYCnapt12RFLVkHe0d Zoug6XUCJHFj7bLSVNpRu GYguamzaOORO w
Figura 14. Fórmula TF-IDF

Ahora vamos a trabajar con otro dataset de películas diferente. Este contiene los nombres de las películas y el resumen de las mismas que aparece en la página Wikipedia.

HpNf Bz 2xvvP ADyDtH4J56j6NqaCeU58CtpSUULoLbHPohzdFotpY
Figura 15. Cargamos el nuevo dataset con el resumen de las películas

La transformación de los datos se hace gracias a TfidfVectorizer de la biblioteca Scikit Learn. Porde efecto, esta herramienta genera una característica por cada palabra presente en un documento. Esto resulta en un gran número de características; por suerte, hay formas de reducir el número de características generador por el vectorizador.

Para ello incluiremos en primer lugar el argumento min_df y le daremos un valor de 2. De esta forma sólo se convertirán en características aquellas palabras que estén presentes en al menos dos documentos. Esto es muy útil ya que las palabras que sólo aparezcan en un documento no son muy importantes a la hora de encontrar similitudes.

Por otro lado, podemos incluir un segundo argumento max_df que elimine aquellas palabras que sean muy comunes. Si lo fijamos a 0.7, no se tendrán en cuenta aquellas palabras que aparecen en más de un 70% de los resúmenes.

yAQWvUVIDiHx97WDhi6BDwo8JdwWqzVP558C2JtYd0dN5dB0Iody5z32g4IIVAtogCl17nBXin 9P0pZoFvM0D6ol 7mUFuCpUIW9T0TMTv5Qq Tt47Lkq qkMtzmaJuMfCCuuTTGAv32znoPg
Figura 16. inicializamos el vectorizador limitando el número de características a generar

Una vez iniciado el Vectorizer invocaremos al método fit_transform usando la columna resumen del dataframe. El método get_feature_names permite obtener las diferentes características. La matriz dispersa se almacena en un DataFrame que almacena por filas las películas y por columnas los nombres de las características.

LDI vHerB yG 1buMwAJjVP4OlCrfSGQmsLyx2bd22te PvV8gnbcKlRNnSYRcUKP4tS h0cXNrrgc7 njQ 0V2X5y0MFM70DzlLuJwpQ07dBXvYDMpTjBU84vIIY
Figura 17. Matriz de similitud coseno

Similitud Coseno

En este caso utilizaremos una métrica que cuantifica mejor la similitud entre elementos con mayor variabilidad. A esta métrica se la conoce como Cosine Similarity o Similitud Coseno. Sin entrar en los detalles matemáticos, se encarga de medir el ángulo entre dos documentos en el espacio métrico de multiples dimensiones. Mostramos un ejemplo de esta métrica trasladada al caso del espacio bidimensional. Toma valores entre 0 y 1, donde 1 representa similitud total.

0L1SQiacGJ7xl KbPV2 RCgnrbPdo v2PyKX8K7fTrYn7QyqQeg3W1jKDCthctBnBMFk rHii7EbiAnIqvlk2K
Figura 18. Formula y representación gráfica de la similitud coseno

Esta función permite hacer el cálculo entre dos películas cualesquiera. La diferencia es que en este caso, será necesario hacer un reshape como se muestra a continuación. El grado de similitud entre los resúmenes de la primera y la segunda parte de la película Cars es de 0.38.

VnKtwmSvQmxuCd7evzsF31DC AUuNBscXwptL5tynUGgaafLV3FcVuG4HMaUd4LlzRWA0L5LIDd26FTpn1pGVgsJIgl WHjTaDeAPqM4wunrycuxd0qIJ3
Figura 19. Similitud Coseno entre dos películas basado en su resumen

De forma similar y partiendo de un DataFrame, Scikit Learn es capaz de calcular de una vez la similitud coseno entre todas las filas.

HmCveKC2Vv4fonSh3z2iMlT0bh7ZktDH23PD yg5k4eu7hFb9EXSkRGm D6G3vNxVwj FsrK5RFTcK4SrD580iwdSQMDECX2XL8MVxTj dsGCUlJ TiW8Qa sWgdFYsZoBwJ6D3LVq2sLJS4rQ
Figura 20. Similitud coseno de todos los elementos

Una vez calculados esos valores construimos un nuevo DataFrame de similitudes coseno.

uA7uh4gMletds0D bTFc39soz9UJrFi9cM CskVubF2m7bbBRWie2447HRltpX 3pWDJMzX47JZOCj8jcCg3ykx 1rC73UmR4FQXPy67hUfzSrI8 uMllYEVmdT2H8XJ2wb owLH1H1G98Rbdg
Figura 21. DataFrame de similitudes coseno

Esto nos permite saber qué películas son más parecidas a una en concreto basándonoslos en sus resúmenes. Si buscamos recomendaciones de películas similares a Harry Potter y el Cáliz de Fuego obtenemos sugerencias para visualizar el resto de la saga.

wDjnsgIWTA0BTyBZ0aOdxw9r2x5eaox4mNZcpbgxzs ljfIqMyU 9 Ps2uqFRaFs 0mBTGlw008Tq7yQ8ZFb90PX8krMZIM7netbS
Figura 22. Recomendaciones de películas similares a Harry Potter y el Cáliz de Fuego

Si hacemos la consulta para el caso del Señor de los Anillos: La comunidad del anillo, vemos que nos recomienda las películas de la trilogía y el Hobbit. También nos recomienda Four Sisters and a Wedding debido a que el protagonista de la película se llama Frodo también.

i7r9Vygsj25ywyBGUUPT9p2dV8gxXvbXt546iwz6ia XxwJHPf0MqbRmNdDLuMrFxI6OYl8ec ZyHjf8PDszZlFhdeDLbAN6T4b0fekWkYFyll0oFvO9HK9N8nLZk GiAm0 Hd2EEAvSf6mSpQ
Figura 23. Recomendaciones de películas similares a El Señor de los Anillos: La Comunidad del Anillo

Añadimos un último caso con la película Mary Poppins. El recomendador nos sugiere como segunda opción ver la película Saving Mr. Banks, que trata sobre la colaboración entre Walt Disney y la escritora de la novela Mary Poppins.

MvsRZ5diIzGU9WEaH qLx8qcskphV9ckU b1f18QjUWZDLIfVFodRkmzCjLD11CxlOZD2CFsKY4
Figura 24. Recomendaciones de películas similares a Mary Poppins

Recomendar en base al perfil del usuario

Lo que no hemos tenido en cuenta hasta ahora es que los usuarios no son tan unidimensionales como para que les guste sólo un elemento. La realidad es que el usuario habrá visto una serie de películas y querrá que la recomendación proporcionada por los algoritmos esté alineada con su amplio gusto.

Consideremos el caso que acabamos de mencionar: un usuario que ha visto una serie de películas. La forma más directa de crear el perfil de usuario es inicialmente, creando un vector que contenga los títulos de dichas películas para conseguir a través del método .loc los vectores de características de las mismas.

T5oy7W6Nx5DPcNIB5mUJVl0A7Vh2 USag88yilJZxWBv1nKpDGIyr
Figura 25. creando el perfil del usuario

Para terminar de construir el perfil de este usuario es necesario representar todas las preferencias del usuario en una única serie. Eso lo conseguimos haciendo la media de cada característica con el método .mean.

TOig00hdb tZYshj XUBqOvzBdP jy7Pb1x4T xYP6ckPq9
Figura 26. Perfil del Usuario

Este perfil del usuario lo usaremos para encontrar las películas con mayor similitud que no haya visto todavía. En primer lugar, tendremos que determinar el subconjunto de películas que no ha visto todavía (eliminando del dataframe del vectorizer todas aquellas películas que están en la lista de vistas). El número de filas ha disminuido de 34886 a 34880 (6 filas).

2Dx71IHWRwMDW6gNo jPQjX7DH5eGVJ2o14nS0GOUgOAnUzV5Bzj0carJu8Rqxakk42zCSBd OUrZr4bPFqPPFdhUVlpJ9rQUGDhqnsHJD42l3s BPEp1oFSBpIbrubyc4mn0RZA6 RomNH1gQ
Figura 27. resultado de eliminar las seis películas vistas por el usuario

Después calcularemos la similitud coseno entre el perfil de usuario que acabamos de crear y el DataFrame de películas que aún no ha visto el usuario. Después, almacenaremos la salida en un nuevo DataFrame y ordenaremos los resultados para poder acceder y ordenar los datos de forma sencilla.

EIjN xavhw7DMZdmzLHnq1Yix1pDT9mCrV6fgYUBk3LZqUKkEjp9KqOcdPOMggX6PiM5ctFJBpGDTugz3VEOmrRDLPqPs Zwcez0VJ7VPLVeqLARx6qP4kBniommaKmVlBSYFylMYwsjl w9yQ
Figura 28. Recomendación basada en el historial del usuario

Ahora si que el algoritmo ha sido capaz de recomendar en base al historial de películas vistas por nuestro usuario, y no sólo basándose en películas individuales. Los registros más arriba en la tabla son los más parecidos a los intereses del usuario en base al background de intereses que recoge su perfil.

Si quieres más información sobre nuestro master, puedes contactar con nosotros bien por teléfono al +34 910 91 28 42 o +34 630 88 13 53, por whatsapp directamente pinchando aquí o aquí, o mandando un mail con tus datos de contacto (nombre completo y teléfono) a: info@datahack.es

Déjanos tu contacto

Scroll al inicio

¡Te ayudamos con tu reserva!

Completa el formulario y te enviaremos toda la información para asegurar tu plaza.

¡Te ayudamos con tu reserva!

Completa el formulario y te enviaremos toda la información para acceder al programa.

¡Te ayudamos con tu dudas!

Completa el formulario y un asesor se pondrá en contacto contigo para enviarte todo la información del programa.

¡Descarga el Programa Completo!

Completa los datos para recibir el PDF al instante en tu correo.

Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.