El Recomendador de películas es un sitio web donde los usuarios pueden introducir el título de una película que les ha gustado y recibir cinco recomendaciones de películas similares.
Resumen del proyecto
Resumen del proyecto
¿Puedes contarnos brevemente en qué consiste el proyecto que has estado desarrollando?
Este es el proyecto final de la asignatura Programación II, del segundo semestre del Grado en Matemáticas Aplicadas. Los detalles específicos del proyecto están explicados más adelante.
Objetivo del proyecto
Objetivo del proyecto
¿Qué os inspiró o motivó a elegir este proyecto en particular?
Muchas veces, después de comer algo que nos gusta, escuchar una canción que nos emociona o ver una película que nos encanta, nos gustaría encontrar otra propuesta similar que nos hiciera sentir lo mismo. Las plataformas como Netflix basan sus recomendaciones en las películas o series que has visto antes, incluso las que no te han gustado. Intentamos usar Google o Chat-GPT pero sus recomendaciones no acaban de acertar. Pero nuestro Recomendador de películas es la solución. Solo hay que darle una película que te gusta para recibir recomendaciones de cinco títulos parecidos.
Detalles técnicos
Detalles técnicos
¿Puedes explicar los aspectos técnicos del proyecto? ¿Qué software o qué herramientas utilizas?
Usamos una clave de la API de TMDb para obtener todos los títulos de películas, carteles, descripciones, etc. Usamos VS-Code y su terminal para la programación, y GitHub para la colaboración y la organización.
El diseño de nuestro sistema se basa en cinco componentes principales. Primero, el usuario introduce el título de una película. Su solicitud se procesa en nuestro servidor Flask, que se comunica con la API de TMDb para obtener información de la película. Después, nuestro sistema de recomendaciones aplica métricas de similitud del coseno para encontrar películas similares y mostrarlas a los usuarios.
En cuanto a los aspectos técnicos del sistema de recomendaciones, son los siguientes:
Nuestro sistema de recomendaciones utiliza técnicas de TF-IDF (frecuencia de término-frecuencia inversa de documento) y similitud de coseno.
Utilizamos técnicas de TF-IDF para convertir las descripciones de películas en vectores donde el significado de cada palabra estaba representado por un número.
Después aplicamos la similitud del coseno para medir la similitud entre películas comparando el ángulo entre el vector de la película introducida con los vectores de las demás películas. La semejanza entre las películas está determinada por el ángulo entre el vector introducido y las otras películas. Cuanto más reducido, mayor es la semejanza.
Además, para afinar aún más la precisión de las recomendaciones obtenidas mediante la similitud del coseno, utilizamos una fórmula personalizada que incorporaba información sobre géneros coincidentes y películas con valoraciones altas. Este método de puntuación híbrido sirve para mejorar la relevancia de las recomendaciones, ya que no solo tiene en cuenta la semejanza del argumento.
A partir de todos estos cálculos, nuestro sistema ofrece recomendaciones de las películas más similares.
Desafíos y soluciones
Desafíos y soluciones
¿Te enfrentaste a algún desafío importante durante el proyecto? ¿Cómo lo superaste? ¿Hay algún momento que destaques especialmente en cuanto a resolución de problemas?
Nunca habíamos usado Flask, así que no sabíamos cómo funcionaban sus rutas ni cómo configurar el servidor.
Así es como lo solucionamos:
Texto de la imagen:
Inicializamos la aplicación Flask:
Configuramos la ruta de inicio:
Para la ruta de recomendación, utilizamos la función de importación.
Otro de los retos era utilizar la clave de la API y gestionar las solicitudes a la API. Así es como lo solucionamos:
Texto de la imagen:
Utilizamos un archivo .env para subir la información a la clave de la API de forma segura:
Para resolver los problemas del límite de solicitudes de la API, incorporamos un tiempo de espera:
Obtuvimos 100 páginas de películas populares (con unas 2000 películas) y las guardamos en un archivo llamado movies.csv.
Otro de los retos era implementar la similitud del coseno para las recomendaciones. Así es como lo solucionamos:
Texto de la imagen:
Descripciones de películas vectorizadas usando TF-IDF:
Cálculo de la similitud de coseno entre todas las películas:
Texto de la imagen:
Diseño de una función de recomendación personalizada:
1. Encuentra la película introducida por el usuario.
2. Calcula puntuaciones de semejanza con el resto de las películas.
3. Mejora la precisión de las puntuaciones en función del género y las valoraciones de los usuarios.
Nos costó crear un sistema robusto, que no se bloqueara cuando los usuarios introducían información no válida.
En esta imagen puede verse una parte de lo que implementamos para gestionar los casos extremos:
Texto de la imagen:
Creamos un mensaje predeterminado para reemplazar los argumentos que faltaban.
En el caso de las entradas no válidas, se muestra un mensaje de error.
Creamos un mensaje predeterminado para reemplazar los argumentos que faltaban y, en el caso de las entradas no válidas, mostramos un claro mensaje de error. También estandarizamos todos los títulos para que los usuarios pudieran usar minúsculas. Estas mejoras sirvieron para crear un sistema más robusto y fácil de usar.
Colaboración y trabajo en equipo
Colaboración y trabajo en equipo
¿Has colaborado con otros estudiantes o compañeros de equipo en este proyecto? ¿Cómo ha influido la colaboración en el avance del proyecto?
Recibimos ayuda de nuestro profesor, Raúl Pérez. Con su ayuda, aprendimos a manejar GitHub y a usarlo para mejorar la colaboración del grupo.
Aprendizaje y conclusiones
Aprendizaje y conclusiones
¿Qué lecciones o habilidades clave habéis obtenido al trabajar en este proyecto?
Nos hemos dado cuenta de lo importante que es GitHub para trabajar en proyectos grandes, especialmente si se colabora con otras personas en un único proyecto. También hemos aprendido lo importante que es la estructura del proyecto: sin ella, este proyecto podría haber sido muy caótico.
Desarrollo futuro
Desarrollo futuro
¿Tienes planes para seguir desarrollando o mejorando este proyecto en el futuro?
Una posible mejora sería añadir una función que permitiera a los usuarios marcar las películas que ya han visto para que no vuelva a recomendárselas. Para implementar esta función, sería necesario crear una página de inicio de sesión. Además, antes de dar a conocer el sitio web, querríamos que fuera más rápido y pudiera obtener información de más películas.
Adjuntar imágenes
Adjuntar imágenes
Referencias
Referencias
Enlace al repositorio de GitHub.