SlideShare una empresa de Scribd logo
1 de 38
Descargar para leer sin conexión
Proyecto Fin de Carrera | Ingeniería Informática | Universidad de Granada




                    AndalucíaPeople
      Un sistema de recomendación para sitios de ocio de Andalucía


                  Autor: Manuel Martín Salvador

                     Tutor: Juan Huete Guadix

                            Curso 2008/2009




                                   1
2
Índice
1. Introducción                                                                 5
  1.1. Motivación . . . . . . . . . . . . . . . . . . . . . . . . . . . . .     5
  1.2. Situación inicial . . . . . . . . . . . . . . . . . . . . . . . . . .    5
  1.3. Mejoras planteadas . . . . . . . . . . . . . . . . . . . . . . . .       6
  1.4. El modelo . . . . . . . . . . . . . . . . . . . . . . . . . . . . .      6

2. Introducción a los sistemas de recomendación                                 8

3. Sistema de recomendación basado en contenido                                 9
  3.1. Elementos del sistema de recomendación . . . . . . . . . . . . 10
  3.2. Esquema de pesos . . . . . . . . . . . . . . . . . . . . . . . . . 11
  3.3. Red Bayesiana . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
  3.4. Estimación de probabilidades . . . . . . . . . . . . . . . . . . 14
  3.5. Mecanismo de inferencia . . . . . . . . . . . . . . . . . . . . . 15
  3.6. Predicción vs Recomendación . . . . . . . . . . . . . . . . . . 20
  3.7. Problema del cold-starting . . . . . . . . . . . . . . . . . . . . 20
  3.8. Un poco más rápido . . . . . . . . . . . . . . . . . . . . . . . 20
  3.9. Limitaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

4. Sistema de filtrado colaborativo                                             21
  4.1. Elementos del sistema de recomendación . . . . . . . . . . . . 21
  4.2. Medidas de similaridad . . . . . . . . . . . . . . . . . . . . . . 22
  4.3. Predicción del voto . . . . . . . . . . . . . . . . . . . . . . . . 22
  4.4. Problema del cold-starting . . . . . . . . . . . . . . . . . . . . 23

5. Evaluación                                                                  23
  5.1. Colección de datos . . . . . . . . . . . . . . . . . . . . . . . . 23
  5.2. Métricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
  5.3. Metodología . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
  5.4. Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
  5.5. Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

                                      3
6. Soluciones desarrolladas                                                 28

7. Aspectos adicionales del desarrollo                                      29
   7.1. Entorno de desarrollo . . . . . . . . . . . . . . . . . . . . . . . 29
   7.2. Entorno de producción . . . . . . . . . . . . . . . . . . . . . . 29
   7.3. Control de versiones . . . . . . . . . . . . . . . . . . . . . . . 30
   7.4. Sistema de tickets . . . . . . . . . . . . . . . . . . . . . . . . . 30
   7.5. Licencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

8. Manual de usuario                                                        30

9. Conclusión                                                               36

Referencias                                                                 37




                                      4
1.     Introducción

1.1.     Motivación
El germen de este proyecto surgió en 2006 cuando comenzó a implantarse
en Internet la tecnología para usar mapas en cualquier web de la mano de
empresas como Google o Yahoo! que ofrecían herramientas para facilitar la
creación de mashups. Partiendo de este contexto, comencé junto con un com-
pañero a idear una web donde posicionar sobre un mapa los bares y pubs de
Granada. Con este propósito comenzó GranadaPeople, y con el paso del tiem-
po fue creciendo gracias al apoyo de muchas personas, incorporando nuevas
funcionalidades y ampliándose con nuevos locales.
Una de las personas que se interesaron por la web fue mi tutor de proyecto,
que nos animó a hacer un sistema de recomendación, y viendo las posibilida-
des que esto tenía, decidí hacerlo como proyecto de fin de carrera.


1.2.     Situación inicial
Partimos de la web GranadaPeople que fue desarrollada desde cero en PHP
y contiene las siguientes características:

       Una colección de sitios con la siguiente información: nombre, dirección,
       zona, coordenadas y usuario que lo ha enviado.
       Un sistema de votación entre 1 y 5 estrellas para que los usuarios pue-
       dan valorar los sitios.
       Cada sitio contiene una serie de etiquetas que ayudan a perfilar mejor
       el tipo de sitio del que se trata. En base a estas etiquetas se pueden
       establecer unos sitios por similaridad (un sitio se parece tanto más a
       otro cuantas más etiquetas tengan en común).
       Uun sistema de comentarios y de subida de fotografías relacionadas con
       los sitios.
       Buscador de sitios por etiquetas y por zonas.
       Geolocalización sobre un mapa, para colocar con la mayor exactitud la
       posición de un sitio.
       Listado de eventos y hoteles en la ciudad, proporcionados por agentes
       externos.

                                       5
Sistema de amigos y de mensajería privada.


1.3.     Mejoras planteadas
El proyecto se basa en mejorar este sistema y ampliarlo a todas las provin-
cias andaluzas, para conformar la web andaluciapeople.com. Detallamos un
listado de las mejoras que se pretenden realizar:

       Incluir las 8 provincias andaluzas de forma que puedan ser indepen-
       dientes, pero administradas bajo la misma interfaz.
       Incentivar al usuario para que se implique más en la plataforma, ya sea
       enviando nuevos sitios, corrigiendo errores, valorando sitios, haciendo
       comentarios y subiendo fotografías.
       Un sistema de recomendación de sitios que proporcione una buena ex-
       periencia al usuario.
       Una versión especial para dispositivos móviles que sea ligera y fácil de
       usar.
       Posibilidad de cambiar el idioma.

Para alcanzar estos objetivos se la sección 2 estudiaremos los distintos tipos
de sistemas de recomendación, para de forma más detallada en la sección 3
comentar los sistemas de recomendación basados en contenido y en la sección
4 los sistemas de filtrado colaborativo. Se presentan los resultados experimen-
tales en la sección 5 y para finalizar se enumeran las soluciones desarrolladas
junto otros aspectos del desarrollo y un manual de usuario en las secciones
6, 7 y 8.


1.4.     El modelo
Con el fin de desarrollar una aplicación web como esta, se han definido una se-
rie de clases que especifican un modelo de red social orientada principalmente
a la interacción de los usuarios con el sistema. De esta manera, un usuario
será capaz de añadir nuevos sitios de un determinado tipo, descritos por eti-
quetas categorizadas en una jerarquía, escribir comentarios, subir fotografías
y votar cualquier sitio. También podrá establecer lazos de amistad con otros
usuarios y decir explícitamente cuáles son aquellas características que más le
gustan con vistas a que el sistema pueda hacer mejores recomendaciones de
nuevos sitios que aún no conoce.

                                       6
User (Usuario): es el elemento más importante de la aplicación, ya
     que en torno a él van a girar el resto de clases.
     Sitio: es el segundo elemento más importante. Contiene la información
     esencial de un sitio: nombre, dirección, coordenadas, teléfono, etc.
     Tipo: engloba los distintos tipos que pueden definir a un sitio.
     Etiqueta: cualquier tag que sirva para describir mejor a un sitio.
     Jerarquía: sirven para definir conjuntos de etiquetas relacionadas.
     ObjetoEtiquetado: relación entre un sitio y una etiqueta.
     DatosUsuario: algunos datos personales del usuario, así como su lis-
     tado de sitios favoritos y las etiquetas que más le gustan.
     Foto: fotos de un determinado sitio subidas por un usuario.
     Comentario: comentarios sobre un sitio hechos por un usuario.
     Voto: valoración de un sitio de un usuario.
     Amigo: usuarios que establecen una relación de amistad.
     PesosTipoJerarquía: peso asignado por un usuario a una jerarquía
     de etiquetas a un determinado tipo de sitio.

En la siguiente figura se puede observar el grafo de dependencias entre las
clases previamente enumeradas.




                  Figura 1: Grafo del modelo simplificado

Además de las clases aquí descritas, se han utilizado algunas más de desarrollo
externo como pueden ser las necesarias para el sistema de mensajería privada
o el blog.

                                      7
2.    Introducción a los sistemas de recomenda-
      ción
En la vida diaria, la publicidad masiva nos invade en televisión, prensa, radio
o carteles en la calle. Si bien esto sirve a las marcas para afianzar su imagen y
captar clientes, su coste puede llegar a ser muy alto respecto a la efectividad
que tienen. En cambio, los productos como libros, películas, discos, etc. los
compramos bien porque nos gusta el autor o el género, o bien porque nos lo
recomienda algún amigo.
El término “sistema de recomendación” surge en los años 90 ligado a proyectos
de Inteligencia Artificial en Internet y hoy en día tinen un gran auge con la
llamada “Web 2.0”. Algunos ejemplos de uso son [22]:

      Recomendaciones en tiendas online: partiendo de un producto se re-
      comiendan otros que han interesado a los usuarios que lo compraron.
      (Amazon)

      Filtrado de noticias: se le da más prioridad al tipo de noticias que el
      usuario consulta frecuentemente. (Google)

      Recomendaciones musicales, de libros y de películas: generan recomen-
      daciones en base a los gustos del usuario (MyStrands, filmaffinity)

      Búsqueda de personas afines en comunidades: se puede generar una
      lista de vecinos con intereses similares en base a las acciones de un
      usuario (meneame, last.fm).

Los sistemas de recomendación se clasifican normalmente en tres categorías
[11]:

      Sistemas de recomendación basados en contenido: almacenan
      información sobre cada ítem que va a ser recomendado. Esta informa-
      ción se usa para recomendar ítem similares a los que previamente ha
      valorado el usuario. Los principales problemas que acarrea este tipo de
      sistema son:

        • Los descriptores que se usan para representar los ítems pueden no
          resultar muy adecuados.
        • Es difícil hacer recomendaciones precisas a usuarios con pocos
          votos.

                                       8
• Poca diversidad, ya que sólo se recomendarán ítems similares a los
          ya votados.

     Sistemas de filtrado colaborativo: tratan de identificar grupos de
     personas con intereses comunes al usuario y recomendar ítems que les
     gustaron. Los sistemas colaborativos se pueden clasificar en dos grupos
     [19]:

        • Basados en memoria: utilizan toda la base de datos de elementos
          y usuarios para generar predicciones. Se emplean técnicas estadís-
          ticas para encontrar a los vecinos y se combinan sus preferencias
          par agenerar una lista con los elementos más recomendables para
          el usuario actual. Es necesario disponer de un número mínimo de
          usuarios con suficientes votos, incluído el usuario al que se preten-
          de recomendar.
        • Basados en modelo: desarrollan primero un modelo de los votos
          del usuario y luego calculan para cada ítem el valor esperado en
          función de los anteriores. Se utilizan distintos algoritmos de apren-
          dizaje clustering o redes neuronales.

     Sistemas de recomendación híbridos: intentan combinar los dos
     enfoques anteriores. Se pueden encontrar diferentes métodos de hibri-
     dación: [15, 24, 13, 11]

        • Implementando colaborativo y basado en contenido por separado
          y combinando sus predicciones.
        • Incorporando algunas características del basado en contenido en
          el enfoque colaborativo, y viceversa.
        • Construyendo un modelo unificado que incorpore las característi-
          cas de ambos métodos.


3.    Sistema de recomendación basado en conte-
      nido
Cuando se decidió desarrollar el sistema de recomendación, se considereraron
una serie de factores que hacen que éste sea considerado adecuado por los
usuarios [16]:



                                      9
Facilidad de uso: un sistema difícil haría que fuese usado por muchas
       menos personas.

       Calidad de las recomendaciones: cuanto mejor sean las recomen-
       daciones, los usuarios sentirán más afinidad por el sistema.

       Familiaridad de los ítems recomendados: si el usuario obtiene
       recomendaciones de sitios que conoce (pero que aún no ha votado)
       sentirá que el sistema funciona correctamente.

       Transparencia del sistema: se le puede decir al usuario porqué le
       recomendamos esos sitios, ya que se han obtenido siguiendo una serie
       de pasos lógicos.

Tras leer diversos artículos, se partió del esquema de recomendación basado
en redes bayesianas que se explica en el artículo escrito por varios investiga-
dores del departamento CCIA de la Universidad de Granada [15].


3.1.     Elementos del sistema de recomendación
Los principales elementos que conforman el sistema recomendación son los
ítems (sitios), los descriptores (etiquetas o tags) y los usuarios, que junto con
sus votos hacen posible calcular una predicción de voto para un sitio que el
usuario a priori no conoce.
Estos elementos se pueden representar por las siguientes variables:

       Fk será un nodo que identifica una etiqueta que describe un sitio. Toma
       un valor binario, 0 si no es relevante, 1 si es relevante.

       Igualmente, habrá un nodo Ij para cada ítem. También toma valores
       binarios, 0 si no relevante o 1 si es relevante para la predicción que se
       está haciendo. El conjunto de gustos del perfil del usuario se tratará
       como un ítem más, cuya valoración será la máxima, ya que el usuario
       los ha seleccionado explícitamente.

       Por último se usará un nodo para representar la valoración predicha
       para el usuario activo y se denota con ACB , donde el subíndice indica
       que estamos usando el enfoque basado en contenido (content-based).
       Los posibles valores que puede tomar esta variable son los del conjunto
       {0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5 4, 4.5, 5}. El valor 0 se incluye para estimar
       cómo de fiable es el resultado predicho.

                                         10
Para conectar estos nodos, consideraremos que la relevancia de un ítem de-
penderá de la relevancia de los descriptores que lo definen. Luego habrá enla-
ces entre los nodos descriptores y los nodos ítems. En cambio, no hay enlaces
directos entre los nodos descriptores, esto es, las etiquetas son marginalmente
independientes entre ellas.
Los enlaces Fk → Ij indican que el sitio Ij está descrito por la característica
Fk y su valor indica la importancia de la misma respecto al resto de etique-
tas que lo describen. Los enlaces Ij → ACB indican que el usuario activo ha
votado el sitio Ij y el voto que le asignó será el valor de este enlace. Diremos
que el usuario activo ha votado el sitio Ij cuando le haya asignado una va-
loración del conjunto R={0.5, 1, 1.5, 2, 2.5, 3, 3.5 4, 4.5, 5}. La estimación
de probabilidades y su propagación a lo largo de la red se detallan en las
secciones 3.4 y 3.5.


