Skip to content

ftcister/Cropy-Recommender-System

Repository files navigation

Cropy-Recommender-System

Sistema Recomendador para Cropy

Instalación

Para instalar el sistema recomendador, se debe clonar el repositorio y crear un entorno virtual con python 3.11 Luego, se debe instalar las dependencias del archivo requirements.txt.

git clone
conda create -n cropy-recsys python=3.11
conda activate cropy-recsys
pip install -r requirements.txt

Ejecución

Para ejecutar los modelos de Retrieval y Ranking se debe ejecutar el archivo .py correspondiente, seguido del dataset y las epochs con las flags correspondientes.

python retrieval.py --d path/to/dataset --e epochs_number
python ranking.py --d path/to/dataset --e epochs_number

Deploy a Docker

Para hacer deploy del sistema recomendador en un contenedor de Docker, se debe crear la imagen con el archivo Dockerfile y luego ejecutar el contenedor con la imagen creada.

docker run -p -d --name recsys_retrieval 8501:8501 \                        
  --mount type=bind,source=/models/scann/model_name,target=/models/retrieval \
  -e MODEL_NAME=retrieval -t google/tf-serving-scann

Para hacer peticiones al sistema recomendador se puede hacer de dos formas, a traves de peticiones POST:

POST http://localhost:8501/v1/models/retrieval:predict
Content-Type: application/json

{
  "instances": [
    "user_id"
  ]
}

o tambien se puede hacer ejecutando el archivo predict_retrieval.py

python predict_retrieval.py -u User_id -k 10

Donde -u es el id del usuario y -k es el número de productos a recomendar.

Para hacer deploy al modelo de ranking, se debe crear la imagen con el archivo Dockerfile y luego ejecutar el contenedor con la imagen creada.

docker run -p -d --name recsys_ranking 8501:8501 \                        
  --mount type=bind,source=/models/ranking/model_name,target=/models/ranking \
  -e MODEL_NAME=ranking -t tensorflow/serving

Para hacer peticiones al sistema recomendador se puede hacer de dos formas, a traves de peticiones POST:

POST http://localhost:8501/v1/models/ranking:predict
Content-Type: application/json

{
  "instances": [
    "user_id",
    "product",
    "PRECIO",
    "sin_weekday",
    "cos_weekday",
    "sin_monthday",
    "cos_monthday",
    "sin_month",
    "cos_month",
    "sin_hour",
    "cos_hour",
  ]
}

o tambien se puede hacer ejecutando el archivo predict_ranking.py

python predict_ranking.py -u User_id -f product, PRECIO, sin_weekday, cos_weekday, sin_monthday, cos_monthday, sin_month, cos_month, sin_hour, cos_hour

Donde -u es el id del usuario y -p es el nombre de los productos a rankear.

Dataset

Los modelos reciben como entrada datasets en formato .parquet. Estos datasets deben tener las siguientes columnas:

Retrieval:

  • user_id (str): id del usuario
  • product (str): nombre del producto

Ranking:

  • user_id (str): id del usuario
  • product (str): nombre del producto
  • PRECIO (int): precio del producto
  • sin_weekday (float): seno del día de la semana
  • cos_weekday (float): coseno del día de la semana
  • sin_monthday (float): seno del día del mes
  • cos_monthday (float): coseno del día del mes
  • sin_month (float): seno del mes
  • cos_month (float): coseno del mes
  • sin_hour (float): seno de la hora
  • cos_hour (float): coseno de la hora

Preprocesamiento del dataset

Si no se cuenta con el dataset en el formato especificado, se puede ejecutar el archivo data_prep.py que recibe un dataset en formato .csv y lo convierte a formato .parquet, generando las columnas necesarias para el entrenamiento de los modelos, este dataset.csv tiene que tener las siguientes columnas:

  • user_id (str): id del usuario
  • product (str): nombre del producto
  • PRECIO (int): precio del producto
  • Fecha (Datetime): fecha del pedido (YYYY-MM-DD HH:MM:SS)

Para realizar el preprocesamiento se debe ejecutar el siguiente comando:

python data_prep.py --d path/to/dataset.csv

Y se generaran los datasets en formato .parquet en la carpeta datasets.

Resultados

Los resultados de los modelos se guardan en la carpeta logs, estos resultados pueden ser analizados con TensorBoard, que por defecto corre en el puerto local :6006.

  • logs/ranking/scalars/name_of_the_run: resultados del modelo de ranking
  • logs/retrieval/scalars/name_of_the_run: resultados del modelo de retrieval
tensorboard --logdir logs

About

Sistema Recomendador para Cropy

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages