El Modelo
¿Cuánto vale un jugador?
Un modelo de machine learning que estima el salario “justo” de cada jugador NBA a partir de su rendimiento, y detecta quién está sobre o subvaluado por el mercado.
Qué hace
El modelo toma las estadísticas de un jugador y produce una estimación de cuánto debería cobrar según su rendimiento en cancha —su salario justo. Comparando ese valor contra el salario real, se puede detectar:
- ▲Sobrevalorados: el jugador cobra más de lo que sus números justifican.
- ▼Subvalorados: el jugador produce más valor del que refleja su contrato.
Tanto el salario real como el estimado se expresan como porcentaje del salary cap de la temporada, lo que permite comparar jugadores a lo largo del tiempo con independencia de la inflación salarial de la NBA.
Cómo lo estima
Features: temporada anterior (T-1)
El modelo usa exclusivamente las estadísticas de la temporada previa al contrato —sin datos del año en curso— para respetar la causalidad real: los equipos firman a los jugadores basándose en lo que vieron, no en lo que pasará. Esto elimina el data leakage (Experimento C).
Además de las stats básicas (puntos, rebotes, asistencias, minutos, eficiencias), se incorporan:
- Trayectoria (deltas): cambio en stats clave respecto a temporadas anteriores, capturando jugadores en ascenso o descenso.
- Percentiles: posición relativa del jugador dentro de su posición en esa temporada.
- Edad²: el efecto de la edad sobre el salario no es lineal —los picos de mercado ocurren alrededor de los 27-30 años.
Algoritmo: Gradient Boosting (GBM)
Se evaluaron múltiples modelos (regresión lineal, Random Forest, Ridge, etc.) y el Gradient Boosting Machine fue el que mejor balance logró entre capacidad predictiva y generalización. Es el modelo que se despliega en producción (Experimento C).
Qué tan bien
Entrenado en datos históricos de 1996 a 2012 y validado en temporadas no vistas de 2013 a 2015.
R² en test
0.62
El modelo explica el 62% de la varianza en salarios del conjunto de test (temporadas 2013-2015).
MAE (error medio)
3.43%
Error absoluto medio de 3.43% del salary cap —equivalente a unos 3-5 M USD según la temporada.
Período de entrenamiento
1996–2012
16 temporadas NBA históricas usadas para ajustar los parámetros del modelo.
Período de validación
2013–2015
3 temporadas reservadas para evaluar la capacidad de generalización fuera de la muestra.
Qué NO captura
El modelo es honesto sobre sus limitaciones. El 38% de varianza no explicada corresponde a factores humanos y contractuales que ningún algoritmo de stats puede capturar del todo.
Inercia de contratos plurianuales
Muchos contratos se firman 1 a 4 años antes del período analizado. El salario refleja expectativas pasadas, no el rendimiento actual.
Lesiones no incluidas
El historial de lesiones de un jugador afecta su cotización de mercado, pero no forma parte de las features del modelo.
Edad calculada por año
La edad se calcula como diferencia de años calendario, sin precisión de mes. Esto introduce ruido especialmente en jugadores cerca de un umbral de edad.
Riesgo de homónimos residuales
El merge de fuentes de datos usa el nombre del jugador. Homónimos o variaciones ortográficas pueden generar registros incorrectos pese a los controles aplicados.
Contexto humano no cuantificable
Liderazgo, popularidad, mercado de la franquicia, cláusulas de extensión de contrato y negociaciones individuales no están en ninguna planilla.
~38% de varianza sin explicar
El R²=0.62 en test implica que más de un tercio de la variabilidad salarial proviene de factores fuera del alcance del modelo.
La API
El modelo está expuesto como una API REST con documentación interactiva. Podés consultar jugadores, temporadas, rankings y predicciones directamente desde el navegador o integrar los datos en tu propia aplicación.
Documentación Swagger / OpenAPI disponible en /api/docs.