3.2.    Esquema de pesos
Cada sitio está identificado por una serie de etiquetas que le asignan signi-
ficado semántico tales como la música de ambiente o el estilo de comida del
restaurante. De esta manera, podemos categorizar las etiquetas en diferentes
grupos:

  1. Tipos: especifica el tipo de sitio. Un sitio puede tener varios tipos.
     Ejemplos: bar, restaurante, discoteca, pub, pizzería, heladería...

  2. Estilo: sirve para especificar un poco mejor las características del sitio.
     Ejemplos: asador, buffet, chino, italiano, comida rápida, tapas, vegeta-
     riano...

  3. Música: indica el tipo de música que suelen poner en el sitio. Ejemplos:
     electrónica, flamenco, jazz, latina, pop, rock, salsa...

  4. Instalaciones: permite escoger entre distintas instalaciones de las que
     puede disponer el sitio. Ejemplos: billar, dardos, futbolín, karaoke, te-
     levisión, terraza, wifi...

  5. Otros: engloba algunos extras que no pertenece a ninguna de las an-
     teriores categorías. Ejemplos: entrada pagando, no fumadores, no volu-
     men alto...

Esta categorización nos va a permitir aumentar o disminuir el peso de los
descriptores según el tipo de ítem. Por ejemplo, en el caso de las etiquetas

                                      11
pertenecientes a Estilo, tendrán un mayor peso en restaurantes, y en las de
Música, en pubs, salas o discotecas. Se han definido por defecto unos pesos,
pero que pueden ser ajustados por los usuarios siempre que lo deseen.

            Usuario          Tipo             Jerarquía       Peso
                                              Estilo          0.5
                                              Música          0.125
                             Restaurante
                                              Instalaciones   0.25
                                              Otros           0.125
            Manuel
                                              Estilo          0.3
                                              Música          0.4
                             Pub
                                              Instalaciones   0.2
                                              Otros           0.1

       Cuadro 1: Ejemplo de matriz de pesos para el usuario Manuel


3.3.    Red Bayesiana
Usando redes bayesianas vamos a poder ver las relaciones entre los distintos
elementos del sistema de recomendación y apreciar visualmente la propaga-
ción de probabilidades.
En la Figura 2 se muestra una primera aproximación de lo que sería la red
bayesiana que podemos utilizar para predecir la puntuación de un sitio en
base a aquellos sitios que el usuario ha valorado. El principal inconveniente
que presenta es que trata a todas las etiquetas por igual y además hay que
instanciar todos los ítems que el usuario ha votado junto con sus etiquetas.
Por ejemplo, digamos que el usuario ha votado 50 sitios, de los cuales 30 son
pubs y 20 son restaurantes. Si el usuario sólo quiere saber la predicción para
un determinado restaurante que no conoce, esta primera aproximación lo que
hará es instanciar los 50 sitios votados junto con sus etiquetas. Si cada sitio
tuviese 3 etiquetas, habría que instanciar 150 etiquetas en total. Es muy
posible que muchas de ellas no aporten utilidad para el sitio que estamos
prediciendo, ya que como la mayoría de los sitios votados son pubs, estas
etiquetas pueden estar relacionadas con el tipo de música de estos sitios,
mientras que en un restaurante posiblemente la música no tenga nada de
relevancia, al contrario que el estilo de comidas que se sirvan.




                                      12
Figura 2: Primera aproximación




Hemos tratado de resolver los problemas planteados anteriormente siguiendo
el esquema de la Figura 3. Sólo se instancian aquellos sitios que son del
mismo tipo que el que va a ser predicho. Además, introducimos una nueva
capa para categorizar las etiquetas. Con esta nueva estructura el objetivo
que conseguimos es doble: mejorar la calidad de la predicción y hacerlo más
eficientemente.
Si aplicamos a este caso el ejemplo comentado anteriormente, de los 50 sitios
votados por el usuario, sólo instanciamos los 20 que son restaurantes, que
serían unas 60 etiquetas, con lo cual nos estamos ahorrando más de la mitad.
Ahora, al introducir la nueva capa de jerarquías, se le va a dar un mayor peso
a las etiquetas que describen el estilo del restaurante que al resto a la hora de
hacer la predicción. Esto sería el comportamiento predeterminado, pero será
finalmente el usuario será el que decida qué importancia quiere darle a cada
jerarquía para cada tipo de sitio. Se puede ver un ejemplo más detallado en
la sección 3.5.




                                       13
Figura 3: Solución adoptada


3.4.        Estimación de probabilidades
Comenzando por los nodos descriptores (F ), no tienen padres y sólo es
necesario calcular la distribución de probabilidad a priori de su relevancia.
En el proyecto hemos supuesto que todas las etiquetas son equiprobables:
P r(fk,1 ) = 1/l Siendo l el tamaño del conjunto F .
Los nodos jerarquías (C) se encargan de dar un peso determinado al valor
de la probabilidad de los descriptores, tal como se ha comentado en la sección
“Esquema de pesos”. Se tiene que cumplir que la suma de los pesos de las
jerarquías para un ítem sea 1.
        w(ij,1 , cu ) = 1
cu ∈C

Con respecto a los nodos ítems (I), los únicos pesos necesarios para calcular
la probabilidad P r(ij,1 |pa(Ij )) son:

                                        14
log((m/nk )+1)
w(fk,1 , ij,1 ) =      P
                            log((m/nk )+1)
                                             Siendo nk el número de veces que la etiqueta
                    Fk∈P a(I )
                            j
Fk se usa para describir un ítem y m el número de ítems.
w(fk,0 , ij,1 ) = 0
Para los nodos basados en contenido (ACB ), hay que considerar la in-
fluencia de un ítem en el rango de valoraciones del usuario activo. Cuando
el usuario A vota un elemento Ik con el valor s, la probabilidad de este ítem
irá al voto s. Los pesos necesarios son:
w(ik,1 , acb,s ) = 1/I(A) Siendo I(A) el número de ítems votados por el usuario
A
w(ik,1 , acb,t ) = 0 para t = s, 0 ≤ t ≤ #r
w(ik,0 , acb,0 ) = 1/I(A)
w(ik,0 , acb,t ) = 0 para 1 ≤ t ≤ #r


3.5.      Mecanismo de inferencia
El objetivo del proceso de inferencia es estimar el voto para el usuario ac-
tivo A dado un sitio (evidence), es decir, P r(A = s|ev). Para calcular esta
probabilidad, debemos instanciar el sitio y propagar a través de los distintos
nodos. Esta propagación implica un proceso de marginalización que requie-
re un tiempo exponencial. Sin embargo, teniendo en cuenta que en una red
bayesiana un nodo es independendiente de sus antecesores dado que estos
valores se toman de sus padres, y usando las ventajas que ofrece el modelo
canónico usado para expresar las distribuciones de probabilidad condicinoal,
la distribución de probabilidad a posteriori se puede calcular eficientemente
como un mecanismo de inferencia de arriba a abajo (top-down). El siguiente
teorema explica cómo calcular exactamente esta probabilidad:
Teorema 1 : sea Xa un nodo en una red bayesiana, mXa el número de padres
de Xa , Yj un nodo en P a(Xa ) y lYj el número de estados que puede tomar Yj .
Se puede calcular la probabilidad a posteriori usando la siguiente fórmula:
                    mXa lYj
P r(xa,s |ev) =               w(yj,k , xa,s ) · P r(yj,k |ev)
                    j=1 k=1

Por medio de este teorema se expresa que el nodo Xa recoge la probabilidad
de sus predecesores y no necesita distribuirla de nuevo. Esto es importante
porque implica que se puede realizar la propagación en tiempo lineal respecto
al número de padres [14].

                                                  15
Centrándonos en la componente basada en contenido, el sitio a predecir está
compuesto de un conjunto de descriptores y por el ítem en sí mismo. En el
primer caso la propagación se realiza como se explica en el teorema anterior.
Mientras que en el segundo caso, la probabilidad P r(Fk |ij,1 ) se calcula para
cada nodo Fk conectado al ítem Ij . Estas probabilidades se pueden calcular
por medio del siguiente teorema.
Teorema 2 : sea Fk un nodo descriptor de la jerarquía Cu perteneciente al
ítem Ij en una red bayesiana. La probabilidad a posteriori de su relevancia
se puede calcular como:
                     w(ij,1 , cu ) · P r(fk,1 )                                                     si Fk ∈ P a(Ij )
                                                                                                          /
P r(fk,1 |ij,1 ) =                                       w(fk,1 ,ij,1 )·P r(fk,1 )·(1−P r(fk,1 ))
                     w(ij,1 , cu ) · P r(fk,1 ) +                        P r(ij,1 )
                                                                                                    si Fk ∈ P a(Ij )
siendo P r(ij,1 ) =                  w(fk,1 , ij,1 ) · P r(fk,1 )
                      Fk ∈P a(Ij )



Predicción del voto

Una vez que se han calculado las probabilidades a posteriori, hay que elegir
el voto que se va a dar como predicción. Antes de obtener la predicción hay
que normalizar las probabilidades al dominio de R, para ello hacemos:
                      P r(A=s|ev)
P r(A = s|ev) =      1−P r(A=0|ev)
                                         ∀s ∈ R
Existen tres alternativas de elección:

       El voto promedio: predicci´n =
                                 o                          s · P r(A = s|evidence)
                                                     ∀s∈R

       El voto mediano: predicci´n = {s|P r(A < s|evidence) ≤ 0,5, P r(A >
                                o
       s|evidence) ≥ 0,5}
       El voto máximo: predicci´n = {s|P r(A = s|evidence) > P r(A =
                               o
       s|evidence)}

Para una mejor comprensión se puede ilustrar con este ejemplo que muestra
los valores de la variable ACB :
  Valoración           0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0
 Probabilidad           0   0   0   0 0.2 0.15 0.15 0   0 0.5

       Voto mediano = 3.5
       Voto promedio = 3.975
       Voto máximo = 5.0

                                                    16
Algoritmo

  1. Se instancia el ítem a predecir P r(ij,1 ) = 1 y calculan las probabilida-
     des de sus descriptores. A continuación se propagan las probabilidades
     usando el teorema 2 explicado en esta sección.

  2. Se instancian sólo aquellos sitios del mismo tipo que el evidence y se
     propagan las probabilidades usando el teorema 1 que hemos visto an-
     teriormente.

  3. Se selecciona un voto usando uno de los esquemas de predicción nom-
     brados anteriormente. En este proyecto se ha escogido el voto promedio
     porque es el que mejores resultados ha dado (ver sección de Evaluación).


Ejemplo teórico de predicción




                       Figura 4: Ejemplo ilustrativo

                                     17
En el ejemplo de la Figura 4 se puede ver resaltado en amarillo las etiquetas
del sitio que va a ser predicho. Vamos a ir por capas obteniendo la probabi-
lidad para cada nodo.
Instanciamos el ítem a predecir.
P r( Kirin1 ) = 1

Calculamos las probabilidades de los descriptores del ítem instanciado.



  P r( Japon´s1 | Kirin1 ) = w( Restaurante , Estilo )·
            e
                    w( Japon´s1 , Kirin1 ) · P r( Japon´s1 ) · (1 − P r( Japon´s1 ))
                              e                         e                      e
  P r( Japon´s1 ) +
            e                                                                                                                       =
                                             P r( Kirin1 )
                                       0,5 · (0,5 + 0,386 · 0,5 · 0,5) = 0,298




  P r( Servicio a domicilio1 | Kirin1 ) = w( Restaurante , Otros )·
                                                                                                                                            !
                                  w( Servicio a domicilio1 , Kirin1 ) · P r( Servicio a domicilio1 ) · (1 − P r( Servicio a domicilio1 ))
 P r( Servicio a domicilio1 ) +                                                                                                                 =
                                                                              P r( Kirin1 )
                                                                                0,125 · (0,5 + 0,614 · 0,5 · 0,5) = 0,327




Instanciamos los descriptores de los ítems relevantes.
P r(fk,1 , Y amato1 ) = 1

Calculamos la probabilidad de los ítems relevantes para el ítem a predecir.


                          P r( Y amato1 | Kirin1 ) =
            w( Japon´s1 , Y amato1 ) · P r( Japon´s1 | Kirin1 )+
                     e                             e
            w( Japon´s0 , Y amato1 ) · P r( Japon´s0 | Kirin1 )+
                     e                             e
w( Servicio a domicilio1 , Y amato1 ) · P r( Servicio a domicilio1 | Kirin1 )+
w( Servicio a domicilio0 , Y amato1 ) · P r( Servicio a domicilio0 | Kirin1 ) =
                  0,386 · 0,298 + 0, 614 · 0,327 = 0,316

                                                           18
P r( W ok buf f et libre1 | Kirin1 ) =
       w( Japon´s1 , W ok buf f et libre1 ) · P r( Japon´s1 | Kirin1 )+
               e                                         e
       w( Japon´s0 , W ok buf f et libre1 ) · P r( Japon´s0 | Kirin1 ) =
               e                                         e
                           0,386 · 0,298 = 0,115




                      P r( P erf il usuario1 | Kirin1 ) =
         w( Japon´s1 , P erf il usuario1 ) · P r( Japon´s1 | Kirin1 )+
                 e                                      e
         w( Japon´s0 , P erf il usuario1 ) · P r( Japon´s0 | Kirin1 ) =
                 e                                      e
                            0,177 · 0,298 = 0,053


Obtenemos la probablidad para cada uno de los votos.
P r(A = 5| Kirin ) = P r( P erf il usuario1 | Kirin1 )+P r( Y amato1 | Kirin1 ) =
0,053 + 0,316 = 0,369
P r(A = 4| Kirin ) = P r( W ok buf f et libre1 | Kirin1 ) = 0,115
P r(A = 0| Kirin ) = 1 −             P r(A = s| Kirin ) = 0,516
                              ∀s∈R


Ahora normalizamos aquellas posiciones que son relativas a una valoración
(es decir, las distintas a 0). [15]
                           P r(A=4| Kirin )
P r(A = 4| Kirin ) =      1−P r(A=0| Kirin )
                                               = 0,2376
                           P r(A=5| Kirin )
P r(A = 5| Kirin ) =      1−P r(A=0| Kirin )
                                               = 0,7624

Finalmente obtenemos como predicción el voto promedio.
predicci´n =
        o             s · P r(A = s| Kirin ) = 4,76
               ∀s∈R


La fiabilidad de esta predicción la podemos calcular como:
f iabilidad = (1 − P r(A = 0| Kirin )) · 100 = 48, 4 %




                                               19
3.6.     Predicción vs Recomendación
No es lo mismo recomendar que predecir [18]. Predecir es simplemente esti-
mar el valor del voto que un usuario daría a un determinado ítem según el
conocimiento que el sistema tenga formado sobre el usuario gracias a votacio-
nes previas que haya realizado. Por otra parte, recomendar involucra calcular
predicciones para un conjunto de ítems y mostrar aquellos resultados más afi-
nes para el usuario. El usuario no quiere que le recomendemos sitios que no
le gusten (predicción baja), sino aquellos que puede que le vayan a gustar
(predicción media-alta).


