JART (Just Another Recommendation Tool)
1. Introducción.
¿Por qué JART (Just Another Recommendation
Tool)? El mundo de los motores de recomendación está en continuo
desarrollo, y con la explosión del Big Data, las posibilidades han crecido
exponencialmente.
Según Wikipedia,
los sistemas de recomendación forman
parte de un tipo específico de técnica de filtro de información, los cuales
presentan distintos tipos de temas o ítems de información (películas, música, libros, noticias, imágenes, páginas web,
etc.) que son del interés de un usuario en particular. Generalmente, un sistema
recomendador compara el perfil del usuario con algunas características de
referencia de los temas, y busca predecir el "ránking" o ponderación
que el usuario le daría a un ítem que aún el sistema no ha considerado.
El presente proyecto no pretende
aumentar el ratio de acierto en los productos recomendados, tan sólo demostrar
como la aplicación de diferentes técnicas estadísticas, de Machine Learning y tecnológicas pueden ofrecer una variedad de
posibilidades que hacen que la explotación de este tipo de sistemas y por
tanto, de conocimiento profundo del usuario/cliente sean el presente, y dejen
de ser propias de películas y/o documentales.
Pero si para nuestro proyecto lo
importante no es aumentar el ratio de acierto, sí que pondremos el énfasis en dos problemas: La
experiencia del usuario, y “el arranque en frío”.Uno de los problemas importantes
en los sistemas de recomendación es la nueva experiencia del usuario. Si el
sistema no puede proporcionar una buena experiencia de usuario, entonces los
nuevos usuarios son propensos a salir y no volver. Incluso si el sistema puede
hacer recomendaciones precisas, no es suficiente para que el usuario esté
satisfecho.
-
Si el sistema sólo recomienda artículos que el
usuario ha visto, entonces el usuario no puede ver ningún valor en el sistema y
salir.
-
Alternativamente, si el sistema sólo recomienda
artículos desconocidos, el usuario no tendrá ninguna manera de saber si las
recomendaciones son acertadas o no.
Este
problema se hace más complejo si además poseemos poca información acerca de los
usuarios. Trabajos anteriores en la nueva experiencia de usuario en los
sistemas de recomendación han tendido a centrarse en el "problema de
arranque en frío '. El arranque en frío se refiere al problema de que ningún
algoritmo puede hacer recomendaciones personales precisas con cantidades muy
limitadas de información. Desafortunadamente esto significa que,
independientemente del algoritmo a usar, un sistema de recomendación no puede
hacer recomendaciones de alta calidad para los usuarios que están todavía en el
proceso de unirse al sistema.
2. Sistemas de Recomendación
Un sistema de recomendación
personalizado se podría definir como “suministrar el contenido adecuado en el
sitio adecuado y en el momento adecuado”.
Los sistemas de recomendación han
cambiado la forma de encontrar productos, eventos, información, e incluso otras
personas. Estudian los patrones de comportamiento para saber lo que alguien
preferirá, de entre todo un conjunto de cosas que no conoce.
La tecnología detrás de los
sistemas de recomendación ha evolucionado en los últimos 20 años en una amplia
colección de herramientas que permiten al profesional hacer recomendaciones
eficaces. Ésta tecnología contienen algoritmos que pueden incluir el filtrado
basado en contenido o filtrado colaborativo.
-
Filtro colaborativo: Se basan en
recolectar y analizar información sobre gustos y comportamientos de usuarios
para predecir los gustos de un usuario nuevo observando los gustos y
preferencias de usuarios similares.
-
Filtro basado en contenido: Recopilan
información sobre los elementos y recomiendan los elementos similares a los que
prefiere un usuario.
-
Sistemas
híbridos: Combinan ambas técnicas.
3. Front-End.Experiencia
de Usuario.
La obtención de información de
los usuarios se puede realizar de dos formas diferentes:
-
Explícita: El sistema otorga al usuario la
oportunidad de calificar los ítems dentro de un rango predefinido
-
Implícita: El sistema obtiene información
capturando la interacción del usuario con los ítems, sin que el usuario lo note.
Para conseguir toda la
información necesaria y que no resulte un proceso tedioso para el usuario lo
haríamos de la siguiente manera:
1.
Selección del género de manera explícita por
pate del usuario. Hay que tener en cuenta que una sola película puede aglutinar
hasta 9 géneros diferentes de entre 18 géneros posibles.
2.
Presentación de lotes de películas. Con el fin
de agilizar el proceso de recopilación de datos, presentaríamos un lote de 10
películas para poderlas evaluar de una manera colectiva. Las 10 películas presentadas
serían las 10 películas con mayor número de ratings del género seleccionado. El
rango de calificación disponible para el usuario es muy sencillo:
·
Película No
Vista.
·
Peliculón.
Películas que ha gustado mucho al usuario.
·
No
Peliculón. Películas que no ha gustado mucho al usuario.
3.
El usuario calificaría individualmente el grupo
minoritario, y el resto de películas las calificaría con un solo click. Por
ejemplo, si de las 10 películas expuestas, hay 7 Peliculones, 2 No Peliculones y una No Vista, el usuario calificaría individualmente la película No Vista y las 2 No Peliculones, y el resto
las calificaría de una sola vez.
4.
Una vez obtenidas las calificaciones necesarias,
el usuario navegaría de manera muy fluida por las diferentes recomendaciones obtenidas
por el sistema.
5.
El usuario tendría la opción de entre todas las
recomendaciones presentadas, realizar filtros según tags, año de realización de
la película y por más géneros.
4. Back-End.
·
Limpieza, depuración y preparación de los datos.
En esta fase, corregimos los errores en los datos, adaptamos estos datos al
formato necesario para poder calcular las reglas de asociación. Además
definimos a través de condiciones que deben cumplir los datos, qué es un Peliculón.
·
Cálculo de Reglas de Asociación. Partiendo de
los datos filtrados, limpios y en el formato correcto, hayamos las reglas de
asociación calculadas para cada uno de los 18 géneros
·
Adaptación de los resultados a base de datos
orientada a grafos, con los cálculos necesarios implementados en Spark. Con el
fin de conseguir una navegación rápida, un cálculo de nuevas reglas de
asociación para películas y usuarios fríos y el recálculo de nuevas relaciones,
elegimos esta arquitectura para el proyecto.
Para este proyecto, el dataset
seleccionado ha sido el de películas. Los datos utilizados son del proyecto
MovieLens, propiedad de GroupLens. El dataset contiene 21.063.128
calificaciones y 470.509 etiquetas para 27.303 películas, y estos datos fueron
creados por 229.060 usuarios entre 09 de enero 1995 y el 31 de marzo de 2015.
Una vez que los datos están
libres de ruidos, errores, duplicaciones y los campos están en el formato
buscado, filtraremos las películas por géneros, para calcular un conjunto de reglas
de asociación para cada género. Nosotros hemos trabajado con las películas que
entre sus géneros se encuentra el de Ciencia Ficción (SCi Fi): 27.303 películas y 159.440 usuarios que han valorado alguna de ésas películas.
Condiciones aplicadas al proceso:
·
Consideramos Peliculón para un usuario aquella película que califica con 4
estrellas o más.
·
Las películas tienen que tener al menos 100
usuarios que la consideren un Peliculón.
·
Los usuarios tienen que tener al menos 5
películas del género en cuestión puntuadas con 4 estrellas o más.
·
La fecha seleccionada para el conjunto de Entrenamiento alcanza hasta Marzo de
2014, dejando para el conjunto de Prueba
Marzo de 2014 hasta Marzo de 2015.
Después de aplicar estos filtros
los datos se quedan reducidos a 552
películas y 68.031 usuarios.
Reglas de Asociación.
La clasificación es una técnica
de Aprendizaje Automático ampliamente utilizada en la Minería de Datos y
también en múltiples ámbitos del conocimiento, en la cual se busca encontrar
ítems que aparezcan juntos en transacciones de un determinado conjunto de
datos. De esta manera, se establecen reglas que indican dependencias entre los
ítems de dicho conjunto de datos, siendo las Reglas de Asociación la forma más
natural de representar dichas asociaciones.
Las técnicas utilizadas para la
clasificación son consideradas técnicas predictivas, pues tienen como objetivo
predecir el valor de algún atributo, llamado etiqueta, de un determinado
conjunto de datos.
Tras aplicar el algoritmo A
priori para sacar las reglas de asociación, obtenemos un total de 212.128 reglas de asociación.
El funcionamiento del algoritmo A Priori, que es el que
utilizamos nosotros, empieza con la obtención de los llamados “conjuntos de ítems
frecuentes”, los cuales son aquellos conjuntos cuyos ítems superan un umbral
que define un valor mínimo para la medida de soporte.
Computación
matricial paralela.
El
objetivo de esta fase será obtener una matriz
de coocurrencia de películas, o lo que es lo mismo, cuantas reglas de
asociación tienen en común cada par de películas. Para obtener esto, se tratará
cada fila de la matriz de origen como un vector de 0s y 1s, al realizar el
producto escalar entre vectores, obtendremos el valor de coocurrencia existente
entre cada par de películas.
Las reglas
de asociación nos definirán relaciones entre las variables del conjunto de
datos, en nuestro caso, películas con alto rating, con lo que con la matriz de
coocurrencia tendremos el peso o número de veces que aparece cada par de
películas relacionado.
El concepto de peso y relación
será útil a la hora de elección el modelo de datos donde se persistirán los
resultados, resultados que serán los consultados a la hora de realizar una
recomendación.
La computación paralela
es una forma de cómputo en la que muchas instrucciones se ejecutan
simultáneamente, operando sobre el principio de que problemas grandes, a menudo
se pueden dividir en unos más pequeños, que luego son resueltos simultáneamente
(en paralelo). [Fuente Wikipedia]
Hay varias formas de computación
paralela, nosotros haremos uso del paralelismo de datos, es decir, se
distribuyen los datos y se replican las tareas. El paralelismo de datos es un
paradigma suficientemente adecuado para operaciones
sobre vectores y matrices, dado que
muchas de ellas consisten en aplicar la
misma operación sobre cada uno de sus elementos.
La tecnología seleccionada para
aplicar la computación paralela es Spark
(licencia Apache 2.0).
Se trata de un framework open-source
de procesamiento paralelo que permite lanzar trabajos sobre un clúster de
servidores.
El resultado obtenido, la matriz de coocurrencia, nos definirá
las relaciones entre las diferentes películas o items.
Para persistir los datos y sus relaciones,
usaremos una base de datos orientada a grafos. Una base de datos orientada a
grafos (BDOG) representa la información como nodos de un grafo y sus
relaciones con las aristas del mismo, de manera que se pueda usar teoría de grafos para recorrer la base de
datos ya que esta puede describir atributos de los nodos (entidades) y
las aristas (relaciones). [Fuente Wikipedia]
Cada nodo representará una película, y las relaciones entre estas serán
bidireccionales, con un peso en estas. Las relaciones
vienen definidas por el resultado del procesamiento en la plataforma Spark,
como se explicó en anteriormente.
Para los nodos, necesitaremos el fichero de películas, donde aparecen el id,
y sus diferentes propiedades: título, año y géneros (hasta 9), que se usarán
como filtros en las búsquedas del recomendador.
5. Conclusiones
Las limitaciones inherentes a los
métodos utilizados en sistemas de recomendación se traducen en errores
presentados a los usuarios, los cuales se clasifican en dos categorías: los
falsos negativos y los falsos positivos.
Los primeros se refieren a ítems
que no fueron recomendados y que sí podría interesar el usuario activo. Los
segundos se refieren a ítems recomendados de forma equivocada, donde uno o más
ítems recomendados no resultan interesantes al usuario.
Para realizar la comprobación de
cómo es de fiable nuestro sistema, primero hallamos qué reglas cumple cada
usuario con los ratings realizados antes
del 1 de Marzo de 2014 (fase entrenamiento), y después con los ratings que
realiza después del 1 de Marzo de 2014 (fase validación) vemos
cuantos aciertos tenemos y cuantos falsos positivos y negativo.
Recomendaciones Acertadas
|
Falsos Negativos
|
Falsos Positivos
|
Ni chicha ni limoná (valoración 3.5)
|
611
|
1310*
|
432
|
288
|