lección 4
El primer modelo (y la euforia)
Entrenar un bosque potente con todas las features: acierto espectacular y un valor altísimo para Olarra. Gorka te dice que esperes a mañana.
⏱ 50 min
## Miércoles, 10:00. El modelo potente por defecto
Ya sabes construir features justas. Ahora toca el momento que estabas esperando: entrenar el modelo. Vas a usar un bosque aleatorio de regresión (RandomForestRegressor), que es el modelo potente por defecto para datos en tabla como estos. Un bosque aleatorio es un conjunto de muchos árboles de decisión: cada árbol aprende reglas del tipo «si goles_90 > 0,8 y edad < 24, el valor sube», y el bosque promedia las predicciones de todos. Es flexible, capta relaciones no lineales, y funciona bien sin apenas ajustes. Por eso es el primero que casi todo el mundo prueba.
El flujo es el que ya conoces de la regresión: separas las features (X) del target (y), partes los datos en entrenamiento y prueba con train_test_split, entrenas el modelo con la parte de entrenamiento y mides cómo de bien lo hace. Como medida vas a usar el R² (R cuadrado, el coeficiente de determinación): va de 0 a 1 y dice qué fracción de la variación del valor explica el modelo. Un R² de 1 sería predicción perfecta; un R² de 0, no explicar nada más que la media. Es la métrica habitual de regresión y la que Gorka te va a pedir.
Y vas a hacer lo natural, lo que haría casi cualquiera el primer día: meter todas las features que tienes. Todas las stats por 90, la edad, los minutos, la posición, el valor actual… y también el dorsal, el día de la semana del último partido, el id de ficha interno y esas métricas raras del proveedor. «Cuantas más features, más información, mejor», piensas. Y entrenas un bosque sin ponerle límite de profundidad, para que aprenda todo lo que pueda. Es el camino natural. Guárdate esa frase, porque el camino natural es justo el que te va a meter en el problema.
## El resultado: euforia
Entrenas y mides. El modelo da un R² de 0,9465 sobre los datos de entrenamiento: casi perfecto. Y sobre la parte de prueba, los jugadores que no vio al entrenar, da 0,5752: muy bueno para estimar algo tan ruidoso como el valor futuro de un jugador. Pasas la fila de Dani Olarra por el modelo y sale un valor altísimo para la temporada que viene, justo lo que Chus esperaba oír: su crack de 20 años va a multiplicar su precio. Todo encaja. Estás a punto de mandar el número.
1Tú 12:352Gorka!! El modelo da 0,9465 de R² en entrenamiento y 0,58 en la prueba 🎉3Y a Olarra le sale un valor altísimo para el año que viene, justo lo que Chus esperaba4Chus, creo que ya tengo tu número 🙌56Chus 12:377BIEN!!! lo sabía, es un crack. ¿Me lo pasas hoy que preparo la reunión? 🙏89Gorka 12:3910Enhorabuena por el primer modelo entrenado. Pero no mandes nada todavía.11Mañana a primera hora quiero que miremos ese 0,58 juntos. Y ese 0,9465 me da bastante que pensar.12Tengo una pregunta para ti.
El chat del miércoles. La euforia es real y es comprensible: el modelo parece bueno. Pero fíjate en qué le llama la atención a Gorka: no el 0,58 de la prueba, sino el 0,9465 de entrenamiento. Un acierto casi perfecto sobre los datos que vio no le parece una buena noticia. Le parece una señal de alarma.
¿Por qué a Gorka le preocupa un acierto casi perfecto? Porque sabe de dónde sale. Un bosque sin límite de profundidad casi siempre da un R² altísimo sobre los datos con los que se entrenó: sus árboles crecen hasta casi clavar cada fila que vieron, ruido incluido. Así que ese 0,9465, solo, no prueba nada, ni bueno ni malo: no te dice cómo acertará con un jugador que no ha visto. Y el valor futuro de un jugador depende de cosas que ninguna estadística de este año recoge (lesiones, suerte, cómo se mueva el mercado), así que con jugadores nuevos ningún modelo se va a acercar a 1. Lo único que dice algo es comparar ese número con uno medido fuera. El 0,5752 de la prueba ya avisa: fuera, el modelo acierta mucho menos de lo que promete dentro.
Un acierto casi perfecto sobre los datos de entrenamiento no es una buena noticia ni una mala: no es una noticia. El mundo real tiene ruido que de verdad no se puede predecir, y un modelo que lo «explica» todo en los datos que vio está ajustando también ese ruido. Cuando veas un R² de entrenamiento pegado a 1, no lo celebres ni lo enseñes: ponle al lado un número medido con datos que el modelo no vio. Es la lección que Gorka lleva grabada desde que recomendó un fichaje con un 0,94 que no se sostuvo.
## La pista que dejas pasar
Antes de cerrar el día, sacas la importancia de las features: cuánto le sirve al modelo cada columna. Lo primero que encuentras es modelo.feature_importances_, y ahí el id de ficha, el dorsal y las métricas raras salen con unos 0,02 cada una, por encima de la altura. Parece que el modelo las necesita. Pero esa importancia (se llama importancia por impureza) mide cuánto partió el bosque por cada columna al ENTRENAR, y un bosque profundo parte por cualquier cosa con muchos valores distintos, aunque sea ruido. No te dice si la columna ayuda con jugadores nuevos. Para eso está la importancia por permutación: coges los datos de prueba, barajas una columna (la desordenas entre jugadores, así que deja de tener información) y miras cuánto baja el R². Si baja mucho, el modelo la necesitaba; si no baja nada, esa columna no le sirve fuera. Con esa medida, el ruido se va al fondo, en torno a cero. Te apuntas la pregunta para mañana: si seis columnas no le sirven de nada fuera, ¿para qué las tiene el modelo?
Consejo de senior: mide la importancia de las features con datos que el modelo no vio (por permutación), no con feature_importances_. La importancia por impureza se calcula sobre el entrenamiento y premia a las columnas con muchos valores distintos, así que puede poner arriba una columna de puro ruido. Si una feature sin sentido en tu problema pesa en la de impureza y no en la de permutación, el modelo la usó para ajustar casualidades del entrenamiento: no le sirve fuera.
## comentarios
Reporta erratas, ayuda a otros o comparte tu opinión. Sé constructivo.
Inicia sesión para comentar y responder.
cargando comentarios...
Regístrate para guardar tu progreso.