3.7.     Problema del cold-starting
Para que el sistema de recomendación funcione correctamente es necesario
que el usuario haya votado varios sitios, así como haber ajustado su perfil de
gustos. El problema del cold-starting [18, 12](o inicio frío) viene a plantear
que esta situación ideal no siempre se da, ya que habrá usuarios nuevos
que quieran recomendaciones sin haber valorado suficientes ítems. Se pueden
abordar diferentes medios de actuación ante esta situación:

       Pasar de él: le decimos que no hay resultados y que es necesario votar
       más sitios para obtener recomendaciones.

       Tratarlo como el usuario medio: se trazaría un usuario medio conforme
       al resto de usuarios y se le recomendarían ítems. El problema es que el
       usuario medio no existe.

       Popularidad: mostrar aquellos ítems más populares en la categoría que
       se esté indicando. Es la solución que hemos adoptado.


3.8.     Un poco más rápido
Para mejorar la velocidad del sistema es posible cachear algunos resultados
que son menos proclives a cambiar como pueden ser:

       Etiquetas de un sitio: los descriptores con los que se incorpora un nuevo
       sitio suelen variar poco o nada.

       Probabilidad de un sitio para un usuario: esta probabilidad sólo cam-
       biará si el usuario vota nuevos sitios con el mismo tipo.

                                       20
Probabilidad de un sitio para el evidence: esta probabilidad sólo variará
       si se cambian las etiquetas de alguno de los dos sitios.

Por ejemplo, una consulta sobre recomendación de restaurantes en Granada
pasa de tardar 4.51 segundos a 2.89 segundos tras habilitar el sistema de
caché.


3.9.     Limitaciones
En el sistema de recomendación basado en contenido se usa información
estructurada, en nuestro caso los tipos y etiquetas. Sin embargo, no se tienen
en cuenta las valoraciones de otros usuarios a la hora de recomendar sitios,
por lo que se podría dar la situación de que estemos recomendando un sitio
que, si bien está acorde con el perfil del usuario, está muy mal valorado por
otros usuarios.
Se aconseja pues, usar un método híbrido que tenga en cuenta tanto aspectos
cuantitativos como cualitativos [23].
Una preocupación de los usuarios ha sido que el sistema les ha recomendado
sitios de estilo gay cuando ellos no han votado ninguno de ese estilo, esto
puede ocurrir porque estos sitios tengan otras etiquetas en común, como
pueden ser la música o las instalaciones. Para tratar esta etiqueta en especial,
lo que haremos será evitar estos resultados si el usuario no ha seleccionado
entre sus gustos este determinado estilo.


4.     Sistema de filtrado colaborativo
Los sistemas de fitrado colaborativo intentan identificar grupos de personas
que tienen gustos similares, de manera que un usuario pertenecerá un cierto
grupo dependiendo de los sitios que haya votado. Así pues, se puede definir el
concepto de vecinos como aquellos usuarios que más gustos en común tienen
con el usuario activo. Los ítems a recomendar serán aquellos mejor valorados
por este conjunto de vecinos, o bien aquellos que más se asemejen al conjunto
de etiquetas que definan a este grupo de usuarios.


4.1.     Elementos del sistema de recomendación
En el caso del filtrado colaborativo se necesitan los siguientes elementos:

                                       21
Ui representa a un usuario.
       Ij representa a un ítem.

Diremos que el usuario Ui habrá votado el sitio Ij cuando le haya asignado
una valoración del conjunto R={0.5, 1, 1.5, 2, 2.5, 3, 3.5 4, 4.5, 5}.


4.2.     Medidas de similaridad
Para calcular la similaridad entre usuarios se pueden usar distintas métricas
[12], entre las cuales hemos escogido las tres siguientes para una posterior
evaluación:

       Coseno:
                              P
                              m
                                rux ,ih ·ruy ,ih
                              h=1
       sim(ux , uy ) =   s            s
                             P 2
                             m            P 2
                                          m
                               rux ,i         ruy ,i
                         h=1          h   h=1      h

       donde ru,i es la valoración del ítem i por el usuario u y n es el número
       de ítems en común entre ambos usuarios.
       Correlación de Pearson:
                                P
                                m
                                  (rux ,ih −¯ux )·(ruy ,ih −¯uy )
                                            r               r
                               h=1
       sim(ux , uy ) =   s                      s
                             P
                             m                     P
                                                   m
                               (rux ,ih −¯ux )2
                                         r            (ruy ,ih −¯uy )2
                                                                r
                         h=1                       h=1
       donde ru,i es la valoración del ítem i por el usuario u, ru es la media
                                                                ¯
       de valoraciones del usuario u para todos sus votos en común y n es el
       número de ítems en común entre ambos usuarios.
       Correlación de Pearson limitada (Constrained Pearson’s Correla-
       tion):
                                P
                                m
                                  (rux ,ih −rmed )·(ruy ,ih −rmed )
                               h=1
       sim(ux , uy ) =   s                       s
                             P
                             m                      P
                                                    m
                               (rux ,ih −rmed )2       (ruy ,ih −rmed )2
                         h=1                           h=1
       donde ru,i es la valoración del ítem i por el usuario u, rmed es el valor
       medio en la escala de valoraciones R (en nuestro caso 2.5) y n es el
       número de ítems en común entre ambos usuarios.


4.3.     Predicción del voto
Una vez escogida una medida de similaridad y teniendo los vecinos del usuario
activo, pasamos a predecir el voto sobre un determinado ítem [12, 15]:

                                                   22
P
                     m
                           sim(ua ,uh )·(ruh ,ia −¯uh )
                                                  r
                     h=1
predicci´n = rua +
        o    ¯                P
                              m
                                   |sim(ua ,uh )|
                             h=1
donde m es el número de usuarios que han votado el ítem ia , ua es el usuario
activo, uh un usuario que ha votado el ítem y r es la media de los votos en
                                              ¯
común para un determinado usuario.


4.4.     Problema del cold-starting
Este tipo de sistema también presenta el problema del cold-starting comen-
tado anteriormente. ¿Qué conjunto de vecinos tendrá un usuario nuevo? No
lo sabremos hasta que empiece a valorar sitios y defina su perfil de usuario.
Además presenta un nuevo agravante con ítems nuevos. Si nadie lo ha vota-
do, ¿cómo darlo a conocer? En el caso del sistema basado en contenido no
habría problema, ya que lo que prima son los descriptores del ítem. Si éstos
son relevantes para el usuario, el sitio le será recomendado. Por lo que sería
más adecuado usar un método híbrido para resolver este problema.[11]
El mayor inconveniente de los sistemas colaborativos se da cuando se crea
una nueva comunidad [18]. El sistema no funcionará bien debido a los pocos
votos que hay. La solución más habitual es incentivar a un grupo de usuarios
para que voten nuevos sitios antes de lanzarlo al público. Otra solución sería
dar inicialmente recomendaciones usando un enfoque basado en contenido,
que es lo que se está haciendo actualmente en el proyecto.


5.     Evaluación
Para intentar evaluar cuantitativamente el sistema de recomendación se han
realizado una serie de mediciones.


5.1.     Colección de datos
Si bien el escenario de las pruebas no es el más favorable, ya que la web está
aún comenzando a funcionar, nos podremos hacer una idea de cómo funciona
el sistema.

Estadísticas

       Usuarios registrados: 330

                                                    23
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

Distribución de votos

Se puede observar en la gráfica de la izquieda que la mayoría de los sitios
votados son con la puntuación 4 y 5. La razón de que los valores no ente-
ros sean los menos usados es porque esta posibilidad se ha introducido con
posterioridad. La gráfica de la derecha nos muestra que la mayoría de los
usuarios votan cosas que les gustan (entre 4 y 5).




       Figura 5: Distribución de votos (izq.) y de votos medios (dcha.)


5.2.     Métricas
Hemos usado diferentes métricas para obtener los resultados:

       Error medio absoluto (MAE) que nos indica cómo de ajustado están
       las predicciones del sistema respecto a la valoración real del usuario.
                 P
                 N
                       |pi −ri |
       M AE =    I=1
                    N
                          siendo N el número de votos del conjunto evaluado,
       pi el voto predicho para un determinado ítem y ri el voto real.

                                      24
Error cuadrático medio (MSE) es similar al MAE, sólo que pena-
       liza más el error cometido cuanto más alejada esté la predicción de la
                          P
                          N
                                |pi −ri |2
       realidad. M SE =   I=1
                                 N

       Porcentaje de predicción: indica el porcentaje de votos del conjunto
       de prueba que se han podido predecir.

       Porcentaje de aciertos: indica el porcentaje de predicciones que con-
       cuerdan con el voto real. Se ha supuesto una tolerancia de 0.5 como el
       grado de error que admitiría el usuario.


5.3.     Metodología
En la tabla 2 y 3 se comparan diferentes esquemas de predicción.
Consideraciones sobre las medidas de la tabla 2:

       Para el voto medio sólo se cogen usuarios que hayan votado más de 5
       veces.

       La medida del coseno sólo se realiza con los gustos del perfil de usuario,
       luego sólo se tienen en cuenta aquellos que hayan rellenado su ficha.

       Las diferentes medidas para el sistema basado en contenido se refieren
       a n como el número de votos mínimo necesario para que un usuario sea
       considerado.

       Se han realizado mediciones de dos formas distintas. Primeramente,
       se ha extraído un 20 % del conjunto total de votos como conjunto de
       prueba y se han realizado 20 ejecuciones por cada método, obteniendo
       así la media y la desviación estándar.

En la tabla 3 se ha usado el método leave one out, es decir, sólo se saca cada
vez un elemento del conjunto.
En la tabla 4, como se ha comentado en la sección 3.5, se han probado
distintas estrategias para obtención de voto en el sistema de recomendación
basado en contenido y se ha comprobado su eficacia con diferentes métricas.
Las mediciones, en este caso, se han obtenido extrayendo un sólo voto del
conjunto total (leave one out), para cada uno de los votos.



                                             25
5.4.    Resultados

                                               MAE           %Predicción
       Método                                 x
                                              ¯        σ      x
                                                              ¯     σ
       Voto medio                          0.8330   0.0704   100    0
       Coseno (contenido)                  1.4460   0.2114   29.6  5.9
       Basado en contenido (n>1)           0.9591   0.1760   27.9  3.8
       Basado en contenido (n>5)           1.0296   0.1371   29.9  4.3
       Basado en contenido (n>10)          1.0189   0.1896   32.1  6.5
       Colaborativo COS                    0.9700   0.0960   63.4  4.2
       Colaborativo CPC                    0.9278   0.0887   51.7  4.0
       Colaborativo COR                    0.9208   0.0877   29.8  3.0

Cuadro 2: Resultado de los distintos métodos usando un conjunto de entre-
namiento (80 %) y otro de test (20 %)
MAE = Mean Absolute Error (Error Medio Absoluto)
%Predicción = porcentaje de votos del conjunto de prueba que se han podido pre-
decir
COS = Coseno
CPC = Constrained Pearson’s Correlation
COR = Pearson’s Correlation
Nota: El MAE sólo tiene en cuenta los votos que se han predecido


          Método               MAE     MSE               %Predicción
          Voto medio          0.87678 1.4085                92
          Coseno (contenido)  1.49458 3.0523                11
          Basado en contenido 0.9791 1.8858                 27
          Colaborativo COS    0.9735 1.7680                 63
          Colaborativo CPC    0.8938 1.3616                 55
          Colaborativo COR    0.9917 1.7019                 36

    Cuadro 3: Resultado de los distintos métodos usando leave one out
MAE = Mean Absolute Error (Error Medio Absoluto)
MSE = Mean Squared Error (Error Cuadrático Medio)
%Predicción = porcentaje de votos que se han podido predecir
COS = Coseno
CPC = Constrained Pearson’s Correlation
COR = Pearson’s Correlation
Nota: El MAE sólo tiene en cuenta los votos que se han predecido



                                      26
El método del voto medio se incluye meramente como elemento comparativo
de predicciones, ya que no es útil para hacer recomendaciones (a todos los
sitios le asignaría el mismo voto). La causa de que se comporte mejor que el
resto de métodos es porque como hemos visto en la sección 5.1, la distribución
de votos medios está muy concentrada entre las puntuaciones 4 y 5, y el error
cometido en la predicción será menor.
De los modelos implementados el que menor error de predicciones presenta es
el colaborativo con la medida de similitud Constrained Pearson’s Correlation.
También se puede ver que el sistema basado en contenido obtiene un resultado
muy similar al colaborativo con la medida coseno, aunque éste último con un
porcentaje de predicción tres veces mayor. Con el error cuadrático medio nos
podemos dar cuenta de cómo de grande es el error cometido en la predicción,
siendo de nuevo el método colaborativo CPC el que mejor resultados obtiene.
Los porcentajes de predicción son significativamente más bajos en el modelo
basado en contenido respecto al colaborativo por varios motivos: primero
porque es más fácil que haya usuarios que al menos hayan votado un sitio en
común a que un usuario haya votado varios sitios del mismo tipo; otra causa
es que en la base de datos hay muchos sitios que no están suficientemente
bien descritos (tienen pocas etiquetas significativas), por lo que a la hora de
comparar sitios por contenido el sistema no puede alcanzar todo su potencial.
La causa de que el porcentaje de predicción del voto medio no sea del 100 %
es porque hay un 8 % de votos únicos, es decir, el usuario sólo ha votado un
sitio, y al sacarlo del conjunto de datos, su voto medio va a ser cero. En el
caso de la medida coseno en contenido sólo se ha aplicado a aquellos usuarios
que han rellenado su perfil de gustos, y la causa por lo que se obtiene un
resultado tan pobre se achaca a que las etiquetas de los sitios que han votado
apenas si coincidirán con los gustos elegidos.

                                  MAE MSE           %aciertos
              Voto mediano        1.0034 2.0627       42 %
              Voto promedio       0.9790 1.8854       34 %
              Voto máximo         1.0238 2.0799       40 %

Cuadro 4: Resultados de las distintas estrategias de obtención del voto en el
sistema basado en contenido
MAE = Mean Absolute Error (Error Medio Absoluto)
MSE = Mean Squared Error (Error Cuadrático Medio)


Los resultados de la tabla 4 nos han llevado a elegir el voto promedio como
método para la obtención del voto en una predicción (en el sistema basado

                                     27
en contenido). Si bien el porcentaje de aciertos es menor, el error cometido
también lo es, por lo que creemos que conforme se incremente el conjunto de
datos del sistema, va a ser el que mejor funcione.


5.5.    Conclusiones
A lo largo de las secciones anteriores hemos desarrollado la motivación, expli-
cación y funcionamiento de los diferentes tipos sistemas de recomendación,
centrándonos en las implementaciones realizadas de los métodos basados en
contenido y de filtrado colaborativo. Hemos visto también como, para un pro-
yecto en particular, adaptar los sistemas para mejorar la calidad y eficiencia
de las recomendaciones, añadiendo más contenido semántico y utilizándolo
inteligentemente. Este tipo de sistemas no está libre de limitaciones y proble-
mas, que exigen un estudio detallado para paliarlas usando diferentes estra-
tegias y nuevos métodos, como el de hibridación, que podremos desarrollar
en un futuro.


