Modelos y Simulación · Tema 40

Análisis de sensibilidad

Qué parámetros realmente mueven la aguja: ordenar lo importante antes de decidir.

01 · Punto de partida

De muchos parámetros a pocos importantes

En el Tema 39 comparamos escenarios: pico contra refuerzo. Pero cada escenario mueve parámetros y no todos pesan igual. Subir la demanda 1 punto puede sumar 3 de espera; abrir una caja puede restar 4; cambiar el ruido de la semilla apenas mueve decimales. Sin sensibilidad, se discute todo con la misma angustia.

El análisis de sensibilidad mueve cada parámetro en su rango plausible, mide cuánto cambia la respuesta y ordena el ranking. Dice dónde calibrar fino (Tema 37), qué vigilar en la realidad y qué ignorar sin culpa.

  • ¿Qué parámetros se mueven y en qué rango?
  • ¿Cuánto cambia la respuesta en cada rango?
  • ¿Cuál manda y cuál apenas molesta?
  • ¿La decisión cambia dentro del rango o es robusta?

02 · Vocabulario mínimo

Parámetro, rango y efecto

◈

Parámetro

Lo que se mueve a propósito: demanda, cajeros, tasa de servicio.

↔

Rango

Cuánto se mueve: el intervalo plausible declarado, no cualquier valor.

±

Efecto

Cuánto cambia la respuesta entre los extremos del rango.

Métodos de menor a mayor costo.
MétodoQué se haceQué da
Uno a la vezMover un parámetro, fijos los demásEfecto individual y ranking
TornadoBarras de efectos ordenadas de mayor a menorEl mapa de lo importante
Grueso × finoBarrido grueso y lupa donde hay saltoUmbrales y rupturas (Tema 39)
Chequeo robusto¿La decisión cambia en el rango?Si hay que decidir ya o medir más

03 · Tres pasos

Variar, medir, ordenar

  1. 1
    Variar.

    Un parámetro a la vez entre sus extremos plausibles, con las mismas semillas.

  2. 2
    Medir.

    Efecto = respuesta(máx) − respuesta(mín). En unidades reales, no en «% misterioso».

  3. 3
    Ordenar.

    Tornado de mayor a menor: lo de arriba se calibra y se vigila; lo de abajo se fija y se olvida.

Calibración

Ajusta valores

Busca el número que empata los datos (Tema 37). Pregunta «¿cuánto vale?».

Sensibilidad

Ordena importancias

Mide qué parámetro mueve la respuesta. Pregunta «¿qué importa?» y guía dónde calibrar.

Sensibilidad
Cambio de la respuesta ante cambios del parámetro en su rango.
Efecto
Diferencia de respuesta entre extremos del rango.
Tornado
Gráfico de efectos ordenados de mayor a menor.
Robustez
La decisión no cambia dentro del rango estudiado.

04 · Protocolo

El ranking en cinco pasos

Fijar base→Variar→Medir→Ordenar→Decidir

Se fija la base del Tema 39, se varía de a un parámetro con iguales semillas, se mide el efecto, se ordena el tornado y se decide qué calibrar, qué vigilar y qué fijar. El Tema 41 exigirá repetirlo.

05 · En Python

Efectos uno a la vez

El efecto es una resta honesta: respuesta en el máximo menos respuesta en el mínimo, con las mismas semillas.

Python en tu navegador. Sensibilidad con funciones y restas, sin librerías externas.

def espera(demanda, cajeros):
    return max(0, 2 + 1.2 * (demanda - 2.5 * cajeros))

def efecto(base, parametro, bajo, alto):
    antes = dict(base)
    lo = espera(**{**antes, parametro: bajo})
    hi = espera(**{**antes, parametro: alto})
    return round(abs(hi - lo), 2)


base = {"demanda": 5, "cajeros": 1}
print("demanda 4–6:", efecto(base, "demanda", 4, 6))
print("cajeros 1–2:", efecto(base, "cajeros", 1, 2))

Ordenar el tornado

Los efectos se juntan en lista y se ordenan: lo de arriba manda.

efectos = [("demanda", 2.4), ("cajeros", 3.0), ("ruido", 0.3)]
tornado = sorted(efectos, key=lambda par: par[1], reverse=True)
for nombre, fx in tornado:
    print(nombre, fx)

