01 · Punto de partida
Un número sin gráfico es ciego; un gráfico sin número es sordo
Ya tenés datos con linaje (Tema 10) y tolerancia declarada (Tema 5). Ahora hay que mirarlos de frente: la serie real contra la simulada, punto a punto y distribución contra distribución. Cada vista caza un defecto distinto.
- ¿El modelo sigue la forma, aunque falle el nivel?
- ¿Erra parejo o solo en los picos?
- ¿El error crece con el valor (heterocedasticidad)?
- ¿Qué número resume sin ocultar lo importante?
02 · Definición
Tres niveles de contraste
Punto a punto
Serie temporal superpuesta: caza desfases, sesgos sostenidos y picos no modelados.
Conjunta
Dispersión sim vs. real contra la diagonal: caza compresión de varianza y no linealidades.
De error
Bland-Altman (error vs. promedio): caza sesgo que crece con el nivel y límites de acuerdo.
| Vista | Eje x / y | Delata |
|---|---|---|
| Serie | t / valor | Desfase temporal, deriva, picos |
| Dispersión | real / sim | Sesgo global, varianza aplanada |
| Bland-Altman | promedio / error | Error que crece con el nivel |
03 · Gráficos
Leer los tres como un detective
- 1Serie: ¿persigue o calca?
Si la simulada persigue a la real con 1–2 pasos de retraso, hay desfase (orden de eventos o retardo no modelado), no ruido.
- 2Dispersión: ¿diagonal o nube chata?
Puntos sobre la diagonal = acuerdo. Nube horizontal = modelo que devuelve casi siempre lo mismo (varianza aplanada).
- 3Bland-Altman: ¿banda horizontal o embudo?
Errores centrados en cero y parejos = acuerdo estable. Embudo que se abre = el modelo erra más en valores altos.
04 · Números
Sesgo, MAE y correlación (el trío inseparable)
Nivel y magnitud
Sesgo + MAE
Sesgo dice hacia dónde tira; MAE dice cuánto erra en promedio. Un MAE bajo con sesgo alto es compensación (Tema 5).
Forma
Correlación r
Mide si suben y bajan juntos (−1…1). r ≈ 1 con sesgo +2 = forma perfecta, nivel corrido: se recalibra, no se tira.
- Correlación alta + MAE alto
- Buena forma, mal nivel: desfase o sesgo constante. Reversible con recalibración.
- Correlación baja + MAE bajo
- Raro pero posible: errores que se cancelan. Pedir dispersión y Bland-Altman antes de festejar.
- Límites de acuerdo
- Sesgo ± 2·DE del error: el 95% de los errores cae ahí si son normales. Ancho = incerteza del acuerdo.
05 · Representación en Python
El trío en 15 líneas
Python en tu navegador. Cambiá el desfase y observá qué número lo delata primero.
real = [11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 18, 19]
sim = [11, 12, 13, 13, 14, 15, 16, 16, 17, 17, 18, 18]
err = [s - r for s, r in zip(sim, real)]
sesgo = sum(err) / len(err)
mae = sum(abs(e) for e in err) / len(err)
mr, ms = sum(real)/len(real), sum(sim)/len(sim)
cov = sum((r-mr)*(s-ms) for r, s in zip(real, sim)) / len(real)
import math
vr = sum((r-mr)**2 for r in real) / len(real)
vs = sum((s-ms)**2 for s in sim) / len(sim)
r = cov / math.sqrt(vr*vs)
print(f"sesgo {sesgo:+.2f} | MAE {mae:.2f} | r {r:.2f}")
Sesgo +0,08, MAE 0,42, r ≈ 0,99: forma excelente y nivel correcto. El modelo persigue bien.
Bland-Altman mínimo
prom = [(s+r)/2 for s, r in zip(sim, real)]
import math
de = math.sqrt(sum((e-sesgo)**2 for e in err) / len(err))
print(f"límites de acuerdo: {sesgo-2*de:.2f} a {sesgo+2*de:.2f}")
for p, e in zip(prom, err):
print(f"prom {p:.1f} error {e:+.0f}")
06 · Exploración
Laboratorio: tres vistas, tres defectos
Inyectá sesgo (nivel corrido), desfase (persigue con retraso) y ruido. Arriba ves la serie; abajo la dispersión contra la diagonal. Observá qué número (sesgo, MAE, r) delata cada defecto.
Serie + dispersión en vivo
sesgo · MAE · r de Pearson
Sin sesgo ni desfase: puntos sobre la diagonal y r cercano a 1.
Arriba: puntos reales y línea simulada en el tiempo. Abajo: cada punto es un instante (x=real, y=simulado); la diagonal es acuerdo perfecto.
Preguntas para explorar
- Poné sesgo +2 sin desfase: ¿sesgo, MAE y r? ¿Por qué r sigue alta aunque el acuerdo sea malo?
- Poné desfase 2 sin sesgo: ¿qué le pasa a la serie y a r? ¿Qué defecto delata la persecución con retraso?
- Subí el ruido a 2 con lo demás en cero: ¿MAE y r? ¿El modelo está mal o la medición es ruidosa?
Ver respuestas sugeridas
- Sesgo ≈ +2, MAE ≈ 2, r ≈ 1: la forma se conserva, el nivel se corre. r no ve niveles, solo formas: por eso nunca va sola.
- La simulada persigue con 2 pasos de retraso; r cae a ~0,8 y el MAE sube. Delata retardo no modelado u orden de eventos erróneo.
- MAE ≈ 1,6, r ≈ 0,9: el modelo es correcto pero la medición es ruidosa. Pedir MAE menor que el ruido es pedir imposibles (Tema 10).
07 · Comprensión
Confusiones frecuentes
«r alta = modelo validado»
r mide forma, no nivel. Con sesgo +5 y r = 0,99 el modelo persigue perfecto y erra siempre: se recalibra, no se festeja.
«MAE bajo = sin desfase»
Un desfase de 1 paso en una serie suave da MAE bajo y r alta. Solo la serie temporal lo muestra: hay que mirarla.
«Un gráfico alcanza»
Cada vista es ciega a algo: la serie esconde escala, la dispersión esconde tiempo, Bland-Altman esconde orden. Las tres, siempre.
«Bland-Altman es para medicina»
Es para cualquier acuerdo entre dos métodos que miden lo mismo: real vs. simulado es exactamente ese caso.
08 · Práctica guiada
Ejercicios con Python
Ejercicio 1: forma perfecta, nivel corrido
Calculá el trío y dictaminá: ¿se tira o se recalibra?
real = [10, 11, 12, 13]
sim = [12, 13, 14, 15]
err = [s-r for s, r in zip(sim, real)]
print("sesgo", sum(err)/len(err), "MAE", sum(abs(e) for e in err)/len(err))
print("r = 1.0 (forma idéntica) -> recalibrar -2, no tirar")
Ver solución razonada
Sesgo +2, MAE 2, r = 1: el modelo es un traductor perfecto corrido. Se resta 2 (recalibración) y queda perfecto. Tirarlo sería desperdiciar estructura buena.
Ejercicio 2: desfase que el MAE disimula
¿Qué muestra la serie que el MAE 0,5 esconde?
real = [10, 12, 14, 16]
sim = [10, 10, 12, 14] # persigue con 1 paso
mae = sum(abs(s-r) for s, r in zip(sim, real))/len(real)
print("MAE", mae, "pero siempre llega tarde: retardo no modelado")
Ver solución
MAE 1,0 moderado pero patrón sistemático: siempre tarde. El número promedia; la serie revela el retraso. Hay que modelar el retardo, no calibrar el nivel.
Ejercicio 3: límites de acuerdo
Calculá la banda donde cae el 95% de los errores.
Ver una posible respuesta
import math
err = [0, 1, 0, -1, 0, 1, 0, 0]
m = sum(err)/len(err)
de = math.sqrt(sum((e-m)**2 for e in err)/len(err))
print(f"sesgo {m:.2f} ± {2*de:.2f} -> [{m-2*de:.2f}, {m+2*de:.2f}]")
Banda ≈ [−1,42, +1,67]: el acuerdo es ±1,5 litros al 95%. Si el uso pide ±0,5, no valida aunque el sesgo sea chico.
09 · Síntesis
Ideas para recordar
- Tres vistas: serie (desfase), dispersión (sesgo/varianza), Bland-Altman (escala del error).
- Tres números: sesgo (hacia dónde), MAE (cuánto), r (forma). Siempre juntos y con n.
- r alta + MAE alto = recalibrar nivel; r baja = problema de forma o retardo.
- Misma escala en ambos ejes: el gráfico honesto no achica sesgos.
- Lo que revelan los gráficos se confirma con tests formales (Temas 12–17).
En el próximo tema formalizaremos el «¿encaja?» con la bondad de ajuste.