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ículasmúsicalibrosnoticiasimágenespá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.

 Hemos querido poner el énfasis en la experiencia de usuario y sobre todo para el arranque en frío, o sea, para los usuarios de los que no tenemos información alguna.Para poder hacer  una recomendación adecuada para el usuario, tenemos que tener un mínimo de información, a partir de la cual seremos capaces de recomendarle ítems en función de las reglas de asociación previamente calculadas en función de los datos conocidos de otros usuarios (filtro colaborativo).

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.

 La tecnología consta de las siguientes fases:
·         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



Leave a Reply