Saltar al contenido

lección 6

Jueves B: el número honesto, split por tiempo

Reevaluar el mismo modelo partiendo por tiempo: el error sube de 0,97 a 2,5 servicios/hora. El modelo no cambió, cambió cómo lo mides; y aun así gana a la referencia de hace 14 días.

⏱ 55 min

## Jueves, 11:35. Partir por tiempo, el mismo modelo

Ya sabes por qué el 0,91 era trampa. Ahora toca medir bien. La idea es sencilla y es exactamente lo que harías en producción: en vez de repartir las horas al azar, se parte por tiempo. Se ordena la serie por su marca de tiempo, se elige un punto de corte —en este caso, el momento que deja el 80% de la serie detrás—, y todo lo anterior al corte va al entrenamiento; las dos semanas siguientes, a la prueba. Sin barajar. ¿Por qué dos semanas? Porque es tu horizonte: el viernes entrenarás con todo lo conocido y predecirás los 14 días siguientes, así que eso es lo que hay que simular. Así el modelo entrena solo con el pasado y se prueba contra un futuro que no ha visto, igual que cuando la central lo use de verdad el martes que viene. No cambias el modelo ni una coma: solo cambias qué filas van a cada lado.

Fíjate en que esto es honesto precisamente porque reproduce la situación real. El martes que viene, la central tendrá todo el histórico hasta hoy (el pasado) y querrá predecir unos tramos que aún no han ocurrido (el futuro). El split por tiempo monta exactamente ese escenario en tus datos: finge que "hoy" es el punto de corte, entrena con lo de antes y mide prediciendo lo de después. Nada de vecinas repartidas por los dos lados. El modelo tiene que predecir dos semanas enteras que no ha visto, solo con lo que sabía antes de ellas.

El split por tiempo respeta el orden: entrena con el pasado y prueba con el futuro, igual que la central tendrá en producción. Ninguna hora de prueba tiene vecinas futuras en el entrenamiento, así que el número que sale es el real.

## El error sube, y eso es la buena noticia

Al reevaluar el mismo modelo partiendo por tiempo, el error sube de 0,97 a 2,5 servicios por hora, y el R² cae de 0,91 a 0,04. La primera reacción es sentir que has roto algo. No has roto nada. El modelo está exactamente igual de bien construido que ayer; lo único que ha cambiado es que ahora lo estás midiendo de forma honesta, y resulta que a dos semanas vista se equivoca de verdad en unos 2,5 servicios por hora, no en 0,97. El 0,97 era el error en un examen con chuleta; el 2,5 es el error en el examen de verdad. Ese R² casi nulo dice que, dentro de esas dos semanas, el modelo apenas sigue el vaivén hora a hora: lo que acierta es, sobre todo, el nivel. Y el 2,5 es, con diferencia, la mejor noticia del día, porque es el que de verdad vas a tener delante cuando la central use el modelo. Prometerle a Rebeca el 0,97 habría sido prometerle una precisión que no existe.

Severino lo resume así: el split al azar no es "otro modelo mejor", es la MISMA predicción evaluada haciendo trampa. En una serie, la evaluación honesta es siempre por tiempo. Y el error que se le promete a negocio es el del split temporal, aunque sea más alto, porque es el único que se cumple. Falta una pregunta: ¿2,5 es bueno o malo? Para saberlo hay que compararlo con lo que la central podría hacer sin ningún modelo: poner para cada hora la demanda de la misma hora de hace 14 días. Esa es la referencia estacional, y se equivoca en 5,3 servicios por hora en esas mismas dos semanas, porque la demanda subió mucho y lo de hace dos semanas se quedó corto. El modelo se equivoca la mitad: esa es su aportación de verdad. Un número honesto que incomoda vale más que uno bonito que te explota el primer martes que falte gente en el arcén. Esta es la lección entera del caso, y vale más que el modelo: en una serie, partir al azar te regala un R² que no es real; partir por tiempo te da el número verdadero, más bajo pero el que de verdad verá la central.

El mismo modelo, medido de dos formas. El split al azar rebaja el error a 0,97 porque deja ver el futuro; el split por tiempo da el 2,5 real. No es que un modelo sea mejor: es la misma predicción, una evaluada con trampa y otra honesta.

## Qué pistas sostienen la predicción honesta

Para terminar de entender el modelo honesto, miras qué features pesan más. El bosque aleatorio puede decirte cuánto se apoya en cada pista. Ninguna domina sola: arriba están el mes, el nivel de la semana que acabó hace 14 días y la hora del día; los lags sueltos pesan poco y el festivo casi nada. Es decir, a dos semanas vista el modelo acierta sobre todo en qué nivel está la demanda y qué forma tiene el día, no el detalle de cada hora. Son señales de contexto, que ayudan a construir y a contar el modelo, pero ninguna cambia por sí sola una decisión de negocio. La que mueve el dimensionamiento de los turnos es la que descubriste hoy: no partas al azar una serie, evalúa por tiempo y contra la referencia.

Ojo con el mes, la pista que más pesa. Este año la demanda ha ido subiendo mes a mes, y el bosque ha aprendido que en verano hay más servicios. Es una asociación con la subida de este año, no una ley: si el año que viene la demanda no sube igual, esa pista engañará, y solo se confirmaría reevaluando con datos de otro año. Y cierra el círculo del caso: la demanda de una hora se parece muchísimo a la de sus vecinas. Esa cercanía era la que, con el split al azar, el modelo explotaba: al tener las horas vecinas en el entrenamiento con su respuesta, solo tenía que copiarlas. Partir por tiempo le quita ese lujo y le obliga a predecir de verdad, con lo que sabía antes del corte. De ahí que el error suba: no porque el modelo sea peor, sino porque por fin está haciendo el trabajo real.

El error que sube al partir por tiempo no es un fracaso tuyo ni un modelo roto: es la lección del caso. El modelo está bien hecho. El 0,91 era una medición tramposa, no un modelo mejor. El valor de tu trabajo no es el R² más alto, es el número honesto que cambia cómo la central dimensiona los turnos. Si alguna vez sientes la tentación de "arreglar" el modelo para recuperar el 0,91, recuerda: ese número no existe en la vida real, porque en la vida real nunca conoces el futuro.

Sigues con la tabla a 14 días que reconstruye el bloque de siempre (desde serie_horaria.csv). El corte temporal se calcula sobre su columna ts: se ordena la serie por ts y se parte en el cuantil 0,8 (el punto que deja detrás el 80% de las horas), con todo lo anterior o igual al corte para entrenar y los 14 días siguientes para probar.

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

Regístrate para guardar tu progreso.