6.     Soluciones desarrolladas
  1. Se ha realizado un cambio completo de plataforma para pasar a usar el
     framework django [1], que utiliza el lenguaje python [6], con acceso a
     base de datos mysql [10] y con jquery [3] como framework en javascript.
     Se ha elegido django por diversos motivos:

           Cambiar la estructura completa de la web anterior para adaptar-
           la a diversas provincias era muy costoso y además sería menos
           potente.
           Ayuda a un desarrollo rápido.
           Bien documentado.
           Sigue un modelo similar al MVC (Modelo Vista Controlador).
           Proporciona una API potente para manejar el modelo.
           Interfaz de administración automática.
           Diseño canónico de URLs mediante expresiones regulares.
           Soporte para aplicaciones multi-idioma.

  2. Para incentivar a los usuarios a que participen se les dan puntos por
     cada acción que realicen, de manera que es una forma de fomentar la

                                      28
competición y también poder premiar con regalos y descuentos en un
       futuro. También se proporciona una guía para completar el perfil de
       usuario y cómo comenzar a integrarse en la web.
  3. Se ha implementado un sistema de recomendación basado en contenido.
     Las recomendaciones que se dan al usuario son en base a los sitios que
     anteriormente ha votado y a los gustos que ha escogido en su perfil.
     Por tanto se requiere una colaboración activa del usuario para poder
     ofrecer recomendaciones fiables.
  4. Se han jerarquizado las etiquetas en varias categorías con el fin de
     facilitar las búsquedas de sitios y sobre todo para poder darle a unas
     más importancia que a otras a la hora de hacer recomendaciones, según
     sea el tipo de local.
  5. La versión móvil está accesible a través de m.andaluciapeople.com y
     permite consultar sitios y usuarios, pero en modo sólo lectura. En un
     futuro se pretenden ampliar funcionalidades.
  6. Se ha incluído soporte para añadir varios idiomas de forma sencilla,
     aunque actualmente sólo está disponible la traducción a inglés.
  7. Se ha añadido un blog para informar sobre novedades en la aplicación.
  8. Se proporcionan diferentes feeds para suscripción por RSS de los últi-
     mos sitios, comentarios y fotos en las distintas provincias.


7.     Aspectos adicionales del desarrollo

7.1.     Entorno de desarrollo
La aplicación se ha desarrollado usando un editor de textos en un sistema con
python 2.5 y django 1.0. Como servidor web de pruebas he usado el servidor
de producción de django, que se reinicia automáticamente cada vez que se
edita un fichero y además avisa de posibles errores.


7.2.     Entorno de producción
El sistema de cara al público está alojado en un alojamiento compartido con-
tratado en Webfaction[7] con una instalación de Apache 2 con mod_python,
python 2.5 y django 1.0. Para el sistema de caché se usa memcached [8].

                                     29
7.3.     Control de versiones
Con objeto de mantener coherencia en los archivos del proyecto, así como
servir de backup, se ha hecho uso de un repositorio privado en Github [2]. Se
ha escogido git por su potencia y facilidad de uso.


7.4.     Sistema de tickets
Para tener un mejor control de errores y un listado de nuevas características
a implementar, se ha utilizado un sistema de tickets en Lighthouse [4].


7.5.     Licencia
El código desarrollado en el proyecto se ha licenciado bajo AGPLv3 [9] que
garantiza las principales libertades del software libre.

       Libertad 0: la libertad de usar el programa, con cualquier propósito.

       Libertad 1: la libertad de estudiar cómo funciona el programa y modi-
       ficarlo, adaptándolo a tus necesidades.

       Libertad 2: la libertad de distribuir copias del programa.

       Libertad 3: la libertad de mejorar el programa y hacer públicas esas
       mejoras a los demás, de modo que toda la comunidad se beneficie.

Así mismo el proyecto está adherido a la lista de proyectos libres apoyados por
la Oficina de Software Libre de la Universidad de Granada. La última versión
liberada se puede encontrar en http://andaluciapeople.com/media/releases/


8.     Manual de usuario
Lo primero que tiene que hacer una persona para recibir recomendaciones en
la web es registrarse, ya que si no, no se podrá formar un perfil de usuario y
por tanto tampoco se tendrían recomendaciones personalizadas. Un visitante
normal sólo podrá consultar los sitios, conocer otros nuevos por similaridad
e incluso ver los mejores valorados por el resto de usuarios.
Para crear una cuenta basta con entrar en http://andaluciapeople.com y
hacer click sobre el enlace “Regístrate”.

                                      30
Figura 6: Detalle de la página principal


En la siguiente página rellenamos el formulario de registro con los datos que
se solicitan y pulsamos el botón “Registrar”.




                 Figura 7: Detalle de la página de registro


Si el registro se ha completado con éxito, nos avisará con un mensaje de que
ya podemos entrar usando el usuario y contraseña que usamos para crear la
cuenta. Igualmente, se enviará un correo electrónico a la dirección indicada
con los datos de acceso a la web. Rellenamos el formulario de entrada y
pulsamos el botón “Login”.




                                     31
Figura 8: Detalle de la página de entrada


Una vez identificado, nos encontramos en la ficha de usuario, con un resumen
de la cuenta personal, y entre otras cosas podemos distinguir un menú de
navegación en la parte superior y una serie de indicaciones a la izquierda
sobre cómo rellenar el perfil de usuario.




                 Figura 9: Menú de navegación de usuario




       Figura 10: Detalle de las indicaciones para completar el perfil


                                    32
Lo primero que haremos será cambiar la foto de usuario y rellenar los gustos,
ya que ambos se encuentran en el mismo formulario de datos personales en la
sección de “Ajustes”. Para ello podemos hacer click en “Ajustar preferencias”
o bien en cualquiera de los dos primeros enlaces de la lista.




                 Figura 11: Formulario de datos personales


Una vez completado el formulario pulsamos el botón “Guardar” para salvar
los cambios. Justo debajo de este formulario se encuentra otro que sirve para
definir la importancia de las etiquetas para los diferentes tipos de sitios.
Podemos aprovechar para modificar los pesos que consideremos oportunos y

                                     33
cuando terminemos pulsamos el botón “Guardar”.




     Figura 12: Detalle del formulario de importancia de las etiquetas


Ahora ya podemos proceder al siguiente paso, que es buscar sitios que conoz-
camos y puntuarlos. Para ellos seleccionamos primero la provincia en la parte
superior y a continuación usamos el formulario de búsqueda para encontrar
sitios. También podemos acceder a la sección de “Sitios” y navegar por la
clasificación de tipos.




                    Figura 13: Menú principal de la web


Si por ejemplo, buscamos “wok” en Granada, obtenemos tres resultados.




                                     34
Figura 14: Resultados a la búsqueda “wok” en Granada


Si consultamos por ejemplo al primero de ellos, entraremos a su ficha y po-
demos ver en este caso que la predicción que nos hace para este sitio es
“Perfecto” debido a los gustos que escogimos en nuestro perfil. Para votarlo
nos situamos sobre las estrellas que pasarán a tener un color rojizo y haremos
click en la puntuación que queramos asignarle. En este caso hemos decidido
decidido otorgarle 4 estrellas (“Muy Bueno”).




 Figura 15: Detalle de la ficha del sitio antes y después de haberlo votado


Repetimos la operación con los sitios que conozcamos. Si por ejemplo nuestra
intención es hacer un viaje a Málaga y comer en un restaurante, le pedire-
mos al sistema que nos recomiende cuáles nos podrían gustar. Para ello nos
dirigimos a la sección “Recomendaciones” en el menú de navegación de “Tu
cuenta”. Una vez seleccionado que queremos que nos muestre restaurantes de
Málaga capital, pulsamos el botón “Buscar” y nos aparecerán los resultados
más acordes con nuestros gustos.

                                     35
Figura 16: Resultado de la recomendación



9.    Conclusión
Con todas las mejoras realizadas tanto de diseño como de nuevas funcionali-
dades, hacen de AndalucíaPeople una web mucho más atractiva y útil como
así han demostrado las buenas críticas recibidas por parte de los usuarios y
visitantes.
De cara al público el sistema de recomendación funciona aceptablemente
bien, o esa es la sensación que han transmitido las diversas personas que han
estado realizando pruebas. Si bien, tras la evaluación cuantitativa realizada
se puede esperar que el sistema sea mejorable utilizando un enfoque híbrido.
Cabe esperar también que mejore conforme aumente el número de sitios y
de usuarios que añadan más información al conjunto.
Creemos que los sistemas de recomendación van a seguir creciendo ya que
cada vez se posee más información de los usuarios y se les va a poder ofrecer
resultados de mejor calidad. Igualmente está ocurriendo que en el mercado
publicitario las ofertas publicitarias se están hipersegmentando, de manera
que lleguen a nichos de personas más específicos y llegará un momento que
sean totalmente personalizadas gracias a este tipo de sistemas.




                                     36
Referencias
 [1] http://djangoproject.com/.

 [2] http://github.com/.

 [3] http://jquery.com/.

 [4] http://lighthouseapp.com/.

 [5] http://microformats.org/.

 [6] http://python.org/.

 [7] http://webfaction.com/.

 [8] http://www.danga.com/memcached/.

 [9] http://www.fsf.org/licensing/licenses/agpl-3.0.html.

[10] http://www.mysql.com/.

[11] Gediminas Adomavicius and Alexander Tuzhilin. Toward the next ge-
     neration of recommender systems - a survey of the state-of-the-art and
     possible extensions. 2005.

[12] Hyung Jun Ahn. A new similarity measure for collaborative filtering to
     alleviate the new user cold-starting problem. 2007.

[13] Robin Burke. Hybrid recommender systems: Survey and experiments.
     2002.

[14] Luis M. de Campos, Juan M. Fernández-Luna, and Juan F. Huete. A
     collaborative recommender system based on probabilistic inference from
     fuzzy observations. 2008.

[15] Luis M. de Campos, Juan M. Fernández-Luna, Juan F. Huete, and Mi-
     guel A. Rueda-Morales. Combining content-based and collaborative re-
     commendations: a hybrid approach based on bayesian networks. 2008.

[16] Olga Fdez. Deleito. Diseñar sistemas de recomendación: Percepción de
     los usuarios y tipos resultantes.

[17] A. Holovaty and J. Kaplan-Moss.                  The   Django   Book.
     http://www.djangobook.com/, 2009.


                                    37
[18] Jon Herlocker J. Ben Schafer, Dan Frankowski and Shilad Sen. Colla-
     borative filtering recommender systems. 2007.

[19] C. Kadie J. S. Breese, D. Heckerman. Empirical analysis of predictive
     algorithms for collaborative filtering. 1998.

[20] Loren G. Terveen Jonathan L. Herlocker, Joseph A. Konstan and
     John T. Riedl. Evaluating collaborative filtering recommender systems.

[21] Benjamin Marlin. Collaborative filtering: A machine learning perspec-
     tive. 2004.

[22] Sergio Manuel Galán Nieto. Filtrado colaborativo y sistemas de reco-
     mendación. 2007.

[23] Michael J. Pazzani and Daniel Billsus. Content-based recommendation
     systems. 2007.

[24] Janusz Sobecki. Implementations of web-based recommender systems
     using hybrid methods. 2006.




                                   38

Más contenido relacionado

Destacado

Implementación de un Sistema de recomendaciones con PSO (estado del arte)
Implementación de un Sistema de recomendaciones con PSO (estado del arte)Implementación de un Sistema de recomendaciones con PSO (estado del arte)
Implementación de un Sistema de recomendaciones con PSO (estado del arte)
Ignacio Antonio Salas Donoso
 

Destacado (9)

From sensor readings to prediction: on the process of developing practical so...
From sensor readings to prediction: on the process of developing practical so...From sensor readings to prediction: on the process of developing practical so...
From sensor readings to prediction: on the process of developing practical so...
 
C4 sistema de recomendacion basado en pso
C4 sistema de recomendacion basado en psoC4 sistema de recomendacion basado en pso
C4 sistema de recomendacion basado en pso
 
Implementación de un Sistema de recomendaciones con PSO (estado del arte)
Implementación de un Sistema de recomendaciones con PSO (estado del arte)Implementación de un Sistema de recomendaciones con PSO (estado del arte)
Implementación de un Sistema de recomendaciones con PSO (estado del arte)
 
Minería de secuencias de datos
Minería de secuencias de datosMinería de secuencias de datos
Minería de secuencias de datos
 
Quick presentation for the OpenML workshop in Eindhoven 2014
Quick presentation for the OpenML workshop in Eindhoven 2014Quick presentation for the OpenML workshop in Eindhoven 2014
Quick presentation for the OpenML workshop in Eindhoven 2014
 
Minería de secuencias de datos
Minería de secuencias de datosMinería de secuencias de datos
Minería de secuencias de datos
 
Online Detection of Shutdown Periods in Chemical Plants: A Case Study
Online Detection of Shutdown Periods in Chemical Plants: A Case StudyOnline Detection of Shutdown Periods in Chemical Plants: A Case Study
Online Detection of Shutdown Periods in Chemical Plants: A Case Study
 
Towards Automatic Composition of Multicomponent Predictive Systems
Towards Automatic Composition of Multicomponent Predictive SystemsTowards Automatic Composition of Multicomponent Predictive Systems
Towards Automatic Composition of Multicomponent Predictive Systems
 
Handling concept drift in data stream mining
Handling concept drift in data stream miningHandling concept drift in data stream mining
Handling concept drift in data stream mining
 

Similar a AndalucíaPeople: Un sistema de recomendación para sitios de ocio de Andalucía

20100607 guia usos_xarxa_cas
20100607 guia usos_xarxa_cas20100607 guia usos_xarxa_cas
20100607 guia usos_xarxa_cas
José Luis López
 

Similar a AndalucíaPeople: Un sistema de recomendación para sitios de ocio de Andalucía (20)

Guía de usos y estilo
Guía de usos y estiloGuía de usos y estilo
Guía de usos y estilo
 
20100607 guia usos_xarxa_cas
20100607 guia usos_xarxa_cas20100607 guia usos_xarxa_cas
20100607 guia usos_xarxa_cas
 
Analitica web para la Empresa
Analitica web para la EmpresaAnalitica web para la Empresa
Analitica web para la Empresa
 
Memoria Proyecto Fin de Carrera
Memoria Proyecto Fin de CarreraMemoria Proyecto Fin de Carrera
Memoria Proyecto Fin de Carrera
 
Introducción a R - con minería de datos
Introducción a R - con minería de datosIntroducción a R - con minería de datos
Introducción a R - con minería de datos
 
Programacion de una tienda virtual en Grails
Programacion de una tienda virtual en GrailsProgramacion de una tienda virtual en Grails
Programacion de una tienda virtual en Grails
 
