Modelos y Simulación · Tema 36

Validación

Comprobar que el modelo representa al sistema real: del programa correcto al modelo útil.

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écnicas de validación de menor a mayor costo.
TécnicaQué se haceQué delata
Juicio expertoOperarios miran salidas y dicen «esto no pasa»Absurdos que el número esconde
Comparación gráficaSerie real vs simulada en el mismo ejeSesgos, desfases y picos perdidos
Error numéricoMAE o sesgo medio contra datosCuánto se equivoca, en unidades reales
BacktestingPredecir un período guardado y compararSobreajuste al pasado conocido

03 · Tres técnicas

Cómo se valida un modelo

  1. 1
    Cara y gráfico.

    Expertos y curvas superpuestas: lo barato que caza errores gordos antes de medir fino.

  2. 2
    Error contra datos.

    Sesgo y MAE en las mismas unidades del sistema, con el criterio escrito antes.

  3. 3
    Backtesting 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

Datos→Criterio→Contraste→Juicio→Rango

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.

EXPERIMENTO 36

Real contra modelo

tolerancia MAE ≤ 1,0

Los resultados numéricos aparecen debajo.
Sesgo medido0
MAE0
Tolerancia1,00
VeredictoVálido

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

  1. Llevá el sesgo a +3. ¿El MAE supera la tolerancia? ¿El gráfico lo mostraba antes que el número?
  2. Con sesgo 0, subí el ruido real a 2. ¿El MAE sube aunque el modelo sea insesgado? ¿Qué enseña sobre «parecerse»?
  3. ¿Por qué el veredicto usa datos con otra semilla que la de construcción? ¿Qué pasaría si fueran los mismos?
Ver respuestas sugeridas
  1. Sí: el MAE trepa a ~3 y el veredicto pasa a rechazado. El gráfico lo anticipa: la curva clara flota siempre arriba.
  2. Sí: más ruido real sube el MAE aunque el modelo apunte al centro. Parecerse incluye acertar la variabilidad, no solo la media.
  3. 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.