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

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

Lee la parte 2 aquí.

Las recomendaciones tienen una influencia muy importante en muchas de las decisiones que tomamos en el día a día. Algunos ejemplos de recomendaciones directas podrían ser las que nos dan nuestros amigos sobre los restaurantes a los que han ido el fin de semana o la recomendación de un determinado modelo de teléfono basada en los comentarios de una web.

Graphical user interface, website

Description automatically generated
Figura 1. Motor de recomendación de Disney+.

Otras recomendaciones más indirectas podrían ser las que lanza Disney+ sobre las películas o programas que pueden ser más afines a nuestros gustos, o las propuestas de items que hace Amazon en relación al producto que estás comprando actualmente.

En este y en los próximos posts vamos a hablar sobre la ciencia detrás de estos motores y cómo construirlos de forma sencilla usando Python.

1. Introducción a los motores de recomendación

¿Qué son los motores de recomendación?


Los motores de recomendación son herramientas que usan el feedback de los usuarios para encontrar nuevos elementos que puedan ser afines a estos usuarios u otros, asumiendo que los usuarios con preferencias similares en el pasado probablemente tendrán las mismas preferencias en el futuro.

Estos métodos de recomendación se benefician de multiples emparejamientos entre los usuarios que dan su opinión y los elementos sobre los que opininan. De este modo, se proporcionarán mejores recomendaciones de un producto cuanto mayor sea el feedback recibido sobre el mismo. También se darán recomendaciones más personalizadas a aquellos usuarios que hayan dado más opiniones.

¿Cuándo es interesante usar los motores de recomendación?

Los motores de recomendación pretenden resolver un problema específico de Machine Learning: sugerencia de productos, servicios, entidades a un usuario en base a sus opiniones y de otros usuarios. 

Lo que es importante tener claro si vamos a diseñar un motor de recomendación es que los datos son registros de preferencias de diferentes usuarios. En función de cómo se miden estas preferencias los datos se clasifican en implícitos y explícitos. Los datos explícitos contienen feedback directo de un usuario como por ejemplo su opinión sobre un producto expresada en forma de puntuación (por ejemplo: el número de estrellas con el que puntuamos un producto en Amazon). Por contra, los datos implícitos sacan información de las acciones del usuario para resumir sus preferencias (por ejemplo: histórico de reproducciones en Spotify, que te puede permitir identificar los estilos de música preferidos por ese usuario).

2. Recomendaciones basadas en contenido

Las recomendaciones pueden realizarse basadas en la opinión general. Sin embargo, este tipo de recomendaciones no son personalizadas. En este post os vamos a enseñar distintos modelos para hacer recomendaciones a un usuario basándonos en la similitud de unos items con otros que le gustaron al usuario en el pasado. Es decir, si al usuario en cuestión le gustó la película A, y mi modelo determina que las películas A y B son similares, entonces es bastante probable que al usuario le guste la película B también. En este post os mostraremos como determinar qué items son similares. Estas recomendaciones que se llevan a cabo encontrando elementos con atributos similares se denominan recomendaciones basadas en contenido.

EaYVWGGhP rdcS5x9Sbwp1HKtWAC0jWXbRfwq29u6lbwYI2ehj3mN5yiAhhQ kMrQOXO jYJwA4Y0 t0TudXVZ1O3ZtMCStRaNnE4kNXlVLJjerGZssBct4NC3XFcVRW6 9RVl are1UGJiVOw
Figura 2. Recomendaciones basadas en contenido.

Atributos o características de cada elemento

Pongamos por caso que tenemos un dataset de películas. Los atributos de cada película podrían ser: título, director, fecha de estreno, género, actores protagonistas, duración, idioma, etc. Dentro de estos atributos podríamos incluir cualquier información descriptiva. La gran ventaja de usar estos atributos junto a la opinión de los usuarios es que se pueden hacer recomendaciones de cualquier elemento con atributos. Esto permite recomendar incluso nuevos items que los usuarios no tengan en el radar aún.

Los modelos basados en contenido usan cualquier característica disponible para construir perfiles de items que nos permitan a los científicos de datos compararlos matemáticamente. Esto nos permitirá identificar elementos similares y recomendarlos.

YPf JCFlq7lIfKPjg67g
Figura 3. Atributos de una película.

Vectorización de atributos

La mejor manera de extraer información de estos atributos es vectorizándolos. A continuación se muestra un ejemplo donde aparecen diferentes elementos por filas y las características o atributos posibles por columnas.

Y os preguntareis, ¿por qué organizar los datos de esta manera?. Organizar la información de forma tabular nos permite calcular la distancia o similitud entre elementos de forma sencilla, lo cual es vital para hacer las recomendaciones de las que estamos hablando en este post.

Figura 4. Vectorización de los datos (formato tabular).

A continuación, aprenderemos a generar estas tablas a partir de los datos. En esta ocasión, vamos a usar un dataset de películas (movies.csv). A partir de la tabla que se muestra a continuación, queremos obtener una nueva tabla que contenga una fila por película (una película puede aparecer varias veces en el dataset original porque puede clasificarse dentro de varios géneros) con un 1 en aquellos atributos que la representen y ceros en los que no.

Figura 5. Carga del dataset original.