Actividad 5
Actividad 5Actividad 5
Actividad 5
 
Sistema de crm de codigo abierto sugarcrm
Sistema de crm de codigo abierto sugarcrm Sistema de crm de codigo abierto sugarcrm
Sistema de crm de codigo abierto sugarcrm
 
Lujan.pdf
Lujan.pdfLujan.pdf
Lujan.pdf
 
Guia creacion paginas web
Guia creacion paginas webGuia creacion paginas web
Guia creacion paginas web
 
Sistema_de_gestion_de_asistencias_de_ase.pdf
Sistema_de_gestion_de_asistencias_de_ase.pdfSistema_de_gestion_de_asistencias_de_ase.pdf
Sistema_de_gestion_de_asistencias_de_ase.pdf
 
Guia usos xarxa_es generalitat de catalunya
Guia usos xarxa_es generalitat de catalunyaGuia usos xarxa_es generalitat de catalunya
Guia usos xarxa_es generalitat de catalunya
 
Redes sociales gencat feb 2012
Redes sociales gencat feb 2012Redes sociales gencat feb 2012
Redes sociales gencat feb 2012
 
978 84-9839-226-5
978 84-9839-226-5978 84-9839-226-5
978 84-9839-226-5
 
Guia Evaluacion Impacto Metodologias Participativas
Guia Evaluacion Impacto Metodologias ParticipativasGuia Evaluacion Impacto Metodologias Participativas
Guia Evaluacion Impacto Metodologias Participativas
 
Desarrollo_de_aplicaciones_y_paginas_web.pdf
Desarrollo_de_aplicaciones_y_paginas_web.pdfDesarrollo_de_aplicaciones_y_paginas_web.pdf
Desarrollo_de_aplicaciones_y_paginas_web.pdf
 
Sistema de Monitoreo Común para Proyectos de Integración Productiva BID Nexus
Sistema de Monitoreo Común para Proyectos de Integración Productiva BID NexusSistema de Monitoreo Común para Proyectos de Integración Productiva BID Nexus
Sistema de Monitoreo Común para Proyectos de Integración Productiva BID Nexus
 
Trabajo idmi
Trabajo idmiTrabajo idmi
Trabajo idmi
 
Sistema de Computación Distribuida Peer to Peer
Sistema de Computación Distribuida Peer to PeerSistema de Computación Distribuida Peer to Peer
Sistema de Computación Distribuida Peer to Peer
 
Peer to Peer
Peer to PeerPeer to Peer
Peer to Peer
 

Más de Manuel Martín

Effects of change propagation resulting from adaptive preprocessing in multic...
Effects of change propagation resulting from adaptive preprocessing in multic...Effects of change propagation resulting from adaptive preprocessing in multic...
Effects of change propagation resulting from adaptive preprocessing in multic...
Manuel Martín
 
Operaciones Colectivas en MPI
Operaciones Colectivas en MPIOperaciones Colectivas en MPI
Operaciones Colectivas en MPI
Manuel Martín
 
Introducción a GNU/Linux
Introducción a GNU/LinuxIntroducción a GNU/Linux
Introducción a GNU/Linux
Manuel Martín
 
Presentación Día de la Libertad del Software 2011
Presentación Día de la Libertad del Software 2011Presentación Día de la Libertad del Software 2011
Presentación Día de la Libertad del Software 2011
Manuel Martín
 
Presentacion Taller de Introducción a Linux SFD2010
Presentacion Taller de Introducción a Linux SFD2010Presentacion Taller de Introducción a Linux SFD2010
Presentacion Taller de Introducción a Linux SFD2010
Manuel Martín
 

Más de Manuel Martín (20)

Hogar (Des)Conectado
Hogar (Des)ConectadoHogar (Des)Conectado
Hogar (Des)Conectado
 
Automatizando el aprendizaje basado en datos
Automatizando el aprendizaje basado en datosAutomatizando el aprendizaje basado en datos
Automatizando el aprendizaje basado en datos
 
Modelling Multi-Component Predictive Systems as Petri Nets
Modelling Multi-Component Predictive Systems as Petri NetsModelling Multi-Component Predictive Systems as Petri Nets
Modelling Multi-Component Predictive Systems as Petri Nets
 
Brand engagement with mobile gamification apps from a developer perspective
Brand engagement with mobile gamification apps from a developer perspectiveBrand engagement with mobile gamification apps from a developer perspective
Brand engagement with mobile gamification apps from a developer perspective
 
Effects of change propagation resulting from adaptive preprocessing in multic...
Effects of change propagation resulting from adaptive preprocessing in multic...Effects of change propagation resulting from adaptive preprocessing in multic...
Effects of change propagation resulting from adaptive preprocessing in multic...
 
Improving transport timetables usability for mobile devices
Improving transport timetables usability for mobile devicesImproving transport timetables usability for mobile devices
Improving transport timetables usability for mobile devices
 
Automating Machine Learning - Is it feasible?
Automating Machine Learning - Is it feasible?Automating Machine Learning - Is it feasible?
Automating Machine Learning - Is it feasible?
 
Artificial Intelligence for Automating Data Analysis
Artificial Intelligence for Automating Data AnalysisArtificial Intelligence for Automating Data Analysis
Artificial Intelligence for Automating Data Analysis
 
Decompiladores
DecompiladoresDecompiladores
Decompiladores
 
Operaciones Colectivas en MPI
Operaciones Colectivas en MPIOperaciones Colectivas en MPI
Operaciones Colectivas en MPI
 
Introducción a GNU/Linux
Introducción a GNU/LinuxIntroducción a GNU/Linux
Introducción a GNU/Linux
 
Presentación Día de la Libertad del Software 2011
Presentación Día de la Libertad del Software 2011Presentación Día de la Libertad del Software 2011
Presentación Día de la Libertad del Software 2011
 
Presentacion Taller de Introducción a Linux SFD2010
Presentacion Taller de Introducción a Linux SFD2010Presentacion Taller de Introducción a Linux SFD2010
Presentacion Taller de Introducción a Linux SFD2010
 
Presentación Gnome 3.0 en Granada
Presentación Gnome 3.0 en GranadaPresentación Gnome 3.0 en Granada
Presentación Gnome 3.0 en Granada
 
AndalucíaPeople: Un sistema de recomendación para sitios de ocio de Andalucía
AndalucíaPeople: Un sistema de recomendación para sitios de ocio de AndalucíaAndalucíaPeople: Un sistema de recomendación para sitios de ocio de Andalucía
AndalucíaPeople: Un sistema de recomendación para sitios de ocio de Andalucía
 
Pintando gráficas con Python
Pintando gráficas con PythonPintando gráficas con Python
Pintando gráficas con Python
 
Charla de Introducción a Git
Charla de Introducción a GitCharla de Introducción a Git
Charla de Introducción a Git
 
Taller de introducción a Google App Engine
Taller de introducción a Google App EngineTaller de introducción a Google App Engine
Taller de introducción a Google App Engine
 
Presentación AndalucíaPeople en las BYMC6
Presentación AndalucíaPeople en las BYMC6Presentación AndalucíaPeople en las BYMC6
Presentación AndalucíaPeople en las BYMC6
 
Web 2.0 y Empresa 2.0
Web 2.0 y Empresa 2.0Web 2.0 y Empresa 2.0
Web 2.0 y Empresa 2.0
 

Último

Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
FagnerLisboa3
 

Último (15)

Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Presentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilPresentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmeril
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
presentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxpresentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptx
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 

