
API REST que permite acceder a datos de Steam y obtener recomendaciones de juegos personalizadas basadas en un modelo de aprendizaje automático.
Explorar docs »
Reportar Bug
·
Request Feature
Tabla de contenido
Este proyecto es el resultado de un desafío propuesto en la etapa de Labs del bootcamp de data science de SoyHenry, que consistía en crear una API REST utilizando Python y FastAPI. El proyecto abarca todo el ciclo de vida de un proyecto de Machine Learning, desde la recolección y el tratamiento de los datos hasta el entrenamiento y el despliegue en produccción del modelo de ML.
El resultado es un API REST que permite acceder a datos de Steam y obtener recomendaciones de juegos personalizadas basadas en un modelo de aprendizaje automático. Mediante la API, se puede consultar información sobre géneros de juegos, usuarios, desarrolladores y reseñas, así como obtener sugerencias de juegos similares o adecuados para los usuarios.
El proyecto se basa en el uso de MLOps, una metodología que combina las prácticas de DevOps con las de Machine Learning, para facilitar el desarrollo, la implementación y el monitoreo de los modelos de ML en entornos productivos.
El proyecto se dividió en las siguientes etapas:
-
Transformaciones: Se realizó un preprocesamiento de los datos para obtener el formato adecuado para el análisis y el modelado. Se eliminanron las columnas innecesarias que no se necesitaban para las consultas o preparar los modelos de aprendizaje automático, y de esa manera optimizar el rendimiento de la API y el entrenamiento del modelo.
-
Feature Engineering: Se aplicó ingeniería de características para extraer información relevante de los datos y crear nuevas variables que ayudaran a mejorar el rendimiento del modelo de ML. Se creó una nueva columna de análisis de sentimiento con NLP para las reseñas de los usuarios. Se utilizó la técnica de one-hot encoding para codificar las variables categóricas y se aplica una normalización a las variables numéricas.
-
Desarrollo API: Se creo una API REST con el framework FastAPI para disponibilizar los datos de la empresa y permitir realizar consultas sobre los mismos. La API cuenta con varios endpoints que devuelven información sobre los géneros, los desarrolladores, los juegos y las recomendaciones de los usuarios.
-
Modelado: Se utilizó la librería Scikit-learn para entrenar y evaluar los modelos de ML para el sistema de recomendación. Se desarrollaron dos tipos de modelos de recomendacion basados en filtro colaborativo de tipo item-item y user-item empleando la similitud del coseno.
-
Despliegue: Se utilizó el cloud application hosting service de Render para el deploy de la API en un servidor en la nube y hacerla accesible a través de una URL pública.
Para ejecutar este proyecto localmente sigue estos pasos para configurarlo:
- Clona el repositorio:
git clone https://github.com/FreddyPinto/recsys-steam-games.git
- Crea un entorno virtual de Python:
python -m venv venv
- Activa el entorno virtual:
- En Windows:
.\env\Scripts\activate
- Unix o MacOS:
env/bin/activate
- En Windows:
- Instala las dependencias:
pip install -r requirements.txt
- Cambia al directorio :
cd app
- Ejecuta la aplicación:
uvicorn main:app --reload
Para acceder a la documentación de la API, ingresa a la siguiente URL en tu navegador:
http://localhost:8000/docs
Allí podrás ver los diferentes endpoints que ofrece la API, así como los parámetros y los ejemplos de respuesta. También podrás probar la API directamente desde el navegador, haciendo clic en el botón Try it out y luego en el botón Execute.
Los endpoints disponibles son los siguientes:
-
def PlayTimeGenre(
genre
: str ): Retorna elaño
con mas horas jugadas para dicho género. -
def UserForGenre(
genre
: str ): Retorna el usuario que acumula más horas jugadas para el género dado y una lista de la acumulación de horas jugadas por año. -
def UsersRecommend(
year
: int ): Retorna el top 3 de juegos MÁS recomendados por usuarios para el año dado. -
def UsersWorstDeveloper(
year
: int ): Retorna el top 3 de desarrolladoras con juegos MENOS recomendados por usuarios para el año dado. -
def sentiment_analysis(
developer
: str ): Según la empresa desarrolladora, se devuelve un diccionario con el nombre de la desarrolladora como llave y una lista con la cantidad total de registros de reseñas de usuarios que se encuentren categorizados con un análisis de sentimiento como valor.
-
def recomendacion_juego(
item_name
: str ): Ingresando nombre de un juego, retorna una lista con 5 juegos recomendados similares al ingresado. -
def recomendacion_usuario(
user_id
: str ): Ingresando el id de un usuario, retorna una lista con 5 juegos recomendados para dicho usuario.
Este proyecto se realizó como un Producto Mínimo Viable, por lo que se podrían mejorar algunos aspectos en el futuro, con la finalidad de lograr un producto más completo y robusto. Algunas de las posibles mejoras son:
-
Mejorar el análisis de sentimiento de las reseñas, probando con distintos umbrales de clasificación.
-
Usar una base de datos NoSQL como MongoDB para almacenar los datos de los juegos y los usuarios.
-
Mejorar el análisis exploratorio de datos.
-
Dockerizar el proyecto para facilitar el despliegue y la portabilidad de la aplicación.
-
Explorar otras técnicas o librerías para mejorar el análisis de sentimiento y los modelos de recomendación.
-
Considerar el despliegue de la API en servicios gratuitos que no menostengan limitaciones en su capacidad de almacenamiento.
-
Mejorar el mantenimiento del modelo de ML, estableciendo un pipeline que permita reentrenar el modelo según llegan nuevos datos y evaluar su rendimiento de forma continua.
Consulta los issues abiertos para proponer características (y problemas conocidos).
Las contribuciones son lo que hacen que la comunidad de código abierto sea un lugar increíble para aprender, inspirarse y crear. Cualquier contribución que hagas será muy apreciada.
Si tienes una sugerencia para mejorar este proyecto, haz un fork del repositorio y crea un pull request. También puedes simplemente abrir un issue con la etiqueta “enhancement”. ¡No olvides darle una estrella al proyecto! Gracias de nuevo.
- Haz un fork del Proyecto
- Crea tu feature Branch (
git checkout -b feature/AmazingFeature
) - Haz commit de tus cambios (
git commit -m 'Add some AmazingFeature'
) - Push a la Branch (
git push origin feature/AmazingFeature
) - Abre un Pull Request
Distribuido bajo la licencia MIT. Consulta el archivo LICENSE para más información.
Freddy Pinto - [email protected]
Project Link: https://github.com/FreddyPinto/recsys-steam-games
Quiero agradecer a las siguientes personas y recursos que me han ayudado a realizar este proyecto:
- A SoyHenry por ofrecerme esta gran oportunidad de participar en el bootcamp de data science y aprender sobre MLOps.
- A la comunidad de Henry, especialmente a los profesores y compañeros que me han apoyado y guiado durante el proceso de aprendizaje.