Aquí pueden interactuar con el modelo en producción. Se puede demorar en cargar la primera vez que se entra al link en un tiempo.
Para crear la base de datos en PostgreSQL y hostearla en la nube usé Supabase. Las credenciales para acceder a la base de datos son las siguientes (la contraseña está en el correo por razones de seguridad):
{
"host": "db.kowllitbpmdnyshbtbzn.supabase.co",
"database": "postgres",
"port": "5432",
"user": "postgres",
"password": "LA CONTRASEÑA ESTÁ EN EL CORREO"
}
El query que produce la tabla de la prueba es
SELECT DISTINCT
"Monthh",
"WeekOfMonth",
"DayOfWeek",
ROUND(AVG("FraudFound_P") OVER (PARTITION BY "Monthh")*100, 2)::float AS percentage_fraud_month,
ROUND(AVG("FraudFound_P") OVER (PARTITION BY "Monthh", "WeekOfMonth")*100, 2)::float AS percentage_fraud_month_week,
ROUND(AVG("FraudFound_P") OVER (PARTITION BY "Monthh", "WeekOfMonth", "DayOfWeek")*100, 2)::float AS percentage_fraud_month_week_day
FROM public.fraudes
ORDER BY
"Monthh" ASC,
"WeekOfMonth" ASC
Para probar la consulta creé un notebook que se conecta a la base de datos que está en la nube y envía el query de SQL.
Los pasos para usarlo son:
- Ir al notebook en
./notebooks/r5_part01_sql.ipynb
. - Darle click al botón al inicio del notebook que dice Open in Colab
- Ingresar la clave de la base de datos. La clave está en el correo.
El desarrollo de esta sección está en el notebook ./notebooks/r5_part02_model.ipynb
. También incluye el análisis de cómo el negocio podría hacer uso de este modelo.
Para correr el notebook darle click al botón Open in Colab en la parte superior del mismo. No olvidar incluir la contraseña de la base de datos en la celda 4.
Como administrador de dependencias usé Poetry.
Para instalar los paquetes correr
# Con Poetry instalado
poetry install
# Con pip
pip install -r requirements.txt
Adicionalmente, para poder usar el script train.py
es necesario crear el archivo ./.env
con la variable de entorno DB_PASSWORD
.
DB_PASSWORD=<CONTRASEÑA QUE ESTÁ EN EL CORREO>
Con el objetivo de que probar el modelo fuese lo más fácil posible reduje la cantidad de features a 7. Así, al momento de usar la interfaz gráfica que provee FastAPI solo hay que escribir 7 valores para predecir un fraude.
El script incluye:
- Pipeline que integra en una sola clase la transformación y predicción.
- Transformación de features categóricos nominales y ordinales y numéricos discretos.
- Un
VotingClassifier
para incluir diferentes modelos de clasificación y crear un estimador más robusto.
Para mejorar los resultados se pueden incluir:
- Feature Engineering.
- Selección de features.
- Validación cruzada.
- Hyperparameter tuning de los modelos.
Este script se encarga de cargar el modelo. También incluye una función que recibe un DataFrame con las features como columnas y las observaciones como filas y retorna la probabilidad de que cada observación sea un fraude.
Si se corre el comando python ./models/predict.py
se imprimirá el resultado de una predicción de prueba para saber que el modelo está funcionando.
La API la creé con la librería FastAPI. El código está en el archivo ./main.py
.
Para probar la API en local es necesario correr el siguiente comando:
uvicorn main:app --reload
Después de desarrollar la API en local, usé Render para crear un servicio en la nube. Internamente lo que hace Render es usar un contenedor de Docker con la versión de Python que uno define en la variable de entorno PYTHON_VERSION
.
En https://r5-ah9a.onrender.com/docs se puede interactuar con la API.
# Generate Poetry requirements.txt without hashes
poetry export --without-hashes --format=requirements.txt > requirements.txt