Este documento presenta un sistema de recomendación para sitios de ocio en Andalucía desarrollado como proyecto de fin de carrera. Describe el modelo de datos subyacente que incluye usuarios, sitios, tipos de sitios, etiquetas y jerarquías de etiquetas. Explica los sistemas de recomendación basados en contenido y filtrado colaborativo implementados, y evalúa el sistema mediante métricas y resultados experimentales. Finalmente, resume los aspectos adicionales del desarrollo como el entorno, control
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
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