Este documento describe un proyecto de fin de carrera para desarrollar un sistema de recomendación para sitios de ocio en Andalucía. Presenta los componentes iniciales del sistema como una base de datos de sitios, votaciones de usuarios y comentarios. Luego propone mejoras como incluir las 8 provincias andaluzas, un sistema de recomendación, una versión móvil y soporte multiidioma. Explica diferentes técnicas de recomendación como filtrado colaborativo y recomendación basada en contenido usando modelos probabilí
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Sistema de recomendación para sitios de ocio en Andalucía
1. Un sistema de recomendación para sitios de ocio de Andalucía Autor: Manuel Martín Salvador Tutor: Juan Huete Guadix Proyecto Fin de Carrera | Ingeniería Informática | Universidad de Granada
3. Manuel Martín Salvador Introducción: situación inicial - Base de datos con información de sitios - Sistema de votación - Sistema de comentarios y fotografías de los sitios - Usuarios registrados - Buscador - Mapa - Eventos y hoteles - Amigos - Mensajería privada
4. Manuel Martín Salvador Introducción: mejoras planteadas - Incluir las 8 provincias andaluzas - Sistema de recomendación - Incentivar al usuario - Versión mobile - Multi-idioma
6. Manuel Martín Salvador Los sistemas de recomendación Factores importantes - Facilidad de uso - Calidad de las recomendaciones - Transparencia del sistema Casos de uso - Predicción - Recomendación
7. Manuel Martín Salvador Los sistemas de recomendación Clasificación - Sistemas de filtrado colaborativo - Sistemas de recomendación basados en contenido - Sistemas de recomendación híbridos Técnicas de recomendación - Modelos probabilísticos - Clustering - Árboles de decisión - Redes neuronales - Vecinos
8. Manuel Martín Salvador Sistema de recomendación basado en contenido Elementos involucrados - Sitios (ítems) I j Ej. Restaurante Wok - Etiquetas (descriptores) F k Ej. Buffet, Japonés, Terraza... - Jerarquías de etiquetas C u Música, Estilo, Instalaciones, Otros - Votos del usuario - Conjunto de valoraciones R={0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5} - Perfil de usuario Ej. Pop, Vegetariano, Wifi... - Sitio a predecir para el usuario activo
9. Manuel Martín Salvador Sistema de recomendación basado en contenido Modelo probabilístico: red Bayesiana - Grafo dirigido acíclico: nodos (variables) + arcos (relaciones) - En cada nodo X i -> distrib. de probabilidad condicional
10. Manuel Martín Salvador Sistema de recomendación basado en contenido Modelo probabilístico: red Bayesiana - Grafo dirigido acíclico: nodos (variables) + arcos (relaciones) - En cada nodo X i -> distrib. de probabilidad condicional
11. Manuel Martín Salvador Sistema de recomendación basado en contenido Modelo probabilístico: red Bayesiana - Grafo dirigido acíclico: nodos (variables) + arcos (relaciones) - En cada nodo X i -> distrib. de probabilidad condicional Problema Ya que un nodo puede ser o no relevante, se necesitarían calcular 2 n distribuciones de probabilidad. ( n = número de padres) Solución Usar un modelo canónico de suma de pesos
13. Manuel Martín Salvador Sistema de recomendación basado en contenido Predicción del voto - Problema: dado un sitio nuevo calcular su estimación del voto Procedimiento 1º Se incluye el sitio en el modelo 2º Se propagan las probabilidades del sitio a sus etiquetas 3º Se hace una propagación top-down Se puede ver con más detalle en la memoria
17. Manuel Martín Salvador Sistema de recomendación basado en contenido Predicción del voto Valoración NR 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 Probabilidad 0.784 0 0 0 0 0 0 0 0.043 0 0.173 Normalizada 21.6% 0 0 0 0 0 0 0 0.199 0 0.801 - Voto promedio Ej: 4.8 - Voto mediano Ej: 5 - Voto máximo Ej: 5
18. Manuel Martín Salvador Sistema de recomendación basado en contenido Limitaciones - Problema del cold-starting Estrategias de resolución: 1. Ignorar al usuario 2. Tratarlo como el usuario medio 3. Sitios populares - Recomendación de sitios mal valorados Solución adoptada: umbral
19. Manuel Martín Salvador Sistema de filtrado colaborativo Vecinos más cercanos : aquellos usuarios más similares
20. Manuel Martín Salvador Sistema de filtrado colaborativo Procedimiento Dado un sitio a predecir: 1º Calcular la similaridad del usuario activo con todos los usuarios que han votado el sitio 2º Seleccionar los k mejores 3º Predecir el voto, utilizando las valoraciones de los usuarios
21. Manuel Martín Salvador Sistema de filtrado colaborativo Medidas de similaridad - Coseno COS - Correlación de Pearson COR - Correlación de Pearson limitada CPC
22. Manuel Martín Salvador Sistema de filtrado colaborativo Limitaciones - Problema del cold-starting : 1. Usuario nuevo 2. Sitio nuevo 3. Comunidad nueva - Recomendaciones en otras ciudades
23. Manuel Martín Salvador Evaluación: colección de datos - Usuarios registrados: 330 - Usuarios que han rellenado su perfil: 27 - Usuarios con más de 1 voto: 54 - Usuarios con más de 5 votos: 27 - Usuarios con más de 10 votos: 15 - Sitios: 331 - Votos: 536 Votos Votos medios
24. Manuel Martín Salvador Evaluación: métricas y metodología Métricas - Error medio absoluto (MAE) - Error cuadrático medio (MSE) - Porcentaje de predicción Metodología - Entrenamiento 80% + Test 20% - Leave one out
26. Manuel Martín Salvador Soluciones desarrolladas 1. Cambio de plataforma: django 2. Incentivos para el usuario 3. Sistema de recomendación 4. Jerarquización de etiquetas 5. Versión mobile 6. Soporte multi-idioma 7. Blog y feeds
Hola, soy Manuel Martín y os voy a presentar el proyecto AndalucíaPeople.
El origen de este proyecto surge en el año 2006, que es cuando empezaron a popularizarse en Internet las tecnologías que facilitan el geoposicionamiento como Google Maps. A raíz de una conferencia precisamente de Google en esta escuela, comencé junto con mi compañero José Luis Trapero a idear una web donde poder posicionar sobre un mapa los bares y pubs de Granada. Y en mayo de 2007 ya teníamos la primera versión online de GranadaPeople, Con el paso del tiempo fuimos añadiendo funcionalidades como el uso de etiquetas para describir mejor los sitios e incorporando nuevos tipos de sitios como restaurantes, discotecas, cines, etc. No fuimos realmente conscientes de la repercusión del proyecto hasta que empezaron a hacernos entrevistas para la radio y televisión. El tutor de este proyecto, Juan Huete, fue el que nos propuso que podíamos hacer cosas más interesantes como una herramienta para recomendaciones. Personalmente me gustó la idea y decidí hacerlo como Proyecto Fin de Carrera.
La web inicial, GranadaPeople, tenía las siguientes características: - Una base de datos con información de los sitios (nombre, dirección, coordenadas, etiquetas...) - Un sistema de votación entre 1 y 5 estrellas para valorar estos sitios - Un sistema de comentarios y fotografías de los sitios - Un conjunto de usuarios registrados que son los que añaden los sitios, los votan, los comentan, etc. - Un buscador sencillo de sitios - Un mapa con la posición de los sitios - Un listado de eventos y hoteles en la ciudad proporcionado por agentes externos - Se podían establecer relaciones de amistad entre usuarios - Y por último un sistema de mensajería privada
AndalucíaPeople viene a ser pues la extensión natural de GranadaPeople. Al comienzo del proyecto se plantearon una serie de mejoras para el sistema: - Incluir las 8 provincias andaluzas de forma que sean independientes, pero administradas bajo la misma interfaz. - Un sistema de recomendación que proporcione una buena experiencia de usuario, que es la parte central del proyecto. - Incentivar al usuario para que se implique más en la plataforma. - Una versión especial para dispositivos móviles que sea ligera y fácil de usar. - Y la posibilidad de cambiar el idioma de la web.
En la vida diaria estamos acostumbrados a que nuestros amigos nos recomienden películas, series, libros, música e incluso bares o restaurantes. Internet no se ha quedado atrás y webs como last.fm nos recomienda música parecida a la que escuchamos; en Amazon, por ejemplo, cuando estamos visitando un producto nos recomienda comprar otro que nos puede interesar. Todo esto se consigue gracias a los sistemas de recomendación. Lo primero que se hizo fue estudiar qué tipos de sistemas existían, cómo funcionaban y cuál era el que mejor se podía adaptar a la web de AndalucíaPeople, ya que teníamos una serie de restricciones en la estructura de la información y de tiempo real, porque es una web online.
A la hora de diseñar un sistema de recomendación hay que tener en cuenta una serie de factores para que sea adecuado para los usuarios: - Primero, debe ser fácil de usar - Segundo, cuanto mejor sean las recomendaciones, más confianza tendrán los usuarios sobre el sistema - Y por último, se le debe poder decir al usuario porqué se le están recomendando esos sitios El uso que se le pueda dar al sistema de recomendación es doble: - Por una parte, supongamos que te han invitado a una cena en un restaurante y quieres saber si te va a gustar el sitio o no. Para ello el sistema puede darte una predicción de voto sobre ese restaurante. - Otro posible uso es cuando por ejemplo vamos a ir de viaje a Málaga y queremos saber qué restaurantes hay nos puedan gustar.
Los sistemas de recomendación se pueden clasificar en tres grupos: - Primero tenemos los sistemas de filtrado colaborativo que tratan de identificar grupos de personas con intereses comunes al usuario y recomendarle aquellos elementos que les gustaron a los otros. - Por otro lado tenemos los sistemas de recomendación basados en contenido que usan información de los elementos para recomendar aquellos similares a los que el usuario ha valorado o comprado previamente. - Y por último, los sistemas de recomendación híbridos que combinan los dos enfoques anteriores para intentar solventar las limitaciones de ambos. Para mejorar la calidad de las recomendaciones, existen distintas técnicas para cada uno de estos enfoques. Entre las más usadas se encuentras los modelos probabilísticos, métodos de clustering, árboles de decisión o redes neuronales. En este proyecto se ha escogido las redes bayesianas dentro de los modelos probabiilísticos para el enfoque basado en contenido y la técnica de vecinos más cercanos para el filtrado colaborativo.
Ahora pasamos a detallar el sistema de recomendación basado en contenido. Lo primero que hay que conocer son los elementos involucrados: Tenemos una serie de sitios descritos por etiquetas, por ejemplo, el Restaurante Wok que tiene buffet libre, es japonés y tiene terraza. Estas etiquetas las he jerarquizado en cuatro grupos: música, estilo, instalaciones y otros aspectos, a diferencia de otros sistemas que utilizan una descripción plana. Por otra parte tenemos los votos del usuario sobre los sitios valorados entre 0.5 y 5, y el perfil de usuario, que lo conforman un conjunto de etiquetas elegidas explícitamente por el usuario. Y por último tenemos el sitio sobre el que se va a predecir su voto.
Como comenté anteriormente, se ha escogido una red Bayesiana como modelo probabilístico. Una red Bayesiana es un grafo dirigido acíclico compuesto por nodos, que representan las variables, y arcos, que representan las relaciones de dependencia entre las variables. Para cada nodo se tendrá un distribución de probabilidad condicional.
Ahora vamos a situar todos estos elementos en lo que sería la red Bayesiana que describe nuestro modelo. Se han definido 4 capas con diferentes tipos de nodos. Empezando por abajo, la primera capa contendría un único nodo, que representa al usuario activo. La segunda capa contiene aquellos sitios que el usuario ha votado y su perfil de gustos. La siguiente capa serían las jerarquías que clasifican las etiquetas que están en la última capa.
Ya que un nodo puede ser o no relevante, se necesitarían calcular 2 n distribuciones de probabilidad. Siendo n el número de padres de un nodo. Para solventar este problema se usa un modelo canónico de suma de pesos que reduce el coste de cómputo.
Cada enlace de la red va a tener un peso determinado dependiendo de los nodos conectados. El peso de los nodos descriptores sobre las jerarquías va a ser de 1/nº de padres. Los pesos de las jerarquías sobre un sitio va a depender del tipo que sea. Por defecto tienen un valor determinado, pero el usuario los puede modificar según la importancia que le quiera dar a un conjunto de etiquetas sobre un sitio. Como comenté anteriormente, en un pub es más importante la música que, por ejemplo, en un restaurante. Los pesos en el caso de los ítems sobre el nodo del usuario activo también va a ser 1/nº de ítems.
El problema que queremos resolver con este sistema es predecir el voto que le daría el usuario activo a un determinado sitio. Para ello se sigue el siguiente procedimiento: 1º Se incluye el sitio en el modelo 2º Se propagan las probabilidades del sitio a sus etiquetas 3º Se hace una propagación top-down hasta el nodo final Los teoremas utilizados se pueden consultar más detalladamente en la memoria.
Ahora voy a explicar el mecanismo de inferencia mediante un ejemplo de manera que resulte más fácil y rápido entenderlo. Supongamos que un usuario quiere saber la predicción del sistema para un restaurante llamado Kirin. Tenemos esta red bayesiana compuesta por aquellos sitios del mismo tipo que el usuario ha votado previamente y su perfil de gustos, instanciamos este sitio y calculamos la probabilidad de sus etiquetas.
Ahora hay que calcular las probabilidades de cada uno de los nodos de la capa de ítems teniendo en cuenta la relevancia de sus etiquetas y del peso de las jerarquías.
Para obtener la distribución de probabilidades en el nodo del usuario activo, sumamos para cada una de las valoraciones posibles las probabilidades de los sitios votados con dicha valoración. Se incluye además un campo que recoge la masa de probabilidad asociada al estado no relevante de los padres.
Una vez que tenemos estas probabilidades, hay que escoger el voto que se le daría al sitio. Para ello existen tres alternativas: - El voto promedio se obtiene haciendo el promedio de la distribución. - El voto mediano el que se encuentra en la probabilidad 0.5 de la distribución. - El voto máximo el de probabilidad máxima. Tras probar los tres métodos me he quedado con el promedio que es el que ha dado mejores resultados en la evaluación.
Este método tiene algunas limitaciones, como es el problema del cold-starting (inicio frío), ya que para que el sistema funcione correctamente, es necesario que el usuario haya votado sitios suficientes para hacer una recomendación. En el caso de que ocurra esto, podemos abordar la situación de distintas maneras: - Ignorando al usuario: le decimos que no hay resultados y que tiene que votar sitios antes de usarlo. - Tratarlo como el usuario medio, pero el problema es que el usuario medio no existe, y es probable que lo que le recomendemos no le guste. - O bien mostrar aquellos sitios más populares, que es la solución que he adoptado. Otra limitación es que puede ocurrir que el sistema recomiende sitios que estén mal valorados por otros usuarios, ya que sólo se centra en sus etiquetas. La solución que he adoptado es no recomendar aquellos sitios por debajo de un cierto umbral de valoración.
Para intentar salvar estas limitaciones se ha estudiado usar un sistema de filtrado colaborativo con un esquema basado en vecinos. En este tipo de sistemas, los vecinos son aquellos usuarios con más aspectos en común con el usuario activo, en nuestro caso, los sitios votados en común con valoraciones similares.
El procedimiento a seguir en este tipo de sistemas es, para un cierto sitio a predecir: 1º Calcular la similaridad del usuario activo con todos los usuarios que han votado dicho sitio 2º Seleccionar aquellos k mejores 3º Y por último obtener la predicción del voto usando las valoraciones de los usuarios
Para saber cómo de similar es un usuario a otro, existen distintas métricas, entre las cuales se han escogido estas tres clásicas para su evaluación: - La medida coseno - La correlación de Pearson - La correlación de Pearson limitada
Este sistema también presenta algunas limitaciones relacionadas con el problema del cold-starting a tres niveles: 1. Un usuario nuevo no tiene inicialmente vecinos porque no ha votado ningún sitio. 2. Un sitio nuevo, al no tener ningún voto, no puede ser recomendado. 3. Cuando se crea una comunidad nueva, el sistema puede no funcionar bien debido a los pocos votos que hay. Otra limitación que tiene este sistema es que es difícil que sea capaz de recomendar sitios de una ciudad que no es la tuya, ya que es menos probable que tengas vecinos. Es por ello, por lo que actualmente el sistema de cara al público que está funcionando es el basado en contenido.
Vamos a ver ahora algunos resultados experimentales de cómo han funcionado ambos sistemas. Para realizar las pruebas se han usado los datos reales de la web, que si bien son bastante escasos nos sirven para hacernos una idea de cómo funcionan. En las gráficas podemos ver que la distribución de los votos y de los votos medios se acumula en las valoraciones 4 y 5, es decir, la gente vota lo que le gusta.
Se han usado diferentes métricas para comparar los resultados: - El error medio absoluto nos indica cómo de ajustadas están las predicciones del sistema respecto a la valoración real del usuario. - El error cuadrático medio, es similar al anterior, pero penaliza más el error cometido cuanto más alejada esté la predicción de la realidad. - Y el porcentaje de predicción que representa los votos del conjunto de prueba que se han podido predecir. He obtenido resultados con dos metodologías: 1. Primero, extrayendo un 20% del total de los votos, que serán el conjunto de test y el 80% restante será el conjunto de entrenamiento. 2. Y luego hemos usado el método leave-one-out que consiste en sacar sólo un elemento del conjunto total.
Vemos que el método que mejor se comporta es usando simplemente el voto medio como predicción. Esto es debido a que como hemos visto anteriormente, los usuarios suelen puntuar con valoraciones altas y el voto medio está bien perfilado. Pero claro, no es un método “inteligente” y no es capar de hacer recomendaciones. De los sistemas de recomendación implementados, el que da mejores resultados es el filtrado colaborativo usando la correlación de Pearson limitada como medida de similaridad. Vemos también como el basado en contenido implementado es bastante mejor que usando la medida coseno para contenido. Los porcentajes de predicción del sistema basado en contenido son más bajos que el colaborativo porque se necesitan más pre-requisitos para poder realizar una predicción
Hasta aquí hemos visto los diferentes tipos de sistemas de recomendación y cómo han funcionado en el proyecto. Ahora voy a resumir las soluciones que se han desarrollado en el proyecto y luego para finalizar, una demostración de cómo funciona la aplicación. 1. Lo primero que se hizo fue un cambio completo de plataforma, pasando a usar el framework django que funciona en python, porque era menos costoso y a la larga más eficiente de mantener las 8 provincias andaluzas, que lo que hubiese implicado adaptar toda la estructura anterior en php. 2. Otro de los objetivos era incentivar la participación de los usuarios, para ello se ha establecido un sistema de puntuación en el que por cada acción realizada en la web se premia al usuario. También se proporciona una guía para aprender a completar el perfil de usuario y a integrarse en la web. 3. Se han implementado ambos sistemas de recomendación explicados, aunque este último sólo de modo experimental y aún no está disponible al público. 4. Se han jerarquizado las etiquetas con el fin de describir mejor los sitios y para usarlas mejor en el sistema de recomendación. 5. Hay disponible una versión sencilla para móviles, se ha incluído soporte multi-idioma, se ha creado un blog para informar de novedades y se proporcionan feeds para suscripción por RSS para sitios, fotos y comentarios de las distintas provincias.
Por último vamos a ver un ejemplo de funcionamiento de la web. De cara al público el sistema funciona bien, o al menos esa es la impresión que me han hecho llegar llegar las personas con las que he realizado las pruebas. Creemos que los sistemas de recomendación en Internet van a seguir creciendo, ya que cada vez se dispone de más información de los usuarios para poder ofrecerles resultados de mejor calidad. Eso es todo, muchas gracias.