MLflow Tracking y Evaluación - Two-Tower Recommender
MLflow Tracking y Evaluación - Two-Tower Recommender
Descripción
El módulo Two-Tower ahora incluye:
- ✅ Train/Val split automático por usuario (últimas 20% interacciones)
- ✅ Métricas de evaluación: Recall@K, NDCG@K, MRR
- ✅ MLflow tracking: params, métricas, artefactos, modelo
Uso
1. Entrenar con tracking (recomendado)
# Activa el venv de Python 3.11
. .\.venv311\Scripts\Activate.ps1
# Entrena con MLflow tracking habilitado
python next_rec_two_tower\models\train_two_tower.py `
--data-root . `
--artifacts .\.artifacts `
--epochs 5 `
--dim 32 `
--lr 0.01 `
--mlflow-tracking `
--experiment-name "two-tower-baseline"
Parámetros:
--mlflow-tracking: Activa logging en MLflow--experiment-name: Nombre del experimento (agrupa runs)--epochs: Número de épocas de entrenamiento--dim: Dimensión de embeddings--lr: Learning rate
2. Visualizar experimentos en MLflow UI
# Desde la raíz del proyecto
mlflow ui --backend-store-uri file:///./mlruns --port 5000
Luego abre en tu navegador: http://localhost:5000
Verás:
- Todos los experimentos y runs
- Parámetros (dim, lr, epochs, batch_size)
- Métricas (train_loss, recall_at_5, recall_at_10, ndcg_at_10, mrr)
- Artefactos (user_vecs.npy, item_vecs.npy, model, model_meta.json)
- Gráficos de comparación entre runs
3. Entrenar sin tracking (rápido)
python next_rec_two_tower\models\train_two_tower.py `
--data-root . `
--artifacts .\.artifacts `
--epochs 1 `
--dim 16
Métricas disponibles
Recall@K
Proporción de items relevantes recuperados en top-K recomendaciones.
recall_at_5: Recall en top 5recall_at_10: Recall en top 10recall_at_20: Recall en top 20
NDCG@K (Normalized Discounted Cumulative Gain)
Calidad de ranking considerando posición de items relevantes.
ndcg_at_5,ndcg_at_10,ndcg_at_20
MRR (Mean Reciprocal Rank)
Promedio del inverso de la posición del primer item relevante.
Interpretación
Valores esperados (baseline inicial)
- Recall@10: 0.005-0.02 (0.5%-2%)
- NDCG@10: 0.005-0.015 (0.5%-1.5%)
- MRR: 0.01-0.05 (1%-5%)
Estos valores son bajos porque:
- Dataset pequeño (5K interacciones)
- Modelo simple (Two-Tower vanilla sin features)
- 1-3 épocas de entrenamiento
Mejoras esperadas
Con optimización (Optuna) y más épocas (10-20):
- Recall@10: 0.05-0.15 (5%-15%)
- NDCG@10: 0.03-0.10 (3%-10%)
- MRR: 0.10-0.25 (10%-25%)
Comparar experimentos en MLflow UI
- Selecciona múltiples runs (checkbox)
- Click en “Compare”
- Ve métricas lado a lado, gráficos de scatter, parallel coordinates
Próximos pasos
- Optuna HPO: Optimizar dim, lr, epochs automáticamente
- Negative sampling: Mejorar calidad de entrenamiento
- Features: Agregar metadata de usuarios/items
- Producción: Deploy del mejor modelo desde MLflow Model Registry
Estructura de artefactos MLflow
mlruns/
├── 0/ # Experimento Default
├── <experiment_id>/ # Tu experimento (ej: two-tower-baseline)
│ ├── <run_id>/
│ │ ├── artifacts/
│ │ │ ├── model/ # Modelo PyTorch
│ │ │ ├── user_vecs.npy
│ │ │ ├── item_vecs.npy
│ │ │ └── model_meta.json
│ │ ├── metrics/
│ │ │ ├── train_loss
│ │ │ ├── recall_at_10
│ │ │ └── ...
│ │ └── params/
│ │ ├── dim
│ │ ├── lr
│ │ └── epochs
Comandos útiles
# Ver experimentos desde CLI
mlflow experiments list
# Buscar runs por métrica
mlflow runs search --experiment-name "two-tower-baseline" --filter "metrics.recall_at_10 > 0.01"
# Cargar modelo desde Python
import mlflow
model = mlflow.pytorch.load_model("runs:/<run_id>/model")
Tips
- Usa nombres descriptivos para experimentos:
two-tower-{feature}(ej: two-tower-hpo, two-tower-features) - Documenta cambios en tags de MLflow:
mlflow.set_tag("description", "Added user demographics") - Exporta métricas para reportes: MLflow UI → Download CSV