en APIs que usamos

Recomendaciones Inteligentes usando Strands

Si habéis estado atentos a los últimos lanzamientos de minube, ya sabréis que esta semana hemos lanzado un nuevo servicio de recomendaciones personalizadas. Ya comentábamos en  el blog oficial que para esto usamos la tecnología de Strands. Pero queríamos aprovechar este nuevo lanzamiento, para comentar cómo ha sido la integración desde el punto de vista tecnológico, y además para estrenar una nueva sección en nuestro blog : “APIs que usamos”.

Strands Recommender es uno de los productos de la compañía, que ofrece un servicio de cálculo de recomendaciones personalizadas basadas en la actividad de los usuarios.

La integración ha sido realmente sencilla e intuitiva.

1. Generación de catálogo

El primer paso de cara a la integración fué crear un archivo XML con el catálogo completo de productos (items) que quieres recomendar. En nuestro caso, un catálogo de rincones. La definición del XML que propone Strands es bastante permisiva, y nos permiten definir todos los campos que necesitemos adaptados a nuestro producto. Posteriormente se nos permite hacer matching entre los campos estandar de Strands y los nuestros. Podéis consultar las especificaciones y todo lo relacionado con la generación de catálogos en su documentación, pero os pongo un ejemplo (extraido de la documentación) para que os hagáis a la idea :

<item>
<title>Pulp Fiction</title>
<link>http://www.mymovies.com/film?id=564</link>
<id>564</id>
<price>18</price>
<genre>Crime, Comedy, Dark</genre>
<director>Quentin Tarantino</director>
<actor>John Travolta</actor>
<actor>Samuel L.Jackson</actor>
<actor>Uma Thurman</actor>
<actor>Ving Rhames</actor>
<tag>Hit men</tag>
<tag>Mobsters</tag>
<tag>Violence</tag>
</item>

Después de cargar nuestro catálogo en su sistema (si es muy grande podemos hacerlo por FTP), podemos generar una url en nuestro sistema, que genere las actualizaciones de nuestro catálogo, y Strands Recommender irá actualizando el catálogo diariamente.

2. Captura de Eventos

La captura del comportamiento de los usuarios se realiza a través de eventos. Lo primero es estudiar bien el comportamiento de nuestros usuarios y definir qué eventos clave definen bien la muestra de interés de un usuario por un determinado “item”, y asociarlos con los eventos que Strands ofrece en su catálogo de eventos. Hay acciones que pueden ser activas (me guardo un rincón como favorito), o pasiva (visito un rincón). Strands Recommender captura todos los eventos que hayamos definido, y nos permite aplicar un “peso” determinado a cada evento. De manera que determinados eventos se tengan en cuenta mucho más que otros a la hora de calcular la recomendación.
Para enviar los eventos, usamos un API REST en el que tenemos un tipo de llamada por tipo de evento en el que enviaremos el identificador de usuario y el identificador del item para el que lanzamos el evento. Os adjunto un ejemplo de llamada :

http://bizsolutions.strands.com/webservice/tracking/visited.sbs?customerId=**********&itemId=195&userId=11&needResult=0

3. Solicitud de Recomendaciones

Llegados a este punto, todo el trabajo duro está hecho, ya sólo queda pedir recomendaciones. Para ello tendremos otras funciones disponibles en el API (muy parecidas a las de captura de eventos), que al pasarle el identificador de usuario y algunas reglas de filtrado (que en nuestro caso definirían el destino, categoría, …) nos devolverán un XML con el listado de itemsId que se han calculado recomendados para ese usuario.

Como veis extremadamente sencillo. El mayor trabajo viene luego, a la hora de ajustar la configuración del motor, para que se adapte lo mejor posible a las necesidades de nuestro proyecto.

