Cómo la búsqueda de similitud de vectores puede impulsar los resultados en el gasto del consumidor
La búsqueda de similitud de vectores y su impacto en el gasto del consumidor
Con todo el revuelo acerca de los grandes modelos de lenguaje, los vectores y la búsqueda de vectores, es importante dar un paso atrás y entender cómo estos avances tecnológicos de inteligencia artificial se traducen en resultados para una organización y, en última instancia, para sus clientes.
El problema
Hoy nos reunimos con el equipo de Promociones. Necesitan nuestra ayuda para tomar decisiones más inteligentes sobre anuncios, ofertas y cupones para los clientes. Actualmente, las promociones se basan principalmente en los mercados geográficos. Por lo tanto, las promociones enviadas a los clientes en una ciudad serán diferentes de las promociones ofrecidas a los clientes en otra ciudad. Por lo tanto, estas campañas deben ser planificadas de antemano.
El problema es que el departamento de marketing les está presionando para que proporcionen métodos de orientación más estratégicos, sin importar las regiones geográficas. Se cree que clientes específicos podrían ser más propensos a aprovechar ciertas ofertas según su historial de compras. Si podemos encontrar una manera de ofrecerlas en tiempo real, como un descuento del 10 por ciento en un producto relacionado (por carrito), podríamos impulsar algunas ventas adicionales.
Primero, decidí echar un vistazo a algunos de nuestros datos de pedidos anonimizados en su clúster de Apache Cassandra. Es evidente que definitivamente hay algunos patrones en los datos, con algunos clientes comprando los mismos productos (principalmente productos de abarrotes) con cierta regularidad predecible. ¿Quizás haya alguna manera en que podamos aprovechar estos datos?
Mejorando la experiencia
Una ventaja que tenemos es que nuestros clientes tienden a interactuar con nosotros a través de múltiples canales. Algunas personas usan el sitio web, otras usan la aplicación móvil y algunas personas aún visitan una de nuestras 1,000 tiendas físicas. Y más de la mitad de esos clientes en la tienda usan la aplicación móvil al mismo tiempo.
- Inteligencia Cognitiva AI El camino hacia una IA que piensa como un...
- Explorando datos de población a gran escala en formato raster
- 9 LLMs y Agentes de Código Abierto para Observar
Otro punto interesante: si agregamos los datos de ventas de productos por dirección de hogar en lugar de solo por ID de cliente, vemos patrones de compra aún más rígidos. Después de reunir datos de varias fuentes diferentes, podemos comenzar a tener una idea de cómo se ven estos datos.
Ejemplo: una pareja tiene un perro. Por lo general, uno de los cónyuges compra la comida para perros. Pero a veces, el otro cónyuge lo hace. Esos eventos a nivel de cliente individual no muestran un patrón claro.
Pero cuando se agregan a nivel de hogar, sí lo hacen. De hecho, compran consistentemente más de un rollo de 6 libras de “HealthyFresh – Alimento crudo de pollo para perros” cada semana. A juzgar por las porciones recomendadas, también tienen medio docena de perros pequeños o un perro grande, probablemente este último.
Las tiendas que frecuenta cada cliente también pueden tener importancia aquí. Por ejemplo, nuestra cliente Marie podría estar viajando por trabajo y visitar una de nuestras tiendas a las que nunca ha ido. Si la tienda está a una distancia significativa de su lista de tiendas frecuentes, podemos asumir que Marie probablemente está comprando artículos específicos relacionados con su viaje. En este caso, sus hábitos de compra normales no se aplicarían (probablemente no comprará comida para perros) y no necesitamos presentarle una promoción para animarla a gastar.
Sin embargo, si Marie está en una de sus tiendas frecuentes, podría tener sentido activar una promoción en su dispositivo móvil. Si animamos a nuestros clientes a escanear productos con sus teléfonos, sabremos qué productos están en su carrito de compras físico. Entonces, podemos presentar productos similares para complementar los productos que ya están en el carrito.
Calculando vectores para encontrar productos similares
Encontrar productos similares significa que necesitaremos calcular vectores de similitud para nuestros productos. Hay algunas formas en las que podemos hacer esto. En aras de armar un producto mínimo viable, podemos centrarnos solo en los nombres de los productos y construir un modelo de procesamiento del lenguaje natural (NLP) basado en un enfoque de “bolsa de palabras”.
En este enfoque, tomamos cada palabra de todos los nombres de los productos y asignamos una entrada a cada palabra única. Esta es nuestra vocabulario. Los vectores de similitud que creamos y almacenamos con cada producto se convierten en una matriz de unos y ceros, que indican si el nombre del producto actual posee esa palabra, como se muestra a continuación en la Tabla 1. Podemos usar una plataforma como TensorFlow para construir y entrenar nuestro modelo de aprendizaje automático (ML).
Tabla 1: Un vocabulario NLP de bolsa de palabras para nombres de productos en la categoría de Suministros para mascotas, que muestra cómo se ensambla cada vector.
Un problema con el enfoque de “bolsa de palabras” es que los vectores pueden tener muchos más ceros que unos. Esto puede llevar a tiempos de entrenamiento de modelos más largos y tiempos de predicción más largos. Para reducir esos problemas, construiremos un vocabulario único para cada categoría principal de productos. Los vectores no serán utilizables en diferentes categorías, pero eso está bien porque podemos filtrar por categoría en el momento de la consulta.
A continuación, podemos crear una tabla en nuestro clúster de Apache Cassandra para admitir la búsqueda de vectores para cada categoría específica. Dado que nuestro vocabulario contiene 14 palabras, el tamaño de nuestro vector también deberá ser de 14:
Para que la búsqueda de vectores funcione correctamente, deberemos crear un índice secundario adjunto al almacenamiento (SASI) en la tabla:
CREATE CUSTOM INDEX ON pet_supply_vectors(product_vector) USING 'StorageAttachedIndex';
A continuación, podemos cargar la salida de nuestro modelo de ML en Cassandra. Con los datos presentes, el siguiente paso es agregar un nuevo servicio, que realiza la búsqueda de vectores utilizando la siguiente consulta:
Esto ejecuta un algoritmo de vecino más cercano aproximado (ANN) utilizando el vector almacenado con el producto actual. Esto devolverá tanto el producto actual como el siguiente más cercano (vecino más cercano) mediante la búsqueda de vectores, gracias a la cláusula LIMIT 2.
En la consulta anterior, estamos utilizando el vector del producto “HealthyFresh – Alimento crudo para perros con pollo”, asumiendo que un cliente acaba de agregarlo a su carrito en línea o lo ha escaneado con su teléfono. Procesamos este evento y componemos el siguiente mensaje:
- customer_id: a3f5c9a3
- device_id: e6f40454
- product_id: pf1843
- product_name: “HealthyFresh – Alimento crudo para perros con pollo”
- product_vector: [1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Luego enviamos este mensaje a un tema de Apache Pulsar. Consumimos del tema y usamos los datos anteriores para llamar al endpoint getPromotionProduct en nuestro microservicio de Promociones. Esto ejecuta la consulta indicada anteriormente, devolviendo ambos sabores de “HealthyFresh”. Ignoramos los datos del product_vector que coinciden al 100% (el producto que ya tenemos) y activamos una promoción para el sabor “HealthyFresh – Carne” en su dispositivo:
Conclusiones y Próximos Pasos
Después de ejecutar esta lógica durante un par de semanas, nuestro equipo de Promociones se comunicó y reportó que nuestros métodos están generando una venta adicional aproximadamente el 25% del tiempo. Si bien es tentador llamar a eso una “victoria”, definitivamente hay algunas cosas adicionales que podríamos considerar mejorar.
Optamos por un enfoque de Procesamiento del Lenguaje Natural (NLP) basado en una “bolsa de palabras” solo para sacar un producto inicial (de software) al mercado. He leído cosas buenas sobre diferentes algoritmos de NLP como “Word2Vec”, que pueden ser un enfoque mejor a largo plazo. Nuestro modelo también se preocupaba solo por construir un vocabulario con las palabras que formaban los nombres de los productos. Quizás expandir las entradas de nuestro modelo para incluir otros detalles del producto (por ejemplo, tamaño, color, marca) podría ayudar a ajustar las cosas un poco.
En un próximo artículo, mostraremos cómo utilizamos la búsqueda de vectores para ayudar a nuestro equipo de servicios de transporte a mejorar la eficiencia de sus rutas de entrega.