El objetivo de este taller es crear un sistema de recomendación en base a los ratings de los usuarios, basado en uno de los ejercicios propuestos en el Spark Summit.
Utilizaremos uno de los Datasets de Movielens que ya reside en la plataforma. Lo haremos en cuatro pasos:
- Ingesta y preparación de los datos mediante Pipelines.
- Creación del modelo mediante Notebook.
- Generación de Ontología
- Creación de una visualización sencilla.
Con ayuda de los notebooks de Sofia2 vamos a generar el modelo de recomendación de películas usando los datos que hemos cargado en la plataforma en el anterior post. Proponemos llevarlo a cabo con Spark usando Scala, y más concretamente implementaremos el ALS.
Definición de las rutas de los datos de entrada
El primer paso es leer los datos de películas y ratings, y para eso primero hay que definir la ruta de los datos. Define las variables ratings_path y movies_path con las correspondientes rutas donde hayas hecho la carga a la plataforma. Por ejemplo:
Nota: Si realizamos el taller desde Sofia2.com/console cambiaremos ‘sofia2-analytic:8020’ por ‘localhost:8020’
Estructurar los datos
Lo siguiente es guardar la información de películas y puntuaciones. Vamos a leer dicha información mediante RDDs de Spark.
Hay que definir un formato concreto tanto para las películas: (movieId, movieName) como para los rating: (timestamp % 10, Rating(userId, movieId, rating)).
También aprovechamos a importar las librerías de Mlib que se van a usar en el ejemplo. En concreto se necesitan ALS, Rating y MatrixFactorizationModel.
Comprobaciones de los datos
Ahora, comprueba que efectivamente se han leído los datos. ¿Cuántas puntuaciones has descargado? ¿Cuántas películas hay en el catálogo? ¿Cuántas películas se han puntuado? ¿Y cuántos usuarios lo han hecho?
Dividir el dataset
Antes de construir el modelo hay que dividir el dataset en partes más pequeñas, una para entrenamiento(60%), otra para validación(20%) y otra más para testing(20%).
Función para evaluar el modelo
Una vez divididos los datos, definamos la función que evaluará el rendimiento del modelo. En concreto usaremos Root Mean Squared Error (RMSE) y esta es la versión en Scala:
Elección del modelo
Ahora puedes usar esta función para definir los parámetros para el algoritmo de entrenamiento. El algoritmo ALS requiere 3 parámetros: el rango de la matriz de factores, el número de iteraciones y una lambda. Vamos a definir diferentes valores para estos parámetros y probar diferentes combinaciones de ellos para determinar cuál de ellas es la mejor:
¿Cuál crees que es el mejor modelo?
Ahora vamos a lanzar nuestra función sobre los datos de Test.
Ejecutar las recomendaciones para un usuario
Una vez elegido el mejor modelo ya solo quedan las recomendaciones de películas por usuario. La idea es preguntar por el usuario, que para el Dataset usado es un numérico. Vamos a hacerlo tipo formulario, de tal forma que primero pregunte por el usuario, se inserte en un campo de texto y por último lance la recomendación. Para preguntar por el usuario:
Para este ejemplo, definimos que se muestren las 10 mejores recomendaciones para el usuario insertado en el campo de texto.
Persistir las recomendaciones
Ahora solo nos queda guardar las mejores recomendaciones para cada usuario en ontología. La idea es guardar registros de la forma: UserId, MovieName, MovieGenre.
Creamos la tabla HIVE con los datos almacenados en el DataFrame. Modifica el nombre de la tabla de la imagen “recomendaciones_arturo” por un identificador único, por ejemplo, recomendaciones_tunombre.
Hasta aquí la segunda parte de nuestro taller Analytics, esperamos que os esté resultando interesante. En próximos posts seguiremos con la generación de ontologías y la creación de Gadgets y un Dashboard para la visualización.