Saltar al contenido

lección 4

Miércoles: el primer modelo y leer el error en servicios/hora

Partir al azar y entrenar un bosque aleatorio: da un R² buenísimo de 0,93 y parece que lo clavaste. Nadie sabe aún por qué va tan bien.

⏱ 55 min

## Miércoles, 10:00. Por fin se entrena

Ayer dejaste la serie limpia, agregada y con todas sus pistas: la tabla de modelado. Hoy, por fin, se entrena. Para que todos los ejercicios de modelado partan del mismo punto exacto, usarás una versión ya construida de esa tabla, serie_modelo.csv, con sus 17.423 filas, su columna n_servicios (el target) y sus diez features (los tres lags, las dos medias móviles, la hora, el día de la semana, el mes, el festivo y la temperatura), sin ningún hueco. Es la misma tabla que montaste ayer, servida hecha para no arrastrar la limpieza en cada ejercicio.

Entrenar un modelo tiene siempre la misma forma: se separan las features (las pistas, que llamamos X) del target (lo que se quiere predecir, que llamamos y), se parte la tabla en una parte para entrenar y otra para probar, se ajusta el modelo con la parte de entrenamiento y se mide su error con la parte de prueba —datos que no vio al aprender—. En scikit-learn, la librería de modelos de Python, la partición la hace una función que, por defecto, reparte las filas al azar. Y aquí viene lo importante: eso es exactamente lo que traes aprendido de tus tres encargos anteriores, donde cada fila era independiente y repartir al azar era lo correcto. Hoy lo haces igual que siempre. Lo que no sabes todavía es que en una serie eso tiene truco.

El split al azar reparte las horas por toda la serie, así que cada hora de prueba queda con vecinas suyas en el entrenamiento. Hoy lo haces así, igual que en tus encargos anteriores. El truco que esconde esto en una serie es la lección del jueves.

## Leer el error en servicios, no en abstracto

Cuando el modelo predice un número, acertar el valor exacto es casi imposible: ninguna hora da justo los servicios que predices al decimal. Así que la pregunta no es "¿cuántas veces aciertas?", sino "¿por cuántos servicios te equivocas?". Para eso hay tres medidas que vas a calcular siempre juntas. El MAE (error absoluto medio) es el promedio de lo que te desvías, en servicios: si da 0,85, te equivocas de media en menos de un servicio por hora. El RMSE es parecido pero penaliza más los errores grandes, también en servicios. Y el R² dice qué parte de la variación de la demanda explica el modelo, de 0 a 1: es una medida de contexto, sin unidades, y —esto es clave— solo es fiable si se midió bien.

De las tres, la que de verdad entiende la central es el MAE, porque está en servicios: "me equivoco de media en X servicios por hora" es una frase que Rebeca puede traducir directamente a cuántos operadores de margen poner. El R² es útil para hablar entre nosotros, pero a Casilda no le dice nada por sí solo. Por eso toda la semana vas a traducir cada métrica a servicios, y vas a tratar el R² con cautela: un R² altísimo es una buena noticia solo cuando sabes sobre qué datos se midió.

Las tres medidas del error. El MAE, en servicios, es la que la central puede usar para dimensionar los turnos. El R² es de contexto y solo vale si se midió bien, un matiz que el jueves resultará ser el corazón del caso.

## El bosque aleatorio, y después el lineal

El modelo que vas a usar es un bosque aleatorio, un regresor que combina muchos árboles de decisión y suele ir muy bien capturando relaciones complicadas sin que haya que decirle nada. Lo entrenas con cien árboles y una semilla fija, para que el resultado sea siempre el mismo. Al medir sobre la parte de prueba, los números salen espectaculares: un R² de 0,93 y un error de menos de un servicio por hora. Suena a triunfo redondo, y por un momento lo parece.

Para comparar, entrenas también una regresión lineal, un modelo mucho más simple, con las mismas features y la misma partición. También va genial: un R² de 0,91 y un error pequeño. Los dos modelos, el complicado y el simple, dan resultados buenísimos. Eso debería hacerte levantar una ceja: cuando hasta el modelo más tonto acierta casi todo, muchas veces no es que los modelos sean geniales, es que la evaluación es demasiado fácil. Pero hoy no lo ves todavía. Hoy le escribes a Severino que lo has clavado.

Un R² de 0,93 a la primera, con dos modelos distintos dando casi lo mismo, es justo el tipo de resultado que debería dar un poco de miedo. Un buen resultado es una hipótesis, no una conclusión: antes de celebrarlo, la pregunta de senior es "¿y cómo partí los datos?". Hoy no te la haces, y es lo normal: traes aprendido que el split al azar es correcto. Mañana Severino te la hará, y ahí se cae el castillo. Guarda el 0,93 en la cabeza, porque vas a verlo desinflarse.

A partir de hoy los ejercicios de modelado parten de serie_modelo.csv, la tabla de modelado ya construida (17.423 filas, columnas zona, ts, n_servicios y las diez features), para que todos empiecen del mismo punto. Está en la carpeta datos/, junto con los CSV crudos del caso.

volver a la visión del caso y descargar los datasets

Regístrate para guardar tu progreso.