Strands Recomender no sólo nos permite obtener recomendaciones de items para usuarios, sino que hay muchas otras posibilidades de integración (Usuarios con gustos a fines, Items relacionados con otros Items,…). Seguro que en el futuro ampliaremos nuestra integración y podremos ofreces más y mejores recomendaciones para viajeros.
Desde aquí me gustaría dar las gracias a todo el equipo de Strands  por el excepcional soporte que nos han dado, la ayuda y seguimiento totalmente personalizado. Desde sus ingenieros Javier, Hector, Luz, Juan Antonio,Jaime… hasta Jesús Pindado VP de Strands. Si tenéis algún proyecto y estáis pensando en ofrecer recomendaciones personalizadas, échale un ojo a este magnífico proyecto, porque por un precio muy asequible puedes conseguir un valor añadido que supera con creces el gasto. No nos pagan ni nos hacen descuento por decir esto, que conste jejeje, esto se consigue ofreciendo un buen producto y un gran soporte.

Escribe un comentario

Comentario

  1. Buenas! muy interesante como siempre, un par de dudas que me han surgido.

    1.- Seria posible otorgar prioridad a las recomendaciones, por ejemplo imaginemos que alguien está planeando viajar a Galiza, y se pone a buscar de forma activa/pasiva en minube.

    Pues bien, entiendo las recomendaciones de Strands serian cosas relacionadas con Galiza, pero… a lo mejor nos interesa que de los X espacios de recomendacion al menos 1 siempre sea “xacobeo 2010” tanto porque tiene una importancia mayor (mayor peso) o simplemente porque nosotros le damos mayor peso (al ser patrocinadores…)

    2.- que tipo de informacion entre usuario(minube) -> Strands esta circulando? no puede ser esto algun tipo de problema con la LOPD? lo digo en mi absoluto desconocimiento y poniendo por ejemplo alguien que esté mirando info de templos musulmanes, entiendo que la recomoendacion de strands tiene que ver que este usuario mira mucho templo y creo que la LOPD protege la idiologia religiosa….

    Si, siempre voy a casos extremos.

    Saludos!

  2. Gracias tio ! Interesantes preguntas.

    1. Nosotros aplicamos unos filtros adicionales para “pulir” lo que el motor calcula. Por ejemplo, si visitas la página de Madrid y te recomendamos 3 en portada, en realidad pedimos a Strands muchas más. El motivo es simple, ofrecer lo de mejor calidad de entre lo que se recomienda para un usuario. El orden y peso de las recomendaciones no las tocamos, pero sí que descartamos por ejemplo rincones sin fotos, o sin texto, o con contenido muy pobre. Realmente aplicamos un filtro adicional para quitar lo “feo”.
    Dado el caso, si nos interesase promocionar un contenido por encima de otro, ese filtro sería el lugar adecuado para hacerlo.
    Aunque esto es algo que no nos planteamos hacer ni creo que lo hagamos nunca, porque queremos que lo que se le recomiende a un usuario sea realmente lo que le interesa, no que se le recomiende algo porque está siendo promocionado o pagado de alguna forma. Dejarían de ser personalizadas para ser pseudo-personalizadas.
    Aunque técnicamente sí es posible.

    2. Desde el principio tuvimos este asunto muy en cuenta y lo cuidamos mucho. El flujo de información de usuarios entre Strands y minube es totalmente anónimo. Cuando el usuario con id 3 visita el rincón 195 , Strands recibe que el usuario 3 ha visto el item 195, pero no dispone información del usuario en sí. Sólo dispone de información de los rincones (para extracción de metainformación y keywords).
    A la hora de solicitar recomendaciones, exactamente igual, solicitamos recomendaciones para el usuario 3 en el destino 1896, y Strands devuelve un listado de ids de items.
    Ninguna información que pueda relacionar al usuario con la persona se transfiere entre minube y Strands, por lo que no sería posible ver algo como lo que planteas. Por supuesto, Strands puede ver que el usuario “n” le gustan las mezquitas, pero no sabe a quién corresponde ese id, ni tiene acceso a esa información. Se maneja todo como perfiles anónimos.
    Lo bueno es que además, por la temática de nuestra comunidad, estamos al margen de muchas cosas que podrían incurrir en atentados contra la privacidad. Aún así hay que ir con pies de plomo en este asunto.

    Espero haberte contestado.
    Un saludo !!