Saltar al contenido

lección 6

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

Reevaluar el mismo modelo partiendo por tiempo: el R² cae de 0,93 a 0,70. El modelo no cambió, cambió cómo lo mides; y ese es el número real.

⏱ 55 min

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

Ya sabes por qué el 0,93 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, todo lo posterior a la prueba. Sin barajar. 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 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 en el entrenamiento, así que el número que sale es el real.

## El número cae, y eso es la buena noticia

Al reevaluar el mismo modelo partiendo por tiempo, el R² cae de 0,93 a 0,70, y el error sube de 0,86 a casi 1,5 servicios por hora. 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 de verdad se equivoca en unos 1,5 servicios por hora, no en 0,86. El 0,86 era el error en un examen con chuleta; el 1,5 es el error en el examen de verdad. Y el 1,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,86 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. 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 infla el R² a 0,93 porque deja ver el futuro; el split por tiempo da el 0,70 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, y el resultado confirma la intuición de todo el caso: la demanda de hace una hora domina con muchísima diferencia —es, de lejos, la pista más potente—, seguida a bastante distancia por la de ayer a esta hora, el patrón horario y la media móvil de las últimas 24 horas. La temperatura aporta algo (las olas de frío y calor), y el día de la semana, el festivo y el mes pesan poco. Son todas señales legítimas de contexto, que ayudan a construir y a contar el modelo, pero ninguna cambia por sí sola una decisión de negocio. La única que mueve el dimensionamiento de los turnos es la que descubriste hoy: no partas al azar una serie, evalúa por tiempo.

Que la demanda de hace una hora sea la pista reina tiene todo el sentido, y cierra el círculo del caso. La demanda de una hora se parece muchísimo a la de la hora anterior, y por eso la serie es tan predecible. Esa misma cercanía era la que, con el split al azar, el modelo explotaba de más: al tener las horas vecinas en el entrenamiento, le estabas sirviendo su pista reina casi hecha. 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 número baje: no porque el modelo sea peor, sino porque por fin está haciendo el trabajo real.

El R² que baja 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,93 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,93, recuerda: ese número no existe en la vida real, porque en la vida real nunca conoces el futuro.

Sigues con serie_modelo.csv en la carpeta datos/. 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 todo lo posterior para probar.

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

Regístrate para guardar tu progreso.