Cómo construir un motor de recomendación en tiempo real utilizando bases de datos de grafos

Construcción de un motor de recomendación en tiempo real con bases de datos de grafos.

“Esto es para ti”, “Sugerido para ti” o “También te puede gustar”, son frases que se han vuelto esenciales en la mayoría de los negocios digitales, especialmente en el comercio electrónico o plataformas de streaming.

Aunque pueden parecer un concepto simple, implican una nueva era en la forma en que los negocios interactúan y se conectan con sus clientes: la era de las recomendaciones.

Seamos honestos, la mayoría de nosotros, si no todos, nos hemos dejado llevar por las recomendaciones de Netflix mientras buscamos qué ver, o nos dirigimos directamente a la sección de recomendaciones en Amazon para ver qué comprar a continuación.

En este artículo, voy a explicar cómo se puede construir un Motor de Recomendación en Tiempo Real utilizando bases de datos de gráficos.

¿Qué es un Motor de Recomendación?

Un motor de recomendación es una herramienta que aplica filtrado avanzado de datos y análisis predictivo para anticipar y predecir las necesidades y deseos de los clientes, es decir, qué contenido, productos o servicios es probable que consuma o utilice un cliente.

Para obtener estas recomendaciones, los motores utilizan la combinación de la siguiente información:

  • Los comportamientos y el historial pasados del cliente, por ejemplo, productos comprados o series vistas.
  • Los comportamientos y las relaciones actuales del cliente con otros clientes.
  • La clasificación del producto por parte de los clientes.
  • Los productos más vendidos del negocio.
  • Los comportamientos y el historial de clientes similares o relacionados.

¿Qué es una base de datos de gráficos?

Una base de datos de gráficos es una base de datos NoSQL donde los datos se almacenan en estructuras de gráficos en lugar de tablas o documentos. Una estructura de datos de gráficos consta de nodos que pueden estar conectados por relaciones. Tanto los nodos como las relaciones pueden tener sus propiedades propias (pares clave-valor), que los describen aún más.

La siguiente imagen introduce los conceptos básicos de la estructura de datos de gráficos:

Motor de Recomendación en Tiempo Real para Plataformas de Streaming

Ahora que sabemos qué es un motor de recomendación y una base de datos de gráficos, estamos listos para aprender cómo podemos construir un motor de recomendación utilizando bases de datos de gráficos para una plataforma de streaming.

El siguiente gráfico almacena las películas que han visto dos clientes y la relación entre los dos clientes.

Teniendo esta información almacenada como un gráfico, ahora podemos pensar en recomendaciones de películas para influir en la próxima película a ver. La estrategia más simple es mostrar las películas más vistas en toda la plataforma. Esto puede ser fácil usando el lenguaje de consulta Cypher:

MATCH (:Customer)-[:HAS_SEEN]->(movie:Movie)
RETURN movie, count(movie)
ORDER BY count(movie) DESC LIMIT 5

Sin embargo, esta consulta es muy generalista y no tiene en cuenta el contexto del cliente, por lo que no está optimizada para ningún cliente en particular. Podemos hacerlo mucho mejor utilizando la red social del cliente, consultando las relaciones de amigos y amigos de amigos. Con Cypher es muy sencillo:

MATCH (customer:Customer {name:'Marie'})
    <-[:IS_FRIEND_OF*1..2]-(friend:Customer)
WHERE customer <> friend
WITH DISTINCT friend
MATCH (friend)-[:HAS_SEEN]->(movie:Movie)
RETURN movie, count(movie)
ORDER BY count(movie) DESC LIMIT 5

Esta consulta tiene dos partes divididas por la cláusula WITH, que nos permite pasar los resultados de la primera parte a la segunda.

Con la primera parte de la consulta, encontramos al cliente actual ({name: 'Marie'}) y recorremos el gráfico buscando los amigos directos de Marie o sus amigos (amigos de amigos) utilizando la notación flexible de longitud de ruta -[:IS_FRIEND_OF*1..2]-> que significa uno o dos niveles de relación IS_FRIEND_OF.

Nos aseguramos de no incluir a Marie en los resultados (la cláusula WHERE) y de no obtener amigos de amigos duplicados que también sean amigos directos (la cláusula DISTINCT).

La segunda mitad de la consulta es igual que la consulta más simple, pero ahora en lugar de tener en cuenta a todos los clientes en la plataforma, estamos teniendo en cuenta a los amigos de Marie y los amigos de sus amigos.

Y eso es todo, acabamos de construir nuestro motor de recomendación en tiempo real para una plataforma de streaming.

 

Conclusión

 

En este artículo se han abordado los siguientes temas:

  • Qué es un motor de recomendación y la cantidad de información que utiliza para hacer recomendaciones.
  • Qué es una base de datos de grafo y cómo se almacenan los datos como un grafo en lugar de una tabla o documento.
  • Un ejemplo de cómo podemos construir un motor de recomendación en tiempo real para plataformas de streaming utilizando bases de datos de grafo.

    José María Sánchez Salas vive en Noruega. Es un ingeniero de datos freelance de Murcia (España). En medio de los mundos de los negocios y el desarrollo, también escribe un boletín de ingeniería de datos.