lección 6
Domar la complejidad: el modelo honesto
Podas el bosque y tiras el ruido: fuera rinde prácticamente igual, con menos columnas. Y descubres de dónde salían los 90 millones de Olarra.
⏱ 55 min
## Jueves, 11:35. ¿Qué le sobra al modelo?
Ya sabes QUÉ pasa: el modelo acierta 0,9465 en entrenamiento y solo 0,5956 en validación cruzada. Su número de entrenamiento no vale para nada. Ahora toca ver si un modelo más sencillo rinde igual o mejor fuera. Gorka te da la pista:
1Gorka 11:352Dos cosas: el bosque es demasiado profundo (clava lo que ve, ruido incluido) y le has metido columnas3que son puro ruido. Mira la importancia por permutación de ayer: ¿qué columnas no le sirven de NADA4con jugadores que no ha visto?56Tú 11:487...el dorsal, el día de la semana del último partido, el id de ficha y las tres métricas raras.8Barajarlas no cambia el acierto. Alguna hasta sale en negativo.910Gorka 11:5111Entonces sobran. Al entrenar, el bosque parte por ellas (por eso puntúan en feature_importances_),12pero fuera no aportan nada. Prueba dos cosas y mídelas con validación cruzada: limita la profundidad13del bosque y quédate solo con las features que importan. A ver si un modelo MÁS SIMPLE rinde igual.14Y otra cosa: ayer, ¿Olarra estaba en entrenamiento o en prueba?
La pista de Gorka. Dos palancas: la profundidad del bosque (demasiado profundo = ajusta hasta el ruido del entrenamiento) y las columnas de ruido (fuera no aportan nada). Y una pregunta sobre Olarra que vas a contestar al final del día.
## Dos importancias que cuentan cosas distintas
Ayer viste dos formas de medir la importancia, y no dicen lo mismo. La de impureza (feature_importances_) cuenta cuánto partió el bosque por cada columna mientras aprendía de los jugadores de entrenamiento. Un bosque sin podar parte por todo lo que le ayude a separar esas filas, y una columna con muchos valores distintos (un id, una métrica continua) le da muchas formas de partir. Por eso el id de ficha, el dorsal y las métricas raras sacaban unos 0,02 cada una, por encima de la altura. La de permutación cuenta otra cosa: cuánto pierde el modelo con jugadores que no vio si esa columna deja de tener información. Ahí el ruido cae al fondo, en torno a cero. Conclusión: el bosque usó el ruido para ajustar el entrenamiento, pero no le sirve para acertar fuera. Son columnas que sobran.
## El arreglo: un modelo más simple
Cuando un modelo decepciona fuera, la tentación es darle más: más features, más árboles, más profundidad. Pero aquí al modelo no le falta capacidad: le sobra, y la gasta en ajustar el ruido del entrenamiento. La prueba que haces es la contraria: quitarle. Dos palancas, las que te dijo Gorka. Primera: limitar la profundidad del bosque (max_depth), para que ningún árbol pueda crecer hasta aislar jugadores sueltos. Segunda: quitar las features de ruido y quedarte solo con las que tienen sentido, porque fuera no aportan nada.
Haces las dos cosas y mides, siempre con validación cruzada. El bosque podado usa profundidad limitada (max_depth=12), exige un mínimo de jugadores por hoja para no aislar casos (min_samples_leaf=5) y solo las 14 features de señal. El acierto en entrenamiento BAJA de 0,9465 a 0,8177, y el de validación cruzada pasa de 0,5956 a 0,6094. ¿Es mejor? Mira la horquilla que te apuntaste esta mañana: de un fold a otro el R² se mueve casi una décima (en el podado, de 0,553 a 0,645). Una diferencia de 0,014 cabe de sobra en ese baile, así que no has demostrado que el simple sea mejor. Lo honesto es decir que fuera rinden prácticamente igual. Lo que sí has ganado es otra cosa: el mismo acierto con 14 columnas en vez de 20, y un número de entrenamiento que promete mucho menos de lo que no da (una distancia de 0,21 en vez de 0,35).
No vendas el 0,6094 como una mejora. Pasa de 0,5956 a 0,6094, pero los folds de cada modelo se mueven entre 0,54 y 0,65: con estos datos no puedes decir que uno sea mejor que otro. Lo que sí puedes decir es que, con menos columnas, rinde igual fuera, y que su número de entrenamiento engaña menos. Si dos modelos rinden igual, quédate con el más simple: es más fácil de explicar y de defender ante Patricia. Pero di «igual», no «mejor».
## El número de Olarra, y de dónde salían los 90
Ahora, la pregunta de Gorka sobre Olarra. Ayer le estimaste 90,56 M€, y Olarra estaba en la parte de entrenamiento: el modelo había visto su fila, con su valor del año siguiente dentro (102,4 M€ en la tabla). Un bosque sin podar te devuelve, en buena parte, la respuesta que ya se sabe. Al podado le pasa lo mismo, en menor medida: si lo entrenas con todos y luego le preguntas por Olarra, le da 77,79. Para estimar de verdad a Olarra hay que preguntárselo a un modelo que no le haya visto: entrenas sin su fila y luego lo predices. Así, los dos modelos dicen casi lo mismo: 69,81 M€ el podado y 69,10 el de ayer.
O sea: el 90 no salía de que el modelo complejo «inflara» a Olarra. Salía de preguntarle por un jugador cuya respuesta ya conocía. Es la idea de toda la semana, no medir con los datos con los que entrenaste, aplicada a un solo jugador. Olarra sigue saliendo alto: vale 16 millones hoy y, sin haberle visto, el modelo estima unos 70 para el año que viene. Pero no 90. Y ese número más bajo es la conversación incómoda que te espera mañana con Chus, que quería una cifra alta para pelear el fichaje.
Consejo de senior: cuando estimes un caso concreto que te importa (el jugador que quiere el jefe, el cliente más grande), comprueba que no estaba en los datos con los que entrenaste. Si estaba, el modelo te devuelve en parte su respuesta y el número parece más seguro de lo que es. Entrena sin él, o usa cross_val_predict, que estima cada fila con un modelo que no la vio. Y si el número honesto sale más bajo que el que quería el jefe, no vuelvas al otro: dáselo con su margen.
## 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.