¿Alguna vez te has planteado cómo funciona Tinder? ¿Cómo es posible que la aplicación te junte con personas que podrían ser compatibles contigo? En este mundo digital, las flechas no las lanza precisamente Cupido, sino la ciencia de datos. Este tipo de apps de citas utilizan algoritmos que analizan enormes cantidades de datos para encontrar parejas compatibles y acertar en sus pronósticos. Que Pablo conociese a Marta en Tinder y estén a punto de casarse no es solo amor, sino miles y miles de datos que se cruzan cada segundo para acertar con la combinación ganadora. Pero ¿cómo funcionan exactamente? Estas plataformas se basan en sistemas de recomendación que utilizan la información proporcionada por los usuarios para buscar perfiles similares.
¿Quieres saber más sobre estos modelos algorítmicos? ¡Este artículo es para ti!
A grandes rasgos, los motores de recomendación son técnicas de inteligencia artificial y aprendizaje automático que sirven para predecir el comportamiento de los usuarios y en base a eso, recomendarles productos relevantes y personalizados, lo que ayuda a mejorar significativamente su experiencia y aumentar su satisfacción y lealtad hacia la marca. Es muy probable que interactúes a diario con ellos sin darte cuenta, como las sugerencias de películas que te hace Netflix, las canciones que te recomienda Spotify o como hemos visto antes, los usuarios que te aparecen en Tinder.
¿Cómo funcionan? Básicamente, utilizan datos históricos y el propio trazado y experiencia que van dejando los consumidores y a través de toda esta información, son capaces de generar predicciones precisas sobre qué elementos serán de mayor interés para ellos. Por ejemplo, es muy probable que los clientes que compren un vestido de fiesta también compren unos tacones que peguen con ese vestido. En ese caso, se le podría recomendar al usuario que haya mirado o comprado ese vestido, que también les eche un ojo a los tacones diciendo "los clientes que compraron este vestido, también eligieron estos tacones”.
Existen varios métodos para generar motores de recomendación. El más adecuado depende del tipo de conjunto de datos con el que trabajes y de los objetivos de tu empresa. Vamos a analizar cada uno de ellos.
Volvamos al ejemplo del artículo anterior: eres propietario de una tienda de golosinas, pero en este caso en vez de predecir tu demanda, quieres lanzar una campaña de e-mail marketing que utiliza la IA para generar recomendaciones individualizadas y personalizadas de caramelos para los usuarios. Imagina también que todos tus clientes han puntuado del 1 al 5 los dulces que han probado y en este caso, quieres hacerle la recomendación a tu cliente concreto: Jaime (cómo no).
Los datos clave para la mayoría de los algoritmos de recomendación se almacenan en un conjunto de datos denominado matriz de utilidad, como se muestra en la imagen, que contiene el comportamiento de compra o las valoraciones anteriores de cada combinación de usuario y producto. Normalmente, el objetivo de un motor de recomendación es predecir los valores desconocidos y recomendar productos con valores predichos altos para un usuario individual.
Este es un ejemplo muy sencillo ya que una matriz de utilidad suele ser muy amplia y dispersa y es bastante probable que los usuarios solo hayan opinado o interactuado con un pequeño subconjunto de productos. En el ejemplo anterior, la mayoría de los clientes de tu tienda de golosinas no habrán probado o valorado todos los productos al igual que la mayoría de los usuarios de Netflix no habrán visto todas las películas. Esta escasez entrará en juego cuando evaluemos los diferentes enfoques.
También hay que tener en cuenta que aquí tenemos datos de valoración explícitos, es decir, se trata de un motor de recomendación explícito. Muchas veces solo tenemos datos implícitos, como compras anteriores, preferencias o gustos, que utilizaremos como proxy para los datos de calificación, representados como ceros y unos.
Hay dos métodos principales para generar recomendaciones:
Filtrado basado en contenido
Filtrado colaborativo
Los motores de recomendación basados en contenido buscan similitudes entre contenidos.Utilizan la información de un producto para recomendar al usuario artículos similares a los que le han gustado en el pasado. Si recomendáramos canciones, podríamos fijarnos en el género, el artista, la duración o la letra de la canción, por ejemplo.
Para aplicar esto en el caso de Jaime, deberás crear un vector de elementos para cada elemento de tu conjunto de datos y un vector de usuarios que resuma sus preferencias. Los vectores de elementos contienen características que describen cada uno de los elementos. En este ejemplo, los vectores de artículos pueden contener información como los ingredientes de los dulces, sus calorías, categoría de caramelo, etc., como en el caso de Twix en esta imagen.
A partir de los vectores de artículos de los caramelos que le gustan a Jaime, puedes deducir un vector de usuarios o las características de los caramelos que le gustan. El método más sencillo consiste en generar una media ponderada de los vectores de artículos, en la que los caramelos que más le gustan a Jaime tienen más peso. A partir del vector de usuario de Jaime, se aprecia que tiende a inclinarse por los caramelos de chocolate y que le gustan menos los caramelos de gelatina, como los ositos de gominola.
Una vez que has generado un vector de usuario, podrás calcular la similitud entre el vector de usuario y cada uno de los vectores de artículos. Se pueden utilizar varias métricas de distancia, pero la más común es la similitud coseno. La similitud coseno mide el tamaño del ángulo entre dos vectores, y los valores van de -1 a 1, donde:
1 indica un ángulo cercano a 180° o vectores opuestos
0 indica un ángulo cercano a 90° o vectores ortogonales no relacionados
1 indica un ángulo cercano a 0° o vectores idénticos.
Puedes visualizar este concepto si imaginas que en cada vector existe en un espacio bidimensional, con solo dos características (como en la imagen que te mostramos a continuación). Como el ángulo (θ) entre el vector de usuario de Jaime y el vector de elementos de los Lacasitos es pequeño, existe una similitud coseno alta y puedes predecir que a Jaime le gustarán los Lacasitos. Existe una relación ortogonal -o perpendicular- entre el vector usuario de Jaime y el vector artículo de los Gummies, lo que indica que a Jaime probablemente le resultarán indiferentes los Gummies. Por último, el ángulo muy obtuso entre el vector usuario de Jaime y el vector artículo ositos Haribo indica que a Jaime probablemente no le gustarían los ositos Haribo.
Tras calcular las similitudes entre el vector de usuario de Jaime y los vectores de artículos de todos los caramelos que aún no ha comprado, tendrás que ordenar estos caramelos por orden de similitud y recomendarás los N caramelos principales o los "vecinos más cercanos". En la imagen de abajo, puedes ver que a Jaime le gustan los caramelos verdes, que tienen características similares a los caramelos azules, que aún no ha comprado, por lo que los caramelos azules podrían ser un buen producto para recomendarle.
Este es un ejemplo muy simple, a menudo trabajarás y te encontrarás con tipos de datos más complejos, como datos de texto o imágenes. Para convertir esta información no estructurada en algo que una máquina pueda entender, primero tendrás limpiarla y preprocesarla y después, vectorizarla o convertirla en un formato numérico. Hay muchas formas de vectorización, pero para explicar todo eso necesitaríamos otro artículo entero.
Tienes que tener en cuenta que también hay otros métodos de generación de recomendaciones basadas en contenido, como la construcción de una clasificación tradicional (para predecir gustos) o los modelos de regresión (para predecir el valor de una calificación), el Clustering para encontrar elementos similares o el Deep Learning para conjuntos de datos aún más dispersos como los datos de imágenes, pero el enfoque que hemos visto (K-vecinos más cercanos) es uno de los métodos más utilizados.
El filtrado basado en el contenido presenta varias ventajas:
No requiere datos sobre otros usuarios
Puede generar recomendaciones tanto para artículos nuevos como para poco conocidos, así como para usuarios con gustos únicos y especiales
Tiene una interpretación relativamente sencilla
Sin embargo, también posee algunas desventajas:
Genera dificultades a la hora de extraer toda la información relevante, ya que los gustos de los usuarios son complejos y los usuarios no suelen ser fieles a una categoría concreta, ya sea de dulces, de música o de género cinematográfico
Posee limitaciones, ya que solo puede recomendar productos similares a compras anteriores
Existe un problema del arranque en frío para los nuevos usuarios: no hay información previa ni valoraciones
El filtrado colaborativo busca similitudes entre usuarios, es decir, si dos usuarios han consumido el mismo contenido o comprado los mismos productos se les considera similares y se cruzan esas recomendaciones.
Este modelo resuelve muy bien los dos primeros inconvenientes del filtrado basado en contenido, ya que se centra en los patrones de valoración anteriores en lugar de en la información del producto. Esta técnica se basa en la suposición de que los usuarios tienen gustos específicos y los patrones de valoración anteriores son todo lo que se necesita para predecir valoraciones futuras.
Existen dos métodos clave dentro del filtrado colaborativo:
Filtrado basado en la memoria
Filtrado basado en modelos
Este método utiliza datos directamente de la matriz de utilidad para encontrar "vecinos cercanos", que pueden representar usuarios similares o artículos similares, dependiendo del eje considerado. Si las recomendaciones se hacen a lo largo del eje del usuario, se basan en el usuario, y si se hacen a lo largo del eje del artículo, se basan en el artículo. Vamos a ver ambos:
Basado en el usuario
El método basado en el usuario se basa en la suposición de que las personas a las que les han gustado muchos de los mismos productos en el pasado tienen gustos similares, y que esto puede utilizarse para encontrar preferencias. Por ejemplo, si a Ana le gustan las piruletas de fresa, las picotas y los regalices, y a Jaime le gustan las picotas y las piruletas de fresa, podemos recomendarle a George los regalices.
Funciona así:
Primero se calculan las similitudes entre Jaime y el resto de clientes del conjunto de datos. Esta métrica de similitud (similitud del coseno, correlación de Pearson, etc.) mide la similitud entre las filas de tu matriz de utilidad, es decir, la frecuencia con la que los dos clientes valoran los caramelos de forma similar.
Luego se predicen las valoraciones de todos los caramelos que Jaime aún no ha probado. Las valoraciones predichas son una suma ponderada de las valoraciones anteriores de los usuarios de cada caramelo. Las valoraciones de usuarios muy similares a Jaime tendrán más peso, y viceversa.
Después, se seleccionan los mejores caramelos ordenando todos los caramelos de mayor a menor valoración prevista y se recomiendan los N mejores.
Este método es relativamente sencillo, pero lleva bastante tiempo y es caro desde el punto de vista computacional, ya que hay que calcular las similitudes entre cada combinación de usuarios del conjunto de datos. Si el conjunto de datos tiene muchos más usuarios que elementos, calcular similitudes entre elementos puede ser más eficiente. Esto nos lleva al filtrado colaborativo elemento-elemento.
Basado en elementos
En lugar de encontrar similitudes entre usuarios, con este método encontraremos similitudes entre elementos. Por ejemplo, imagina que sabes lo siguiente:
A Borja le gustan las picotas, las piruletas de fresa y los bastones de caramelo.
A Ana le gustan las picotas, las piruletas de fresa y los regalices de sidral.
A Jaime le gustan los caramelos de manzana.
Podemos deducir que las picotas son probablemente similares a las piruletas de fresa, ya que hemos visto que tanto a Borja como a Ana les gustan ambos, y como ahora sabemos que a Jaime le gustan las picotas, podría ser un buen producto para recomendar.
Así es como se generan estas recomendaciones:
Primero se calculan las similitudes entre todos los elementos del conjunto de datos. Esto refleja la similitud en las valoraciones anteriores de los usuarios entre los caramelos o la similitud entre las columnas en el conjunto de datos.
Luego se predicen las valoraciones de todos los caramelos que Jaime aún no ha probado. Para predecir la valoración que Jaime dará a las picotas, obtendríamos una suma ponderada de las valoraciones anteriores de Jaime, en la que los caramelos más parecidos a las picotas tendrían más peso.
Después, se recomiendan los mejores caramelos ordenándolos de mayor a menor según la valoración prevista y recomendando los N mejores.
En general, este tipo de métodos basados en compras y valoraciones anteriores suelen ser bastante sencillos, pero requieren muchísimo tiempo y bastantes recursos informáticos. Los basados en elementos suelen ser un poco más eficaces que los basados en usuarios, ya que los elementos son más sencillos que los usuarios y suelen pertenecer a categorías específicas, mientras que los usuarios suelen tener gustos muy complejos y especiales. El método basado en elementos también suele ser más eficiente porque un conjunto de datos suele tener menos elementos que usuarios, pero para ampliarlo a un conjunto de datos muy grande, suele ser mejor el método basado en modelos que vamos a ver a continuación.
Los métodos basados en modelos más comunes aprovechan la factorización de matrices, una familia de algoritmos de reducción de la dimensionalidad cuyo objetivo es descomponer una matriz en dos o más matrices más pequeñas. Esto se basa en el supuesto de que los conjuntos de datos poco extensos tienden a tener algunas características latentes u ocultas y en lugar de examinar cada artículo del conjunto de datos, se pueden proyectar estos artículos en varias categorías latentes, y lo mismo ocurre con los usuarios.
Por ejemplo, los caramelos de una determinada categoría, como los caramelos de chocolate o los caramelos de gelatina, pueden tender a tener patrones de valoración similares. Cada una de estas categorías se consideraría un rasgo latente y, en lugar de examinar cada caramelo individualmente, podrías agrupar todos los caramelos de una categoría en una columna. A menudo, las categorías no están tan claramente definidas, por lo que un enfoque de reducción de la dimensionalidad basado en modelos suele ser la mejor forma de distinguir las categorías latentes que existen en un conjunto de datos.
Puedes descomponer tu matriz de utilidad en dos matrices más pequeñas, una que capture todos tus clientes y las características latentes de los caramelos y otra que capture todos los caramelos y las características latentes de los clientes. En imagen que tienes a continuación, los clientes y los caramelos tienen dos características latentes cada uno.
Hay varios métodos para generar estas matrices. La descomposición de valores singulares (DVS) y la factorización de matrices no negativas (NMF) son dos de los algoritmos de descomposición más habituales en los sistemas de recomendación. Asimismo, existen dos procedimientos clave para optimizar los valores de las matrices de usuarios y elementos: Mínimos Cuadrados Alternos (ALS) y Descenso Gradiente Estocástico (SGD). Las matemáticas que tienen detrás estos algoritmos quedan fuera del alcance de este artículo introductorio, pero para que te quede claro: la idea principal es que se descompone una matriz en dos más pequeñas que sean capaces de capturar características latentes clave.
Una vez que hayas convertido tu matriz de utilidad (cliente*caramelo) en matrices de usuario (cliente) y de artículo (caramelo), podrás multiplicar estas dos matrices más pequeñas para aproximar los valores que faltan en la matriz de utilidad. Una vez más, tendrás que ordenar las valoraciones previstas para los caramelos que Jaime aún no ha probado y así recomendarle los N mejores.
Aunque la reducción de la dimensionalidad dificulta un poco la interpretabilidad, la factorización matricial tiende a generar las predicciones más sólidas de todos los métodos que hemos enumerado, ya que la reducción de la dimensionalidad reduce el sobreajuste y ya no estamos sujetos a las restricciones de los métodos basados en el contenido. Además, el consumo de memoria se reduce considerablemente al disminuir el tamaño de las matrices con las que trabajamos y centrarnos en los factores latentes clave.
Dicho esto, los algoritmos de filtrado colaborativo que hemos ido viendo comparten algunas desventajas:
Problema de arranque en frío: no se dispone de una información sobre las valoraciones anteriores de nuevos usuarios o productos. Existen varias formas de solucionar este problema: para los nuevos productos, se puede utilizar un sistema basado en el contenido o destacar sobre ellos una "sección de novedades" y para los nuevos usuarios se puede empezar con algo tan sencillo como los elementos más demandados hasta que se recopile más información. Todo hay que decirlo, es un claro inconveniente.
Dispersión y complejidad computacional: incluso con la factorización matricial, podemos encontrarnos con problemas de consumo de memoria si se trabaja con conjuntos de datos muy grandes. En esta situación, normalmente hay que recurrir a la computación distribuida a través de Spark o Hadoop.
Sesgo de popularidad: los artículos que suelen recibir valoraciones altas probablemente tendrán valoraciones predichas altas para los usuarios y los elementos de nicho no se recomendarán con frecuencia.
En conclusión, a medida que las marcas han ido recopilando más y más datos sobre el comportamiento de los usuarios, los motores de recomendación se han vuelto cada vez más valiosos a la hora de generar recomendaciones. Es una realidad que estos sistemas han logrado cambiar la forma en la que consumimos y descubrimos nuevos productos. Son fundamentales ya que pueden exponer a un usuario a contenidos que de otro modo no habría encontrado o mantener a un usuario interesado durante más tiempo del que no habría estado en otra situación.Estas recomendaciones son cruciales para impulsar el compromiso de los consumidores y garantizar que vuelvan a comprarte.
Por cierto, ¡nosotros también queremos hacerte una recomendación! Aquí te dejamos estos vídeos para que acabes de ser todo un experto en esta materia.