Equipo: 404 Data Not Found
Predicción de gastos recurrentes para Hey Banco
Este proyecto proporciona una solución completa para detectar patrones de gastos recurrentes en los clientes de Hey Banco y predecir el monto y el tiempo estimado hasta la siguiente transacción. Está dividido en dos componentes principales:
- Un notebook de entrenamiento y generación de features (
Hey_prediction.ipynb) - Una aplicación fullstack (React + Flask API) para hacer predicciones en tiempo real a partir de CSVs nuevos con features específicas.
-
Exploración de datos (EDA)
Se analizan tendencias generales, distribución de montos y periodicidad de transacciones por cliente-comercio. -
Limpieza y procesamiento
- Conversión de fechas
- Correción de columna comercio.
- Agrupaciones por cliente y comercio
-
Ingeniería de features
Para cada combinación cliente-comercio se generan:dias_desde_ultimamontomedia_monto_histstd_monto_histnum_tx_cliente_comercio
-
Clasificación heurística de gastos recurrentes
Basado en:- Frecuencia mínima de transacciones (≥ 3)
- Intervalo regular (mediana de días ≤ 45)
- Baja variabilidad del monto (desviación estándar < 30% de la media)
frecuencia['es_recurrente'] = ( (frecuencia['num_transacciones'] >= 3) & (frecuencia['dias_entre'] <= 45) & (frecuencia['monto_std'] < 0.3 * frecuencia['monto_promedio']) )
-
Entrenamiento de modelos Random Forest Regressor
- Un modelo para predecir el monto estimado
- Otro para predecir los días hasta la siguiente compra
-
Generación del dataset para producción
Se genera un nuevo.csvque incluye una fila por cliente-comercio correspondiente a la última transacción conocida, junto con sus features calculadas. -
Exportación de modelos
Los modelos entrenados se guardan como.joblibpara ser utilizados por la aplicación.
-
Frontend: construida con Vite + React + Tailwind. Permite:
- Subir CSVs con transacciones históricas
- Buscar por ID de cliente
- Visualizar gráficas por tipo de venta, comercio, monto en el tiempo
- Ejecutar predicciones fila por fila
-
Backend: Servidor Flask que expone un endpoint
/predicty usa los modelos.joblibpara responder con:{ "monto_estimado": 123.45, "dias_estimados": 30 }
git clone https://github.com/cuiltyv/datathon4.git
cd datathon4Abre el archivo Hey_prediction.ipynb y corre todas las celdas de principio a fin:
- Esto generará un archivo
.csvde entrada que la aplicación utilizará para hacer predicciones. - También entrenará y guardará dos modelos como
rf_model_monto.joblib(para monto estimado) yrf_model_fecha.pkl(para días estimados).
Asegúrate de tener todas las dependencias necesarias instaladas mediante el archivo requirements.txt.
cd backend
pip install -r requirements.txt
Una vez generados los modelos, colócalos en la carpeta backend/. Esta carpeta es donde reside el servidor Flask que usará dichos modelos para responder a las solicitudes de predicción.
Desde la carpeta backend, ejecuta el servidor Flask. Esto iniciará la API local que responde a las predicciones en la ruta /predict.
python ./datathon/backend/app.pyEsto levantará la API en http://127.0.0.1:5000.
Desde la carpeta datathon4, instala las dependencias necesarias y luego levanta la app en modo desarrollo.
cd datathon4
npm install
npm run devLa interfaz estará accesible en http://localhost:5173.
- Ejecuta el notebook
Hey_prediction.ipynb. - Guarda los modelos
.jobliben la carpetabackend/. - Ejecuta el servidor Flask.
- Levanta el frontend.
- Sube un nuevo archivo CSV, busca por ID de cliente y obtén las predicciones.
- pandas
- numpy
- scikit-learn
- joblib
- flask
- flask-cors
- jupyter
- matplotlib
- seaborn
- difflib
A continuación se muestra una imagen de la aplicación en ejecución. Para ver el comportamiento del modelo, debes introducir un ID de cliente válido en el campo de búsqueda. Esto filtrará los registros de ese cliente y mostrará gráficas personalizadas junto con la predicción estimada de su siguiente gasto.