AndalucíaPeople: Un sistema de recomendación para sitios de ocio de Andalucía

  • 1. Proyecto Fin de Carrera | Ingeniería Informática | Universidad de Granada AndalucíaPeople Un sistema de recomendación para sitios de ocio de Andalucía Autor: Manuel Martín Salvador Tutor: Juan Huete Guadix Curso 2008/2009 1
  • 2. 2
  • 3. Índice 1. Introducción 5 1.1. Motivación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.2. Situación inicial . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.3. Mejoras planteadas . . . . . . . . . . . . . . . . . . . . . . . . 6 1.4. El modelo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2. Introducción a los sistemas de recomendación 8 3. Sistema de recomendación basado en contenido 9 3.1. Elementos del sistema de recomendación . . . . . . . . . . . . 10 3.2. Esquema de pesos . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.3. Red Bayesiana . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3.4. Estimación de probabilidades . . . . . . . . . . . . . . . . . . 14 3.5. Mecanismo de inferencia . . . . . . . . . . . . . . . . . . . . . 15 3.6. Predicción vs Recomendación . . . . . . . . . . . . . . . . . . 20 3.7. Problema del cold-starting . . . . . . . . . . . . . . . . . . . . 20 3.8. Un poco más rápido . . . . . . . . . . . . . . . . . . . . . . . 20 3.9. Limitaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 4. Sistema de filtrado colaborativo 21 4.1. Elementos del sistema de recomendación . . . . . . . . . . . . 21 4.2. Medidas de similaridad . . . . . . . . . . . . . . . . . . . . . . 22 4.3. Predicción del voto . . . . . . . . . . . . . . . . . . . . . . . . 22 4.4. Problema del cold-starting . . . . . . . . . . . . . . . . . . . . 23 5. Evaluación 23 5.1. Colección de datos . . . . . . . . . . . . . . . . . . . . . . . . 23 5.2. Métricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 5.3. Metodología . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 5.4. Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 5.5. Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 3
  • 4. 6. Soluciones desarrolladas 28 7. Aspectos adicionales del desarrollo 29 7.1. Entorno de desarrollo . . . . . . . . . . . . . . . . . . . . . . . 29 7.2. Entorno de producción . . . . . . . . . . . . . . . . . . . . . . 29 7.3. Control de versiones . . . . . . . . . . . . . . . . . . . . . . . 30 7.4. Sistema de tickets . . . . . . . . . . . . . . . . . . . . . . . . . 30 7.5. Licencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 8. Manual de usuario 30 9. Conclusión 36 Referencias 37 4
  • 5. 1. Introducción 1.1. Motivación El germen de este proyecto surgió en 2006 cuando comenzó a implantarse en Internet la tecnología para usar mapas en cualquier web de la mano de empresas como Google o Yahoo! que ofrecían herramientas para facilitar la creación de mashups. Partiendo de este contexto, comencé junto con un com- pañero a idear una web donde posicionar sobre un mapa los bares y pubs de Granada. Con este propósito comenzó GranadaPeople, y con el paso del tiem- po fue creciendo gracias al apoyo de muchas personas, incorporando nuevas funcionalidades y ampliándose con nuevos locales. Una de las personas que se interesaron por la web fue mi tutor de proyecto, que nos animó a hacer un sistema de recomendación, y viendo las posibilida- des que esto tenía, decidí hacerlo como proyecto de fin de carrera. 1.2. Situación inicial Partimos de la web GranadaPeople que fue desarrollada desde cero en PHP y contiene las siguientes características: Una colección de sitios con la siguiente información: nombre, dirección, zona, coordenadas y usuario que lo ha enviado. Un sistema de votación entre 1 y 5 estrellas para que los usuarios pue- dan valorar los sitios. Cada sitio contiene una serie de etiquetas que ayudan a perfilar mejor el tipo de sitio del que se trata. En base a estas etiquetas se pueden establecer unos sitios por similaridad (un sitio se parece tanto más a otro cuantas más etiquetas tengan en común). Uun sistema de comentarios y de subida de fotografías relacionadas con los sitios. Buscador de sitios por etiquetas y por zonas. Geolocalización sobre un mapa, para colocar con la mayor exactitud la posición de un sitio. Listado de eventos y hoteles en la ciudad, proporcionados por agentes externos. 5
  • 6. Sistema de amigos y de mensajería privada. 1.3. Mejoras planteadas El proyecto se basa en mejorar este sistema y ampliarlo a todas las provin- cias andaluzas, para conformar la web andaluciapeople.com. Detallamos un listado de las mejoras que se pretenden realizar: Incluir las 8 provincias andaluzas de forma que puedan ser indepen- dientes, pero administradas bajo la misma interfaz. Incentivar al usuario para que se implique más en la plataforma, ya sea enviando nuevos sitios, corrigiendo errores, valorando sitios, haciendo comentarios y subiendo fotografías. Un sistema de recomendación de sitios que proporcione una buena ex- periencia al usuario. Una versión especial para dispositivos móviles que sea ligera y fácil de usar. Posibilidad de cambiar el idioma. Para alcanzar estos objetivos se la sección 2 estudiaremos los distintos tipos de sistemas de recomendación, para de forma más detallada en la sección 3 comentar los sistemas de recomendación basados en contenido y en la sección 4 los sistemas de filtrado colaborativo. Se presentan los resultados experimen- tales en la sección 5 y para finalizar se enumeran las soluciones desarrolladas junto otros aspectos del desarrollo y un manual de usuario en las secciones 6, 7 y 8. 1.4. El modelo Con el fin de desarrollar una aplicación web como esta, se han definido una se- rie de clases que especifican un modelo de red social orientada principalmente a la interacción de los usuarios con el sistema. De esta manera, un usuario será capaz de añadir nuevos sitios de un determinado tipo, descritos por eti- quetas categorizadas en una jerarquía, escribir comentarios, subir fotografías y votar cualquier sitio. También podrá establecer lazos de amistad con otros usuarios y decir explícitamente cuáles son aquellas características que más le gustan con vistas a que el sistema pueda hacer mejores recomendaciones de nuevos sitios que aún no conoce. 6
  • 7. User (Usuario): es el elemento más importante de la aplicación, ya que en torno a él van a girar el resto de clases. Sitio: es el segundo elemento más importante. Contiene la información esencial de un sitio: nombre, dirección, coordenadas, teléfono, etc. Tipo: engloba los distintos tipos que pueden definir a un sitio. Etiqueta: cualquier tag que sirva para describir mejor a un sitio. Jerarquía: sirven para definir conjuntos de etiquetas relacionadas. ObjetoEtiquetado: relación entre un sitio y una etiqueta. DatosUsuario: algunos datos personales del usuario, así como su lis- tado de sitios favoritos y las etiquetas que más le gustan. Foto: fotos de un determinado sitio subidas por un usuario. Comentario: comentarios sobre un sitio hechos por un usuario. Voto: valoración de un sitio de un usuario. Amigo: usuarios que establecen una relación de amistad. PesosTipoJerarquía: peso asignado por un usuario a una jerarquía de etiquetas a un determinado tipo de sitio. En la siguiente figura se puede observar el grafo de dependencias entre las clases previamente enumeradas. Figura 1: Grafo del modelo simplificado Además de las clases aquí descritas, se han utilizado algunas más de desarrollo externo como pueden ser las necesarias para el sistema de mensajería privada o el blog. 7
  • 8. 2. Introducción a los sistemas de recomenda- ción En la vida diaria, la publicidad masiva nos invade en televisión, prensa, radio o carteles en la calle. Si bien esto sirve a las marcas para afianzar su imagen y captar clientes, su coste puede llegar a ser muy alto respecto a la efectividad que tienen. En cambio, los productos como libros, películas, discos, etc. los compramos bien porque nos gusta el autor o el género, o bien porque nos lo recomienda algún amigo. El término “sistema de recomendación” surge en los años 90 ligado a proyectos de Inteligencia Artificial en Internet y hoy en día tinen un gran auge con la llamada “Web 2.0”. Algunos ejemplos de uso son [22]: Recomendaciones en tiendas online: partiendo de un producto se re- comiendan otros que han interesado a los usuarios que lo compraron. (Amazon) Filtrado de noticias: se le da más prioridad al tipo de noticias que el usuario consulta frecuentemente. (Google) Recomendaciones musicales, de libros y de películas: generan recomen- daciones en base a los gustos del usuario (MyStrands, filmaffinity) Búsqueda de personas afines en comunidades: se puede generar una lista de vecinos con intereses similares en base a las acciones de un usuario (meneame, last.fm). Los sistemas de recomendación se clasifican normalmente en tres categorías [11]: Sistemas de recomendación basados en contenido: almacenan información sobre cada ítem que va a ser recomendado. Esta informa- ción se usa para recomendar ítem similares a los que previamente ha valorado el usuario. Los principales problemas que acarrea este tipo de sistema son: • Los descriptores que se usan para representar los ítems pueden no resultar muy adecuados. • Es difícil hacer recomendaciones precisas a usuarios con pocos votos. 8
  • 9. • Poca diversidad, ya que sólo se recomendarán ítems similares a los ya votados. Sistemas de filtrado colaborativo: tratan de identificar grupos de personas con intereses comunes al usuario y recomendar ítems que les gustaron. Los sistemas colaborativos se pueden clasificar en dos grupos [19]: • Basados en memoria: utilizan toda la base de datos de elementos y usuarios para generar predicciones. Se emplean técnicas estadís- ticas para encontrar a los vecinos y se combinan sus preferencias par agenerar una lista con los elementos más recomendables para el usuario actual. Es necesario disponer de un número mínimo de usuarios con suficientes votos, incluído el usuario al que se preten- de recomendar. • Basados en modelo: desarrollan primero un modelo de los votos del usuario y luego calculan para cada ítem el valor esperado en función de los anteriores. Se utilizan distintos algoritmos de apren- dizaje clustering o redes neuronales. Sistemas de recomendación híbridos: intentan combinar los dos enfoques anteriores. Se pueden encontrar diferentes métodos de hibri- dación: [15, 24, 13, 11] • Implementando colaborativo y basado en contenido por separado y combinando sus predicciones. • Incorporando algunas características del basado en contenido en el enfoque colaborativo, y viceversa. • Construyendo un modelo unificado que incorpore las característi- cas de ambos métodos. 3. Sistema de recomendación basado en conte- nido Cuando se decidió desarrollar el sistema de recomendación, se considereraron una serie de factores que hacen que éste sea considerado adecuado por los usuarios [16]: 9
  • 10. Facilidad de uso: un sistema difícil haría que fuese usado por muchas menos personas. Calidad de las recomendaciones: cuanto mejor sean las recomen- daciones, los usuarios sentirán más afinidad por el sistema. Familiaridad de los ítems recomendados: si el usuario obtiene recomendaciones de sitios que conoce (pero que aún no ha votado) sentirá que el sistema funciona correctamente. Transparencia del sistema: se le puede decir al usuario porqué le recomendamos esos sitios, ya que se han obtenido siguiendo una serie de pasos lógicos. Tras leer diversos artículos, se partió del esquema de recomendación basado en redes bayesianas que se explica en el artículo escrito por varios investiga- dores del departamento CCIA de la Universidad de Granada [15]. 3.1. Elementos del sistema de recomendación Los principales elementos que conforman el sistema recomendación son los ítems (sitios), los descriptores (etiquetas o tags) y los usuarios, que junto con sus votos hacen posible calcular una predicción de voto para un sitio que el usuario a priori no conoce. Estos elementos se pueden representar por las siguientes variables: Fk será un nodo que identifica una etiqueta que describe un sitio. Toma un valor binario, 0 si no es relevante, 1 si es relevante. Igualmente, habrá un nodo Ij para cada ítem. También toma valores binarios, 0 si no relevante o 1 si es relevante para la predicción que se está haciendo. El conjunto de gustos del perfil del usuario se tratará como un ítem más, cuya valoración será la máxima, ya que el usuario los ha seleccionado explícitamente. Por último se usará un nodo para representar la valoración predicha para el usuario activo y se denota con ACB , donde el subíndice indica que estamos usando el enfoque basado en contenido (content-based). Los posibles valores que puede tomar esta variable son los del conjunto {0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5 4, 4.5, 5}. El valor 0 se incluye para estimar cómo de fiable es el resultado predicho. 10
  • 11. Para conectar estos nodos, consideraremos que la relevancia de un ítem de- penderá de la relevancia de los descriptores que lo definen. Luego habrá enla- ces entre los nodos descriptores y los nodos ítems. En cambio, no hay enlaces directos entre los nodos descriptores, esto es, las etiquetas son marginalmente independientes entre ellas. Los enlaces Fk → Ij indican que el sitio Ij está descrito por la característica Fk y su valor indica la importancia de la misma respecto al resto de etique- tas que lo describen. Los enlaces Ij → ACB indican que el usuario activo ha votado el sitio Ij y el voto que le asignó será el valor de este enlace. Diremos que el usuario activo ha votado el sitio Ij cuando le haya asignado una va- loración del conjunto R={0.5, 1, 1.5, 2, 2.5, 3, 3.5 4, 4.5, 5}. La estimación de probabilidades y su propagación a lo largo de la red se detallan en las secciones 3.4 y 3.5. 3.2. Esquema de pesos Cada sitio está identificado por una serie de etiquetas que le asignan signi- ficado semántico tales como la música de ambiente o el estilo de comida del restaurante. De esta manera, podemos categorizar las etiquetas en diferentes grupos: 1. Tipos: especifica el tipo de sitio. Un sitio puede tener varios tipos. Ejemplos: bar, restaurante, discoteca, pub, pizzería, heladería... 2. Estilo: sirve para especificar un poco mejor las características del sitio. Ejemplos: asador, buffet, chino, italiano, comida rápida, tapas, vegeta- riano... 3. Música: indica el tipo de música que suelen poner en el sitio. Ejemplos: electrónica, flamenco, jazz, latina, pop, rock, salsa... 4. Instalaciones: permite escoger entre distintas instalaciones de las que puede disponer el sitio. Ejemplos: billar, dardos, futbolín, karaoke, te- levisión, terraza, wifi... 5. Otros: engloba algunos extras que no pertenece a ninguna de las an- teriores categorías. Ejemplos: entrada pagando, no fumadores, no volu- men alto... Esta categorización nos va a permitir aumentar o disminuir el peso de los descriptores según el tipo de ítem. Por ejemplo, en el caso de las etiquetas 11
  • 12. pertenecientes a Estilo, tendrán un mayor peso en restaurantes, y en las de Música, en pubs, salas o discotecas. Se han definido por defecto unos pesos, pero que pueden ser ajustados por los usuarios siempre que lo deseen. Usuario Tipo Jerarquía Peso Estilo 0.5 Música 0.125 Restaurante Instalaciones 0.25 Otros 0.125 Manuel Estilo 0.3 Música 0.4 Pub Instalaciones 0.2 Otros 0.1 Cuadro 1: Ejemplo de matriz de pesos para el usuario Manuel 3.3. Red Bayesiana Usando redes bayesianas vamos a poder ver las relaciones entre los distintos elementos del sistema de recomendación y apreciar visualmente la propaga- ción de probabilidades. En la Figura 2 se muestra una primera aproximación de lo que sería la red bayesiana que podemos utilizar para predecir la puntuación de un sitio en base a aquellos sitios que el usuario ha valorado. El principal inconveniente que presenta es que trata a todas las etiquetas por igual y además hay que instanciar todos los ítems que el usuario ha votado junto con sus etiquetas. Por ejemplo, digamos que el usuario ha votado 50 sitios, de los cuales 30 son pubs y 20 son restaurantes. Si el usuario sólo quiere saber la predicción para un determinado restaurante que no conoce, esta primera aproximación lo que hará es instanciar los 50 sitios votados junto con sus etiquetas. Si cada sitio tuviese 3 etiquetas, habría que instanciar 150 etiquetas en total. Es muy posible que muchas de ellas no aporten utilidad para el sitio que estamos prediciendo, ya que como la mayoría de los sitios votados son pubs, estas etiquetas pueden estar relacionadas con el tipo de música de estos sitios, mientras que en un restaurante posiblemente la música no tenga nada de relevancia, al contrario que el estilo de comidas que se sirvan. 12
  • 13. Figura 2: Primera aproximación Hemos tratado de resolver los problemas planteados anteriormente siguiendo el esquema de la Figura 3. Sólo se instancian aquellos sitios que son del mismo tipo que el que va a ser predicho. Además, introducimos una nueva capa para categorizar las etiquetas. Con esta nueva estructura el objetivo que conseguimos es doble: mejorar la calidad de la predicción y hacerlo más eficientemente. Si aplicamos a este caso el ejemplo comentado anteriormente, de los 50 sitios votados por el usuario, sólo instanciamos los 20 que son restaurantes, que serían unas 60 etiquetas, con lo cual nos estamos ahorrando más de la mitad. Ahora, al introducir la nueva capa de jerarquías, se le va a dar un mayor peso a las etiquetas que describen el estilo del restaurante que al resto a la hora de hacer la predicción. Esto sería el comportamiento predeterminado, pero será finalmente el usuario será el que decida qué importancia quiere darle a cada jerarquía para cada tipo de sitio. Se puede ver un ejemplo más detallado en la sección 3.5. 13
  • 14. Figura 3: Solución adoptada 3.4. Estimación de probabilidades Comenzando por los nodos descriptores (F ), no tienen padres y sólo es necesario calcular la distribución de probabilidad a priori de su relevancia. En el proyecto hemos supuesto que todas las etiquetas son equiprobables: P r(fk,1 ) = 1/l Siendo l el tamaño del conjunto F . Los nodos jerarquías (C) se encargan de dar un peso determinado al valor de la probabilidad de los descriptores, tal como se ha comentado en la sección “Esquema de pesos”. Se tiene que cumplir que la suma de los pesos de las jerarquías para un ítem sea 1. w(ij,1 , cu ) = 1 cu ∈C Con respecto a los nodos ítems (I), los únicos pesos necesarios para calcular la probabilidad P r(ij,1 |pa(Ij )) son: 14
  • 15. log((m/nk )+1) w(fk,1 , ij,1 ) = P log((m/nk )+1) Siendo nk el número de veces que la etiqueta Fk∈P a(I ) j Fk se usa para describir un ítem y m el número de ítems. w(fk,0 , ij,1 ) = 0 Para los nodos basados en contenido (ACB ), hay que considerar la in- fluencia de un ítem en el rango de valoraciones del usuario activo. Cuando el usuario A vota un elemento Ik con el valor s, la probabilidad de este ítem irá al voto s. Los pesos necesarios son: w(ik,1 , acb,s ) = 1/I(A) Siendo I(A) el número de ítems votados por el usuario A w(ik,1 , acb,t ) = 0 para t = s, 0 ≤ t ≤ #r w(ik,0 , acb,0 ) = 1/I(A) w(ik,0 , acb,t ) = 0 para 1 ≤ t ≤ #r 3.5. Mecanismo de inferencia El objetivo del proceso de inferencia es estimar el voto para el usuario ac- tivo A dado un sitio (evidence), es decir, P r(A = s|ev). Para calcular esta probabilidad, debemos instanciar el sitio y propagar a través de los distintos nodos. Esta propagación implica un proceso de marginalización que requie- re un tiempo exponencial. Sin embargo, teniendo en cuenta que en una red bayesiana un nodo es independendiente de sus antecesores dado que estos valores se toman de sus padres, y usando las ventajas que ofrece el modelo canónico usado para expresar las distribuciones de probabilidad condicinoal, la distribución de probabilidad a posteriori se puede calcular eficientemente como un mecanismo de inferencia de arriba a abajo (top-down). El siguiente teorema explica cómo calcular exactamente esta probabilidad: Teorema 1 : sea Xa un nodo en una red bayesiana, mXa el número de padres de Xa , Yj un nodo en P a(Xa ) y lYj el número de estados que puede tomar Yj . Se puede calcular la probabilidad a posteriori usando la siguiente fórmula: mXa lYj P r(xa,s |ev) = w(yj,k , xa,s ) · P r(yj,k |ev) j=1 k=1 Por medio de este teorema se expresa que el nodo Xa recoge la probabilidad de sus predecesores y no necesita distribuirla de nuevo. Esto es importante porque implica que se puede realizar la propagación en tiempo lineal respecto al número de padres [14]. 15
  • 16. Centrándonos en la componente basada en contenido, el sitio a predecir está compuesto de un conjunto de descriptores y por el ítem en sí mismo. En el primer caso la propagación se realiza como se explica en el teorema anterior. Mientras que en el segundo caso, la probabilidad P r(Fk |ij,1 ) se calcula para cada nodo Fk conectado al ítem Ij . Estas probabilidades se pueden calcular por medio del siguiente teorema. Teorema 2 : sea Fk un nodo descriptor de la jerarquía Cu perteneciente al ítem Ij en una red bayesiana. La probabilidad a posteriori de su relevancia se puede calcular como: w(ij,1 , cu ) · P r(fk,1 ) si Fk ∈ P a(Ij ) / P r(fk,1 |ij,1 ) = w(fk,1 ,ij,1 )·P r(fk,1 )·(1−P r(fk,1 )) w(ij,1 , cu ) · P r(fk,1 ) + P r(ij,1 ) si Fk ∈ P a(Ij ) siendo P r(ij,1 ) = w(fk,1 , ij,1 ) · P r(fk,1 ) Fk ∈P a(Ij ) Predicción del voto Una vez que se han calculado las probabilidades a posteriori, hay que elegir el voto que se va a dar como predicción. Antes de obtener la predicción hay que normalizar las probabilidades al dominio de R, para ello hacemos: P r(A=s|ev) P r(A = s|ev) = 1−P r(A=0|ev) ∀s ∈ R Existen tres alternativas de elección: El voto promedio: predicci´n = o s · P r(A = s|evidence) ∀s∈R El voto mediano: predicci´n = {s|P r(A < s|evidence) ≤ 0,5, P r(A > o s|evidence) ≥ 0,5} El voto máximo: predicci´n = {s|P r(A = s|evidence) > P r(A = o s|evidence)} Para una mejor comprensión se puede ilustrar con este ejemplo que muestra los valores de la variable ACB : Valoración 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 Probabilidad 0 0 0 0 0.2 0.15 0.15 0 0 0.5 Voto mediano = 3.5 Voto promedio = 3.975 Voto máximo = 5.0 16
  • 17. Algoritmo 1. Se instancia el ítem a predecir P r(ij,1 ) = 1 y calculan las probabilida- des de sus descriptores. A continuación se propagan las probabilidades usando el teorema 2 explicado en esta sección. 2. Se instancian sólo aquellos sitios del mismo tipo que el evidence y se propagan las probabilidades usando el teorema 1 que hemos visto an- teriormente. 3. Se selecciona un voto usando uno de los esquemas de predicción nom- brados anteriormente. En este proyecto se ha escogido el voto promedio porque es el que mejores resultados ha dado (ver sección de Evaluación). Ejemplo teórico de predicción Figura 4: Ejemplo ilustrativo 17
  • 18. En el ejemplo de la Figura 4 se puede ver resaltado en amarillo las etiquetas del sitio que va a ser predicho. Vamos a ir por capas obteniendo la probabi- lidad para cada nodo. Instanciamos el ítem a predecir. P r( Kirin1 ) = 1 Calculamos las probabilidades de los descriptores del ítem instanciado. P r( Japon´s1 | Kirin1 ) = w( Restaurante , Estilo )· e w( Japon´s1 , Kirin1 ) · P r( Japon´s1 ) · (1 − P r( Japon´s1 )) e e e P r( Japon´s1 ) + e = P r( Kirin1 ) 0,5 · (0,5 + 0,386 · 0,5 · 0,5) = 0,298 P r( Servicio a domicilio1 | Kirin1 ) = w( Restaurante , Otros )· ! w( Servicio a domicilio1 , Kirin1 ) · P r( Servicio a domicilio1 ) · (1 − P r( Servicio a domicilio1 )) P r( Servicio a domicilio1 ) + = P r( Kirin1 ) 0,125 · (0,5 + 0,614 · 0,5 · 0,5) = 0,327 Instanciamos los descriptores de los ítems relevantes. P r(fk,1 , Y amato1 ) = 1 Calculamos la probabilidad de los ítems relevantes para el ítem a predecir. P r( Y amato1 | Kirin1 ) = w( Japon´s1 , Y amato1 ) · P r( Japon´s1 | Kirin1 )+ e e w( Japon´s0 , Y amato1 ) · P r( Japon´s0 | Kirin1 )+ e e w( Servicio a domicilio1 , Y amato1 ) · P r( Servicio a domicilio1 | Kirin1 )+ w( Servicio a domicilio0 , Y amato1 ) · P r( Servicio a domicilio0 | Kirin1 ) = 0,386 · 0,298 + 0, 614 · 0,327 = 0,316 18
  • 19. P r( W ok buf f et libre1 | Kirin1 ) = w( Japon´s1 , W ok buf f et libre1 ) · P r( Japon´s1 | Kirin1 )+ e e w( Japon´s0 , W ok buf f et libre1 ) · P r( Japon´s0 | Kirin1 ) = e e 0,386 · 0,298 = 0,115 P r( P erf il usuario1 | Kirin1 ) = w( Japon´s1 , P erf il usuario1 ) · P r( Japon´s1 | Kirin1 )+ e e w( Japon´s0 , P erf il usuario1 ) · P r( Japon´s0 | Kirin1 ) = e e 0,177 · 0,298 = 0,053 Obtenemos la probablidad para cada uno de los votos. P r(A = 5| Kirin ) = P r( P erf il usuario1 | Kirin1 )+P r( Y amato1 | Kirin1 ) = 0,053 + 0,316 = 0,369 P r(A = 4| Kirin ) = P r( W ok buf f et libre1 | Kirin1 ) = 0,115 P r(A = 0| Kirin ) = 1 − P r(A = s| Kirin ) = 0,516 ∀s∈R Ahora normalizamos aquellas posiciones que son relativas a una valoración (es decir, las distintas a 0). [15] P r(A=4| Kirin ) P r(A = 4| Kirin ) = 1−P r(A=0| Kirin ) = 0,2376 P r(A=5| Kirin ) P r(A = 5| Kirin ) = 1−P r(A=0| Kirin ) = 0,7624 Finalmente obtenemos como predicción el voto promedio. predicci´n = o s · P r(A = s| Kirin ) = 4,76 ∀s∈R La fiabilidad de esta predicción la podemos calcular como: f iabilidad = (1 − P r(A = 0| Kirin )) · 100 = 48, 4 % 19
  • 20. 3.6. Predicción vs Recomendación No es lo mismo recomendar que predecir [18]. Predecir es simplemente esti- mar el valor del voto que un usuario daría a un determinado ítem según el conocimiento que el sistema tenga formado sobre el usuario gracias a votacio- nes previas que haya realizado. Por otra parte, recomendar involucra calcular predicciones para un conjunto de ítems y mostrar aquellos resultados más afi- nes para el usuario. El usuario no quiere que le recomendemos sitios que no le gusten (predicción baja), sino aquellos que puede que le vayan a gustar (predicción media-alta). 3.7. Problema del cold-starting Para que el sistema de recomendación funcione correctamente es necesario que el usuario haya votado varios sitios, así como haber ajustado su perfil de gustos. El problema del cold-starting [18, 12](o inicio frío) viene a plantear que esta situación ideal no siempre se da, ya que habrá usuarios nuevos que quieran recomendaciones sin haber valorado suficientes ítems. Se pueden abordar diferentes medios de actuación ante esta situación: Pasar de él: le decimos que no hay resultados y que es necesario votar más sitios para obtener recomendaciones. Tratarlo como el usuario medio: se trazaría un usuario medio conforme al resto de usuarios y se le recomendarían ítems. El problema es que el usuario medio no existe. Popularidad: mostrar aquellos ítems más populares en la categoría que se esté indicando. Es la solución que hemos adoptado. 3.8. Un poco más rápido Para mejorar la velocidad del sistema es posible cachear algunos resultados que son menos proclives a cambiar como pueden ser: Etiquetas de un sitio: los descriptores con los que se incorpora un nuevo sitio suelen variar poco o nada. Probabilidad de un sitio para un usuario: esta probabilidad sólo cam- biará si el usuario vota nuevos sitios con el mismo tipo. 20
  • 21. Probabilidad de un sitio para el evidence: esta probabilidad sólo variará si se cambian las etiquetas de alguno de los dos sitios. Por ejemplo, una consulta sobre recomendación de restaurantes en Granada pasa de tardar 4.51 segundos a 2.89 segundos tras habilitar el sistema de caché. 3.9. Limitaciones En el sistema de recomendación basado en contenido se usa información estructurada, en nuestro caso los tipos y etiquetas. Sin embargo, no se tienen en cuenta las valoraciones de otros usuarios a la hora de recomendar sitios, por lo que se podría dar la situación de que estemos recomendando un sitio que, si bien está acorde con el perfil del usuario, está muy mal valorado por otros usuarios. Se aconseja pues, usar un método híbrido que tenga en cuenta tanto aspectos cuantitativos como cualitativos [23]. Una preocupación de los usuarios ha sido que el sistema les ha recomendado sitios de estilo gay cuando ellos no han votado ninguno de ese estilo, esto puede ocurrir porque estos sitios tengan otras etiquetas en común, como pueden ser la música o las instalaciones. Para tratar esta etiqueta en especial, lo que haremos será evitar estos resultados si el usuario no ha seleccionado entre sus gustos este determinado estilo. 4. Sistema de filtrado colaborativo Los sistemas de fitrado colaborativo intentan identificar grupos de personas que tienen gustos similares, de manera que un usuario pertenecerá un cierto grupo dependiendo de los sitios que haya votado. Así pues, se puede definir el concepto de vecinos como aquellos usuarios que más gustos en común tienen con el usuario activo. Los ítems a recomendar serán aquellos mejor valorados por este conjunto de vecinos, o bien aquellos que más se asemejen al conjunto de etiquetas que definan a este grupo de usuarios. 4.1. Elementos del sistema de recomendación En el caso del filtrado colaborativo se necesitan los siguientes elementos: 21
  • 22. Ui representa a un usuario. Ij representa a un ítem. Diremos que el usuario Ui habrá votado el sitio Ij cuando le haya asignado una valoración del conjunto R={0.5, 1, 1.5, 2, 2.5, 3, 3.5 4, 4.5, 5}. 4.2. Medidas de similaridad Para calcular la similaridad entre usuarios se pueden usar distintas métricas [12], entre las cuales hemos escogido las tres siguientes para una posterior evaluación: Coseno: P m rux ,ih ·ruy ,ih h=1 sim(ux , uy ) = s s P 2 m P 2 m rux ,i ruy ,i h=1 h h=1 h donde ru,i es la valoración del ítem i por el usuario u y n es el número de ítems en común entre ambos usuarios. Correlación de Pearson: P m (rux ,ih −¯ux )·(ruy ,ih −¯uy ) r r h=1 sim(ux , uy ) = s s P m P m (rux ,ih −¯ux )2 r (ruy ,ih −¯uy )2 r h=1 h=1 donde ru,i es la valoración del ítem i por el usuario u, ru es la media ¯ de valoraciones del usuario u para todos sus votos en común y n es el número de ítems en común entre ambos usuarios. Correlación de Pearson limitada (Constrained Pearson’s Correla- tion): P m (rux ,ih −rmed )·(ruy ,ih −rmed ) h=1 sim(ux , uy ) = s s P m P m (rux ,ih −rmed )2 (ruy ,ih −rmed )2 h=1 h=1 donde ru,i es la valoración del ítem i por el usuario u, rmed es el valor medio en la escala de valoraciones R (en nuestro caso 2.5) y n es el número de ítems en común entre ambos usuarios. 4.3. Predicción del voto Una vez escogida una medida de similaridad y teniendo los vecinos del usuario activo, pasamos a predecir el voto sobre un determinado ítem [12, 15]: 22
  • 23. P m sim(ua ,uh )·(ruh ,ia −¯uh ) r h=1 predicci´n = rua + o ¯ P m |sim(ua ,uh )| h=1 donde m es el número de usuarios que han votado el ítem ia , ua es el usuario activo, uh un usuario que ha votado el ítem y r es la media de los votos en ¯ común para un determinado usuario. 4.4. Problema del cold-starting Este tipo de sistema también presenta el problema del cold-starting comen- tado anteriormente. ¿Qué conjunto de vecinos tendrá un usuario nuevo? No lo sabremos hasta que empiece a valorar sitios y defina su perfil de usuario. Además presenta un nuevo agravante con ítems nuevos. Si nadie lo ha vota- do, ¿cómo darlo a conocer? En el caso del sistema basado en contenido no habría problema, ya que lo que prima son los descriptores del ítem. Si éstos son relevantes para el usuario, el sitio le será recomendado. Por lo que sería más adecuado usar un método híbrido para resolver este problema.[11] El mayor inconveniente de los sistemas colaborativos se da cuando se crea una nueva comunidad [18]. El sistema no funcionará bien debido a los pocos votos que hay. La solución más habitual es incentivar a un grupo de usuarios para que voten nuevos sitios antes de lanzarlo al público. Otra solución sería dar inicialmente recomendaciones usando un enfoque basado en contenido, que es lo que se está haciendo actualmente en el proyecto. 5. Evaluación Para intentar evaluar cuantitativamente el sistema de recomendación se han realizado una serie de mediciones. 5.1. Colección de datos Si bien el escenario de las pruebas no es el más favorable, ya que la web está aún comenzando a funcionar, nos podremos hacer una idea de cómo funciona el sistema. Estadísticas Usuarios registrados: 330 23
  • 24. 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 Distribución de votos Se puede observar en la gráfica de la izquieda que la mayoría de los sitios votados son con la puntuación 4 y 5. La razón de que los valores no ente- ros sean los menos usados es porque esta posibilidad se ha introducido con posterioridad. La gráfica de la derecha nos muestra que la mayoría de los usuarios votan cosas que les gustan (entre 4 y 5). Figura 5: Distribución de votos (izq.) y de votos medios (dcha.) 5.2. Métricas Hemos usado diferentes métricas para obtener los resultados: Error medio absoluto (MAE) que nos indica cómo de ajustado están las predicciones del sistema respecto a la valoración real del usuario. P N |pi −ri | M AE = I=1 N siendo N el número de votos del conjunto evaluado, pi el voto predicho para un determinado ítem y ri el voto real. 24
  • 25. Error cuadrático medio (MSE) es similar al MAE, sólo que pena- liza más el error cometido cuanto más alejada esté la predicción de la P N |pi −ri |2 realidad. M SE = I=1 N Porcentaje de predicción: indica el porcentaje de votos del conjunto de prueba que se han podido predecir. Porcentaje de aciertos: indica el porcentaje de predicciones que con- cuerdan con el voto real. Se ha supuesto una tolerancia de 0.5 como el grado de error que admitiría el usuario. 5.3. Metodología En la tabla 2 y 3 se comparan diferentes esquemas de predicción. Consideraciones sobre las medidas de la tabla 2: Para el voto medio sólo se cogen usuarios que hayan votado más de 5 veces. La medida del coseno sólo se realiza con los gustos del perfil de usuario, luego sólo se tienen en cuenta aquellos que hayan rellenado su ficha. Las diferentes medidas para el sistema basado en contenido se refieren a n como el número de votos mínimo necesario para que un usuario sea considerado. Se han realizado mediciones de dos formas distintas. Primeramente, se ha extraído un 20 % del conjunto total de votos como conjunto de prueba y se han realizado 20 ejecuciones por cada método, obteniendo así la media y la desviación estándar. En la tabla 3 se ha usado el método leave one out, es decir, sólo se saca cada vez un elemento del conjunto. En la tabla 4, como se ha comentado en la sección 3.5, se han probado distintas estrategias para obtención de voto en el sistema de recomendación basado en contenido y se ha comprobado su eficacia con diferentes métricas. Las mediciones, en este caso, se han obtenido extrayendo un sólo voto del conjunto total (leave one out), para cada uno de los votos. 25
  • 26. 5.4. Resultados MAE %Predicción Método x ¯ σ x ¯ σ Voto medio 0.8330 0.0704 100 0 Coseno (contenido) 1.4460 0.2114 29.6 5.9 Basado en contenido (n>1) 0.9591 0.1760 27.9 3.8 Basado en contenido (n>5) 1.0296 0.1371 29.9 4.3 Basado en contenido (n>10) 1.0189 0.1896 32.1 6.5 Colaborativo COS 0.9700 0.0960 63.4 4.2 Colaborativo CPC 0.9278 0.0887 51.7 4.0 Colaborativo COR 0.9208 0.0877 29.8 3.0 Cuadro 2: Resultado de los distintos métodos usando un conjunto de entre- namiento (80 %) y otro de test (20 %) MAE = Mean Absolute Error (Error Medio Absoluto) %Predicción = porcentaje de votos del conjunto de prueba que se han podido pre- decir COS = Coseno CPC = Constrained Pearson’s Correlation COR = Pearson’s Correlation Nota: El MAE sólo tiene en cuenta los votos que se han predecido Método MAE MSE %Predicción Voto medio 0.87678 1.4085 92 Coseno (contenido) 1.49458 3.0523 11 Basado en contenido 0.9791 1.8858 27 Colaborativo COS 0.9735 1.7680 63 Colaborativo CPC 0.8938 1.3616 55 Colaborativo COR 0.9917 1.7019 36 Cuadro 3: Resultado de los distintos métodos usando leave one out MAE = Mean Absolute Error (Error Medio Absoluto) MSE = Mean Squared Error (Error Cuadrático Medio) %Predicción = porcentaje de votos que se han podido predecir COS = Coseno CPC = Constrained Pearson’s Correlation COR = Pearson’s Correlation Nota: El MAE sólo tiene en cuenta los votos que se han predecido 26
  • 27. El método del voto medio se incluye meramente como elemento comparativo de predicciones, ya que no es útil para hacer recomendaciones (a todos los sitios le asignaría el mismo voto). La causa de que se comporte mejor que el resto de métodos es porque como hemos visto en la sección 5.1, la distribución de votos medios está muy concentrada entre las puntuaciones 4 y 5, y el error cometido en la predicción será menor. De los modelos implementados el que menor error de predicciones presenta es el colaborativo con la medida de similitud Constrained Pearson’s Correlation. También se puede ver que el sistema basado en contenido obtiene un resultado muy similar al colaborativo con la medida coseno, aunque éste último con un porcentaje de predicción tres veces mayor. Con el error cuadrático medio nos podemos dar cuenta de cómo de grande es el error cometido en la predicción, siendo de nuevo el método colaborativo CPC el que mejor resultados obtiene. Los porcentajes de predicción son significativamente más bajos en el modelo basado en contenido respecto al colaborativo por varios motivos: primero porque es más fácil que haya usuarios que al menos hayan votado un sitio en común a que un usuario haya votado varios sitios del mismo tipo; otra causa es que en la base de datos hay muchos sitios que no están suficientemente bien descritos (tienen pocas etiquetas significativas), por lo que a la hora de comparar sitios por contenido el sistema no puede alcanzar todo su potencial. La causa de que el porcentaje de predicción del voto medio no sea del 100 % es porque hay un 8 % de votos únicos, es decir, el usuario sólo ha votado un sitio, y al sacarlo del conjunto de datos, su voto medio va a ser cero. En el caso de la medida coseno en contenido sólo se ha aplicado a aquellos usuarios que han rellenado su perfil de gustos, y la causa por lo que se obtiene un resultado tan pobre se achaca a que las etiquetas de los sitios que han votado apenas si coincidirán con los gustos elegidos. MAE MSE %aciertos Voto mediano 1.0034 2.0627 42 % Voto promedio 0.9790 1.8854 34 % Voto máximo 1.0238 2.0799 40 % Cuadro 4: Resultados de las distintas estrategias de obtención del voto en el sistema basado en contenido MAE = Mean Absolute Error (Error Medio Absoluto) MSE = Mean Squared Error (Error Cuadrático Medio) Los resultados de la tabla 4 nos han llevado a elegir el voto promedio como método para la obtención del voto en una predicción (en el sistema basado 27
  • 28. en contenido). Si bien el porcentaje de aciertos es menor, el error cometido también lo es, por lo que creemos que conforme se incremente el conjunto de datos del sistema, va a ser el que mejor funcione. 5.5. Conclusiones A lo largo de las secciones anteriores hemos desarrollado la motivación, expli- cación y funcionamiento de los diferentes tipos sistemas de recomendación, centrándonos en las implementaciones realizadas de los métodos basados en contenido y de filtrado colaborativo. Hemos visto también como, para un pro- yecto en particular, adaptar los sistemas para mejorar la calidad y eficiencia de las recomendaciones, añadiendo más contenido semántico y utilizándolo inteligentemente. Este tipo de sistemas no está libre de limitaciones y proble- mas, que exigen un estudio detallado para paliarlas usando diferentes estra- tegias y nuevos métodos, como el de hibridación, que podremos desarrollar en un futuro. 6. Soluciones desarrolladas 1. Se ha realizado un cambio completo de plataforma para pasar a usar el framework django [1], que utiliza el lenguaje python [6], con acceso a base de datos mysql [10] y con jquery [3] como framework en javascript. Se ha elegido django por diversos motivos: Cambiar la estructura completa de la web anterior para adaptar- la a diversas provincias era muy costoso y además sería menos potente. Ayuda a un desarrollo rápido. Bien documentado. Sigue un modelo similar al MVC (Modelo Vista Controlador). Proporciona una API potente para manejar el modelo. Interfaz de administración automática. Diseño canónico de URLs mediante expresiones regulares. Soporte para aplicaciones multi-idioma. 2. Para incentivar a los usuarios a que participen se les dan puntos por cada acción que realicen, de manera que es una forma de fomentar la 28
  • 29. competición y también poder premiar con regalos y descuentos en un futuro. También se proporciona una guía para completar el perfil de usuario y cómo comenzar a integrarse en la web. 3. Se ha implementado un sistema de recomendación basado en contenido. Las recomendaciones que se dan al usuario son en base a los sitios que anteriormente ha votado y a los gustos que ha escogido en su perfil. Por tanto se requiere una colaboración activa del usuario para poder ofrecer recomendaciones fiables. 4. Se han jerarquizado las etiquetas en varias categorías con el fin de facilitar las búsquedas de sitios y sobre todo para poder darle a unas más importancia que a otras a la hora de hacer recomendaciones, según sea el tipo de local. 5. La versión móvil está accesible a través de m.andaluciapeople.com y permite consultar sitios y usuarios, pero en modo sólo lectura. En un futuro se pretenden ampliar funcionalidades. 6. Se ha incluído soporte para añadir varios idiomas de forma sencilla, aunque actualmente sólo está disponible la traducción a inglés. 7. Se ha añadido un blog para informar sobre novedades en la aplicación. 8. Se proporcionan diferentes feeds para suscripción por RSS de los últi- mos sitios, comentarios y fotos en las distintas provincias. 7. Aspectos adicionales del desarrollo 7.1. Entorno de desarrollo La aplicación se ha desarrollado usando un editor de textos en un sistema con python 2.5 y django 1.0. Como servidor web de pruebas he usado el servidor de producción de django, que se reinicia automáticamente cada vez que se edita un fichero y además avisa de posibles errores. 7.2. Entorno de producción El sistema de cara al público está alojado en un alojamiento compartido con- tratado en Webfaction[7] con una instalación de Apache 2 con mod_python, python 2.5 y django 1.0. Para el sistema de caché se usa memcached [8]. 29
  • 30. 7.3. Control de versiones Con objeto de mantener coherencia en los archivos del proyecto, así como servir de backup, se ha hecho uso de un repositorio privado en Github [2]. Se ha escogido git por su potencia y facilidad de uso. 7.4. Sistema de tickets Para tener un mejor control de errores y un listado de nuevas características a implementar, se ha utilizado un sistema de tickets en Lighthouse [4]. 7.5. Licencia El código desarrollado en el proyecto se ha licenciado bajo AGPLv3 [9] que garantiza las principales libertades del software libre. Libertad 0: la libertad de usar el programa, con cualquier propósito. Libertad 1: la libertad de estudiar cómo funciona el programa y modi- ficarlo, adaptándolo a tus necesidades. Libertad 2: la libertad de distribuir copias del programa. Libertad 3: la libertad de mejorar el programa y hacer públicas esas mejoras a los demás, de modo que toda la comunidad se beneficie. Así mismo el proyecto está adherido a la lista de proyectos libres apoyados por la Oficina de Software Libre de la Universidad de Granada. La última versión liberada se puede encontrar en http://andaluciapeople.com/media/releases/ 8. Manual de usuario Lo primero que tiene que hacer una persona para recibir recomendaciones en la web es registrarse, ya que si no, no se podrá formar un perfil de usuario y por tanto tampoco se tendrían recomendaciones personalizadas. Un visitante normal sólo podrá consultar los sitios, conocer otros nuevos por similaridad e incluso ver los mejores valorados por el resto de usuarios. Para crear una cuenta basta con entrar en http://andaluciapeople.com y hacer click sobre el enlace “Regístrate”. 30
  • 31. Figura 6: Detalle de la página principal En la siguiente página rellenamos el formulario de registro con los datos que se solicitan y pulsamos el botón “Registrar”. Figura 7: Detalle de la página de registro Si el registro se ha completado con éxito, nos avisará con un mensaje de que ya podemos entrar usando el usuario y contraseña que usamos para crear la cuenta. Igualmente, se enviará un correo electrónico a la dirección indicada con los datos de acceso a la web. Rellenamos el formulario de entrada y pulsamos el botón “Login”. 31
  • 32. Figura 8: Detalle de la página de entrada Una vez identificado, nos encontramos en la ficha de usuario, con un resumen de la cuenta personal, y entre otras cosas podemos distinguir un menú de navegación en la parte superior y una serie de indicaciones a la izquierda sobre cómo rellenar el perfil de usuario. Figura 9: Menú de navegación de usuario Figura 10: Detalle de las indicaciones para completar el perfil 32
  • 33. Lo primero que haremos será cambiar la foto de usuario y rellenar los gustos, ya que ambos se encuentran en el mismo formulario de datos personales en la sección de “Ajustes”. Para ello podemos hacer click en “Ajustar preferencias” o bien en cualquiera de los dos primeros enlaces de la lista. Figura 11: Formulario de datos personales Una vez completado el formulario pulsamos el botón “Guardar” para salvar los cambios. Justo debajo de este formulario se encuentra otro que sirve para definir la importancia de las etiquetas para los diferentes tipos de sitios. Podemos aprovechar para modificar los pesos que consideremos oportunos y 33
  • 34. cuando terminemos pulsamos el botón “Guardar”. Figura 12: Detalle del formulario de importancia de las etiquetas Ahora ya podemos proceder al siguiente paso, que es buscar sitios que conoz- camos y puntuarlos. Para ellos seleccionamos primero la provincia en la parte superior y a continuación usamos el formulario de búsqueda para encontrar sitios. También podemos acceder a la sección de “Sitios” y navegar por la clasificación de tipos. Figura 13: Menú principal de la web Si por ejemplo, buscamos “wok” en Granada, obtenemos tres resultados. 34
  • 35. Figura 14: Resultados a la búsqueda “wok” en Granada Si consultamos por ejemplo al primero de ellos, entraremos a su ficha y po- demos ver en este caso que la predicción que nos hace para este sitio es “Perfecto” debido a los gustos que escogimos en nuestro perfil. Para votarlo nos situamos sobre las estrellas que pasarán a tener un color rojizo y haremos click en la puntuación que queramos asignarle. En este caso hemos decidido decidido otorgarle 4 estrellas (“Muy Bueno”). Figura 15: Detalle de la ficha del sitio antes y después de haberlo votado Repetimos la operación con los sitios que conozcamos. Si por ejemplo nuestra intención es hacer un viaje a Málaga y comer en un restaurante, le pedire- mos al sistema que nos recomiende cuáles nos podrían gustar. Para ello nos dirigimos a la sección “Recomendaciones” en el menú de navegación de “Tu cuenta”. Una vez seleccionado que queremos que nos muestre restaurantes de Málaga capital, pulsamos el botón “Buscar” y nos aparecerán los resultados más acordes con nuestros gustos. 35
  • 36. Figura 16: Resultado de la recomendación 9. Conclusión Con todas las mejoras realizadas tanto de diseño como de nuevas funcionali- dades, hacen de AndalucíaPeople una web mucho más atractiva y útil como así han demostrado las buenas críticas recibidas por parte de los usuarios y visitantes. De cara al público el sistema de recomendación funciona aceptablemente bien, o esa es la sensación que han transmitido las diversas personas que han estado realizando pruebas. Si bien, tras la evaluación cuantitativa realizada se puede esperar que el sistema sea mejorable utilizando un enfoque híbrido. Cabe esperar también que mejore conforme aumente el número de sitios y de usuarios que añadan más información al conjunto. Creemos que los sistemas de recomendación van a seguir creciendo ya que cada vez se posee más información de los usuarios y se les va a poder ofrecer resultados de mejor calidad. Igualmente está ocurriendo que en el mercado publicitario las ofertas publicitarias se están hipersegmentando, de manera que lleguen a nichos de personas más específicos y llegará un momento que sean totalmente personalizadas gracias a este tipo de sistemas. 36
  • 37. Referencias [1] http://djangoproject.com/. [2] http://github.com/. [3] http://jquery.com/. [4] http://lighthouseapp.com/. [5] http://microformats.org/. [6] http://python.org/. [7] http://webfaction.com/. [8] http://www.danga.com/memcached/. [9] http://www.fsf.org/licensing/licenses/agpl-3.0.html. [10] http://www.mysql.com/. [11] Gediminas Adomavicius and Alexander Tuzhilin. Toward the next ge- neration of recommender systems - a survey of the state-of-the-art and possible extensions. 2005. [12] Hyung Jun Ahn. A new similarity measure for collaborative filtering to alleviate the new user cold-starting problem. 2007. [13] Robin Burke. Hybrid recommender systems: Survey and experiments. 2002. [14] Luis M. de Campos, Juan M. Fernández-Luna, and Juan F. Huete. A collaborative recommender system based on probabilistic inference from fuzzy observations. 2008. [15] Luis M. de Campos, Juan M. Fernández-Luna, Juan F. Huete, and Mi- guel A. Rueda-Morales. Combining content-based and collaborative re- commendations: a hybrid approach based on bayesian networks. 2008. [16] Olga Fdez. Deleito. Diseñar sistemas de recomendación: Percepción de los usuarios y tipos resultantes. [17] A. Holovaty and J. Kaplan-Moss. The Django Book. http://www.djangobook.com/, 2009. 37
  • 38. [18] Jon Herlocker J. Ben Schafer, Dan Frankowski and Shilad Sen. Colla- borative filtering recommender systems. 2007. [19] C. Kadie J. S. Breese, D. Heckerman. Empirical analysis of predictive algorithms for collaborative filtering. 1998. [20] Loren G. Terveen Jonathan L. Herlocker, Joseph A. Konstan and John T. Riedl. Evaluating collaborative filtering recommender systems. [21] Benjamin Marlin. Collaborative filtering: A machine learning perspec- tive. 2004. [22] Sergio Manuel Galán Nieto. Filtrado colaborativo y sistemas de reco- mendación. 2007. [23] Michael J. Pazzani and Daniel Billsus. Content-based recommendation systems. 2007. [24] Janusz Sobecki. Implementations of web-based recommender systems using hybrid methods. 2006. 38