01 · Punto de partida
¿El modelo se parece a la realidad?
En el Tema 35 dejamos el programa verificado: obedece al modelo. Ahora toca la pregunta incómoda: ¿ese modelo representa al sistema real lo bastante bien para la decisión que tenemos entre manos? Un simulador sin bugs puede predecir esperas de 5 minutos cuando la sucursal real sufre 40.
Validar es contrastar salidas del modelo con datos del sistema real, con un criterio escrito de antemano. No busca el modelo perfecto (no existe): busca un modelo válido para un uso, con sus límites declarados.
- ¿Contra qué datos reales se compara?
- ¿Qué error se tolera para decidir?
- ¿El modelo acierta en lo que importa, no solo en el promedio?
- ¿Dónde deja de valer y hay que avisar?
02 · Vocabulario mínimo
Dato, criterio y validez
Dato real
Medición del sistema en condiciones conocidas: esperas de una semana, ventas de un mes.
Criterio
Regla escrita de aceptación: error medio menor a 1 cliente, picos dentro del 15%.
Validez
Rango de uso aprobado: vale para demanda normal, no para feriados ni cortes.
| Técnica | Qué se hace | Qué delata |
|---|---|---|
| Juicio experto | Operarios miran salidas y dicen «esto no pasa» | Absurdos que el número esconde |
| Comparación gráfica | Serie real vs simulada en el mismo eje | Sesgos, desfases y picos perdidos |
| Error numérico | MAE o sesgo medio contra datos | Cuánto se equivoca, en unidades reales |
| Backtesting | Predecir un período guardado y comparar | Sobreajuste al pasado conocido |
03 · Tres técnicas
Cómo se valida un modelo
- 1Cara y gráfico.
Expertos y curvas superpuestas: lo barato que caza errores gordos antes de medir fino.
- 2Error contra datos.
Sesgo y MAE en las mismas unidades del sistema, con el criterio escrito antes.
- 3Backtesting honesto.
Se valida contra un período que no se usó para construir ni calibrar el modelo.
Validar con los mismos datos
Trampa cómoda
El modelo «acierta» porque ya vio esos datos al construirse. Parece válido y falla con lo nuevo.
Validar con datos nuevos
Prueba honesta
Se guarda un período intacto y se compara al final. Cuesta datos, pero dice la verdad sobre el futuro.
- Validación
- Comprobar que el modelo representa al sistema real para un uso declarado.
- Sesgo
- Error sistemático: el modelo siempre por encima o por debajo.
- MAE
- Error absoluto medio: tamaño típico del error, en unidades reales.
- Backtesting
- Validar contra un período reservado y no usado antes.
04 · Protocolo
El contraste en cinco pasos
Se reservan datos, se escribe el criterio, se corre el contraste gráfico y numérico, se dicta el juicio (válido / válido con límites / rechazado) y se anota el rango. El Tema 37 calibrará dentro de ese rango; el Tema 38 profundizará la comparación.
05 · En Python
Medir el error contra datos reales
El contraste numérico cabe en dos funciones: sesgo (¿tira para un lado?) y MAE (¿cuánto se equivoca en promedio?):
Python en tu navegador. Validar es comparar listas, sin librerías externas.
real = [12, 14, 13, 15, 14]
sim = [11, 13, 13, 14, 14]
def sesgo(r, s):
return sum(a - b for a, b in zip(s, r)) / len(r)
def mae(r, s):
return sum(abs(a - b) for a, b in zip(s, r)) / len(r)
print("sesgo:", round(sesgo(real, sim), 2))
print("MAE:", round(mae(real, sim), 2))
Dictar el juicio con criterio escrito
El criterio va en el código, no en la cabeza: el veredicto se lee, no se improvisa después de ver los números.
def juicio(error, tolerancia=1.0):
if error <= tolerancia:
return "válido para este uso"
if error <= 2 * tolerancia:
return "válido con límites"
return "rechazado"
print(juicio(0.8))
print(juicio(1.5))
print(juicio(3.0))
06 · Exploración
Laboratorio: ¿el modelo se parece?
La curva oscura es el sistema real (12 días medidos). La curva clara es tu modelo: podés mover su sesgo (¿tira alto o bajo?) y ver cómo el MAE decide el veredicto con tolerancia 1,0.
Real contra modelo
tolerancia MAE ≤ 1,0
Con sesgo 0, el modelo empata a la realidad dentro de la tolerancia.
Curva oscura con puntos: datos reales. Curva clara: modelo con tu sesgo. La distancia vertical promedia el MAE.
Preguntas para explorar
- Llevá el sesgo a +3. ¿El MAE supera la tolerancia? ¿El gráfico lo mostraba antes que el número?
- Con sesgo 0, subí el ruido real a 2. ¿El MAE sube aunque el modelo sea insesgado? ¿Qué enseña sobre «parecerse»?
- ¿Por qué el veredicto usa datos con otra semilla que la de construcción? ¿Qué pasaría si fueran los mismos?
Ver respuestas sugeridas
- Sí: el MAE trepa a ~3 y el veredicto pasa a rechazado. El gráfico lo anticipa: la curva clara flota siempre arriba.
- Sí: más ruido real sube el MAE aunque el modelo apunte al centro. Parecerse incluye acertar la variabilidad, no solo la media.
- Porque validar con los mismos datos de construcción es mirarse al espejo: el modelo «acierta» lo que ya vio. La prueba honesta usa datos nuevos.
07 · Comprensión
Confusiones frecuentes
«Verificado es validado»
No: verificado obedece al modelo; validado se parece a la realidad. Faltando la segunda, hay software correcto e inútil.
«Si empata el promedio, vale»
El promedio esconde sesgos que se compensan y picos que importan. Hay que mirar series, dispersión y momentos críticos.
«Válido una vez, válido siempre»
La validez tiene rango: demanda, horizonte y condiciones. Fuera de rango hay que revalidar, no suponer.
«Validar es calibrar»
Validar juzga con datos nuevos; calibrar ajusta con datos conocidos (Tema 37). Calibrar para «pasar» la validación es maquillar.
08 · Práctica guiada
Ejercicios con Python
Ejercicio 1: calcular sesgo y MAE
Contrastá estas 5 mediciones reales con tu modelo. ¿Tira alto o bajo? ¿Cuánto se equivoca?
real = [12, 14, 13, 15, 14]
sim = [11, 13, 13, 14, 14]
sesgo = sum(a - b for a, b in zip(sim, real)) / len(real)
mae = sum(abs(a - b) for a, b in zip(sim, real)) / len(real)
print("sesgo:", sesgo)
print("MAE:", mae)
Ver solución razonada
Da sesgo: -0.6 y MAE: 0.6: el modelo tira un poco bajo y se equivoca en 0,6 clientes típicos.
Ejercicio 2: dictar el juicio
Con MAE 0,6 y tolerancia 1,0, ¿cuál es el veredicto? ¿Y con MAE 1,5?
def juicio(error, tolerancia=1.0):
if error <= tolerancia:
return "válido para este uso"
if error <= 2 * tolerancia:
return "válido con límites"
return "rechazado"
print(juicio(0.6))
print(juicio(1.5))
Ver solución
Dan válido para este uso y válido con límites: el segundo pide declarar dónde y para qué sigue valiendo.
Ejercicio 3: reservar datos para backtesting
Partí 12 días en 8 de construcción y 4 de validación, sin mezclar.
Ver una posible respuesta
dias = list(range(12))
construccion, validacion = dias[:8], dias[8:]
print("construcción:", construccion)
print("validación:", validacion)
Los últimos 4 días quedan intactos hasta el juicio final: si el modelo los predice bien, la validez es honesta.
09 · Síntesis
Ideas para recordar
- Validar es contrastar el modelo con datos reales para un uso declarado.
- El criterio se escribe antes: tolerancia en unidades reales.
- Sesgo y MAE miden dirección y tamaño del error.
- La prueba honesta usa datos nuevos (backtesting), no los de construcción.
- En Python: comparar listas, medir sesgo y MAE, dictar juicio con criterio.
En el próximo tema ajustaremos sin maquillar: la calibración.