Para transformar los datos podemos usar la función crosstab de pandas. El primer argumento que le pasemos a la función se convertirá en las filas y el segundo en las columnas. A continuación obtenemos el resultado deseado.

TkmipZMR5yGJD6IBx1OPFXw0nZ7HFacyJbI6TMfH5g bjf QXj7oTh2d9748m8 Fe8g5ReKAZfeamh l3TmLcpYMYeFiKCHsnqz7WDyHN41nLNQQNgZCT4QHHl2wvWXQpRLwIfXUnBAS6nf fQ
Figura 6. Cross_tab de películas y géneros con Pandas.

Con nuestros datos en el formato adecuado estamos en disposición de comenzar a hacer comparaciones y recomendaciones. Pero para ello, tenemos que encontrar la manera de calcular el grado de similitud entre filas.

Introducción al coeficiente de similitud de Jaccard

La métrica que vamos a usar para medir el grado de similitud entre los distintos elementos de nuestra tabla «encodeada» se llama coeficiente de similitud de Jaccard. Este coeficiente es el ratio de atributos que dos elementos tienen en común, dividido por el número total de atributos de ambos. Este coeficiente toma valores entre 0 y 1, y adquiere valores más altos cuanto mayor es el número de atributos en común de los dos elementos.

RufCT8DnZEDFdIDvPYRWUW6yv6jARBn TZ6WT8TVtYqdBldyom7zFDxkG28DLrHN6LGB8M1nrTu3fbCZq06zoA07XCx T4e7deZpWaCeNh4vOVSbaXZ3IFG5rJ UKIQ3WiYbqpu7sRGC3TFp5Q
Figura 7. Coeficiente de similitud de Jaccard (fórmula).

Pasamos a calcular el coeficiente de similitud de Jaccard para los datos con los que hemos empezado a trabajar. Empezaremos importando jaccard_score de la biblioteca sklearn metrics. Esta función toma dos filas y calcula el grado de similitud entre ellas. 

A continuación mostramos el resultado de comparar dos películas del género animación (‘Tangled’ y ‘WALL-E’). Puesto que pertenecen al mismo género el coeficiente de similitud de Jaccard es 1. Sin embargo, cuando comparamos dos de distinto género como ‘Remember me’ que es un Drama y WALL-E, el resultado es 0.

RfWDe8 2qkB15XEKQ3pwBEHe2uovs8Jqg1VDYfEQOrmpBcvMKMAmyk9NhydZalGgDMwWdkrZ9215lHMWrzDACMLP5V3o8QNKXLd8tLw4MYKVif6B77V9HlIa6unPFv3YKb9L4MOUfrcj hRkAg
Figura 8. Cálculo del coeficiente de similitud de Jaccard con Scikit Learn.

Si queremos establecer similitudes entre todos los elementos de nuestro dataset de una vez hacemos uso de dos funciones del paquete Scipy. En primer lugar, pdist (el nombre corto para pairwise distance) nos ayuda a calcular las distancias de todos los pares posibles, usando como argumento la métrica Jaccard. El resultado es una matriz que contiene todas las distancias en formato 1D array. Por ello, tendremos que usar la función squareform para transformar estos datos en 1D a la forma rectangular de matriz deseada.

8EeN Vdw3SEDOjpWT0On
Figura 9. Calculo de la distancia de Jaccard con Scipy.

Nótese que el cálculo que hacemos con la función pdist es la distancia, que expresa el grado de diferencia entre cada uno de los registros. Los elementos de la diagonal, que comparan un elemento con el mismo, muestran una distancia de 0 porque son iguales y por tanto el grado de diferencia es nulo. Como estamos interesados en calcular el grado de similitud que es el complementario de la operación que acabamos de realizar, restaremos a 1 los valores de matriz_cuadrada_distancias.

tJd2uI7rrLXYLE7sKpsu57cexs83z0jwG 5lyme6xZ3CP IuO iHtq5b3txvusHBQy0lEFuLIWPQWcqXtJf2We ngzXuJnGzBaG8zQC0 joKwSaPkH gSR3MdJMVt1JX88DOncNA68GfZ7KzRA
Figura 10. Cálculo del coeficiente de similitud de Jaccard on Scipy.

Para poder usar esta información con mayor comodidad, podemos pasar estos datos a un DataFrame. El DataFrame contendrá como argumento principal los valores de coeficiente_similitud_jaccard y como índices y columnas los nombres de las películas.

5NyVn e9t0FPRthCqI5UsBu7SHaMUpJ9WiFB CrY18Lhw U1v4Qtn6OJguqcT1quS kWG2gQKX5FBOiP2vDP 0HQ28Uqs28x2jsf yaXBv6O8EUgxLEXruY bdtoUdWgJT HBk9lAEV2VDr Q
Figura 11. DataFrame con coeficientes de similitud de Jaccard.

Ahora podemos buscar cómodamente la distancia entre pares.

RoYtx3YVh6K51ripsqBEWwz79AG40huD3Uam12hP77FnCx BJQFECXPPQur6p3Tb7LEwHar8cK93yu Z7QDlAswAnRu8dD SwRX8iRrnH Pw 8vp2tJ7mbIKM9AqK6XCT9KrOnGS1pkZfTrl7w
Figura 12. Comparación del grado de similitud entre dos películas.

Sigue en parte 2 aquí.

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.