06 · Exploración

Laboratorio: el tornado del banco

Tres candidatos a mover la espera: demanda (4–6), cajeros (1–2) y semilla (ruido puro). El laboratorio mide cada efecto con las mismas 20 réplicas y ordena el tornado. Movete la base y mirá si el ranking cambia.

EXPERIMENTO 40

Quién manda

efecto = |máx − mín|

Los resultados numéricos aparecen debajo.
Efecto demanda0
Efecto cajeros0
Efecto ruido0
MandaCajeros

Con base 5 y 1 cajero, abrir la caja mueve más que la demanda.

Barras horizontales ordenadas: efecto de cada parámetro en espera. El ruido (semillas) es el testigo de lo irrelevante.

Preguntas para explorar

  1. Con base 5 y 1 cajero, ¿qué efecto es mayor: demanda 4–6 o cajeros 1–2? ¿Por cuánto?
  2. Subí la base a 7. ¿El ranking se mantiene o la demanda pasa al frente?
  3. ¿Por qué el efecto del ruido es chico? ¿Qué pasaría si fuera el mayor de los tres?
Ver respuestas sugeridas
  1. Cajeros (~3,0) le gana a demanda (~2,4): abrir la caja mueve más la espera en esa zona.
  2. Se achica la brecha o se invierte: cerca de la ruptura, cada cliente extra pesa muchísimo.
  3. Porque promedia 20 réplicas con iguales semillas. Si mandara el ruido, faltarían réplicas o el modelo sería puro azar.

07 · Comprensión

Confusiones frecuentes

«Efecto grande es parámetro verdadero»

No: es parámetro influyente en ese rango. La verdad del valor la da la calibración (Tema 37), no el tamaño del efecto.

«El ranking vale para todo el mapa»

Vale cerca de la base estudiada. En otra zona (cerca de la ruptura) el ranking puede invertirse.

«Lo poco sensible se borra del modelo»

Se fija en un valor razonable y se declara, no se borra en silencio: mañana puede volverse sensible.

«Sensibilidad es lo mismo que incertidumbre»

Sensibilidad pregunta qué mueve; incertidumbre pregunta cuánto sabemos. Un parámetro puede mover mucho y estar bien medido.

08 · Práctica guiada

Ejercicios con Python

Ejercicio 1: medir un efecto

Medí el efecto de la demanda 4–6 con 1 cajero fijo.

def espera(demanda, cajeros):
    return max(0, 2 + 1.2 * (demanda - 2.5 * cajeros))

print(abs(espera(6, 1) - espera(4, 1)))
Ver solución razonada

Da 2.4 de espera: cada punto de demanda suma 1,2 y el rango de 2 puntos mueve 2,4.

Ejercicio 2: ordenar el tornado

Ordená estos tres efectos de mayor a menor.

efectos = [("demanda", 2.4), ("cajeros", 3.0), ("ruido", 0.3)]
for nombre, fx in sorted(efectos, key=lambda par: par[1], reverse=True):
    print(nombre, fx)
Ver solución

Queda cajeros 3.0, demanda 2.4, ruido 0.3: el ruido es un orden de magnitud menor, buena señal.

Ejercicio 3: chequear robustez

La decisión «abrir en pico» vale si el refuerzo baja de 8 en todo el rango de demanda 7–9. ¿Es robusta?

Ver una posible respuesta
def espera(demanda, cajeros):
    return max(0, 2 + 1.2 * (demanda - 2.5 * cajeros))

vale = all(espera(d, 2) < 8 for d in [7, 8, 9])
print("robusta" if vale else "frágil: reevaluar")

Imprime robusta en este modelo lineal: el refuerzo salva todo el rango. Con ruptura no lineal, podría dar frágil.

09 · Síntesis

Ideas para recordar

  • Sensibilidad ordena: cuánto mueve cada parámetro en su rango plausible.
  • Efecto en unidades reales y con rango declarado, o no significa nada.
  • El tornado manda qué calibrar, qué vigilar y qué fijar.
  • El ranking vale cerca de la base; cerca de la ruptura puede cambiar.
  • En Python: efecto como resta, sorted para el tornado, chequeo de robustez con all.

En el próximo tema cerraremos el círculo de la confianza: la reproducibilidad.