Los estudios cinematográficos enfrentan un alto riesgo financiero al asignar presupuestos de marketing y recursos de producción antes del estreno de una película. Este proyecto entrega un pipeline MLOps de principio a fin que predice si una película será un “Hit” comercial y de crítica —definido como alcanzar una calificación de crítica ≥ 7.5 y un engagement de audiencia ≥ 1,000 votos— permitiendo decisiones basadas en datos sobre priorización de recursos y segmentación de campañas antes del estreno en cines.
Arquitectura y Stack
| Capa | Herramienta / Tecnología | Rol |
|---|---|---|
| Fuente de Datos | TMDB 5000 Movies Dataset (CSV) | Metadata cruda de películas para entrenamiento |
| Ingeniería de Características | Python · Pandas · NumPy | Preprocesamiento, parsing JSON, transformaciones log, imputación |
| Entrenamiento y Evaluación ML | scikit-learn (Regresión Logística · DictVectorizer) | Entrenamiento de modelo, codificación one-hot, evaluación AUC-ROC |
| Seguimiento de Experimentos | MLflow (backend SQLite) | Registro de parámetros, seguimiento de métricas, versionado de modelos |
| Servicio de Modelo | BentoML · Uvicorn | API REST (/predict) que sirve probabilidad HIT/FLOP |
| Contenedorización | Docker (vía BentoML) | Despliegue reproducible en python:3.12-slim |
| Gestión de Dependencias | UV | Entorno bloqueado y reproducible entre máquinas |
Logros Técnicos Clave
Ingeniería de características sin fuga de datos — Ocho características de entrada seleccionadas cuidadosamente para excluir las columnas que definen el objetivo (vote_average, vote_count), previniendo fuga de datos y asegurando una evaluación válida fuera de muestra vía AUC-ROC en una partición 80/20.
Código base modular y de arquitectura limpia — Responsabilidades separadas en módulos de propósito único: data_utils.py (ingeniería de características), train.py (orquestación del pipeline) y service.py (definición de la API), con constantes compartidas definidas una vez e importadas donde se necesitan.
Entorno MLOps reproducible — Gestión de dependencias vía uv con un uv.lock versionado y una .python-version fija (Python 3.12). MLflow registra cada corrida de entrenamiento —hiperparámetros (C), métricas (test_auc) y etiquetas de modelo de BentoML— permitiendo trazabilidad completa del experimento.
Preprocesamiento consciente de la distribución — Las características budget y revenue se transforman logarítmicamente vía log1p(x) para estabilizar distribuciones fuertemente sesgadas a la derecha. Los valores numéricos faltantes se imputan con medianas; los vacíos categóricos usan "Unknown" por defecto, asegurando que ningún registro de entrenamiento se descarte silenciosamente.