01 · Punto de partida
La duda entra y sale transformada
Si el costo es 100 ± 15 y la utilidad es 150 − costo, la utilidad es 50 ± 15: el modelo trasladó la media y conservó el ancho. Si Y = 3·X, el ancho se triplica. Monte Carlo propaga distribuciones enteras, no solo ±.
Sensibilidad (tema 33) pregunta qué mueve; propagación muestra cómo se deforma.
- ¿Qué distribución entra?
- ¿El modelo la estira, la encoge o la tuerce?
- ¿Qué forma sale?
- ¿La salida sigue normal?
02 · Definición
Estirar, encoger, torcer
Lineal
Y = a·X + b: media a·μ + b, desvío |a|·σ. La forma se conserva.
No lineal
Y = X², mín(Q,D): la forma cambia, aparecen picos y colas. Solo MC la captura.
Histograma
La salida es una distribución: media, riesgo y cuantiles juntos.
| Modelo | Entrada | Salida |
|---|---|---|
| U = 150 − C | C ~ N(100, 15) | U ~ N(50, 15) |
| Y = 3X − 50 | X ~ N(100, 10) | Y ~ N(250, 30) |
| G = 5·mín(Q,D) − 2Q | D discreta | Discreta recortada, no normal |
03 · Método
- 1Muestrear la entrada.
N valores de F_X con su σ realista.
- 2Aplicar g a cada uno.
Sin promediar antes: la no linealidad vive en cada Yᵢ.
- 3Leer la salida.
Histograma, media, s, P y cuantiles. La distribución decide.
- Lineal exacta
- Y = aX + b propaga μ y σ con fórmula. MC la verifica en 1 línea.
- No lineal
- Promediar X y luego aplicar g sesga (Jensen). Siempre g primero, promedio después.
- Entradas varias
- Se propagan juntas como escenario: la salida mezcla todas las dudas.
04 · Ejemplos
- 1Utilidad lineal.
Costo ±15 ⇒ utilidad ±15. Traslación pura.
- 2Escala ×3.
X ±10 ⇒ Y ±30. El modelo amplifica.
- 3Mínimo.
mín(100, D) recorta la cola alta: la salida se apila en 100.
05 · Representación en Python
Propagar es mapear la lista
Python en tu navegador. Una línea transforma la duda.
import random
import statistics
N = 10000
costos = [random.gauss(100, 15) for _ in range(N)]
utils = [150 - c for c in costos]
print("media:", round(sum(utils)/N, 1), "s:", round(statistics.pstdev(utils), 1))
# error clásico: g del promedio vs promedio de g (con min)
Ds = [random.choices([80, 100, 120], weights=[30, 40, 30])[0] for _ in range(N)]
print("bien:", sum(min(100, D) for D in Ds)/N)
print("mal:", min(100, sum(Ds)/N))
06 · Exploración
Laboratorio: la campana viaja intacta
Costo ~ N(μ, σ) y utilidad = 150 − costo. Mové μ (traslada) y σ (ensancha) y mirá el histograma de Y con su curva teórica.
De X a Y sin fórmulas
Y = 150 − X, X ~ N(μ, σ)
Tocá «Propagar» para trasladar la duda.
Mover μ desplaza sin deformar; mover σ ensancha. Lineal conserva la campana.
Preguntas para explorar
- Con μ = 110, ¿la media de Y es 40?
- Con σ = 30, ¿s de Y también es 30?
- ¿Qué pasaría con Y = mín(100, D)?
Ver respuestas sugeridas
- Sí: 150 − 110. Traslación exacta.
- Sí: |−1|·σ. El signo menos espeja, no achica.
- La campana se recorta y apila: deja de ser normal. Solo MC lo muestra.
07 · Comprensión
Confusiones frecuentes
«Propago la media»
Se propagan muestras. Con no linealidad, g(media) ≠ media(g) (Jensen).
«La salida siempre es normal»
Solo en lineales de normales. Mínimos, máximos y productos la deforman.
«Más σ de entrada siempre es peor»
Depende de g: si g encoge (|a| < 1), la salida tiembla menos que la entrada.
«Sensibilidad y propagación son lo mismo»
Sensibilidad ordena causas; propagación describe el efecto total distribuido.
08 · Práctica guiada
Ejercicios con Python
Ejercicio 1: lineal exacta
Y = 3X − 50 con X ~ N(100, 10). Verificá media 250 y s 30.
import random
import statistics
ys = [3*random.gauss(100, 10)-50 for _ in range(8000)]
print(round(sum(ys)/len(ys), 1), round(statistics.pstdev(ys), 1))
Ver solución razonada
~250 y ~30: a = 3 triplica σ; b = −50 solo traslada.
Ejercicio 2: Jensen a mano
Con D en {80,100,120} y Q = 100, compará mín(media) vs media(mín).
import random
Ds = [random.choices([80,100,120], weights=[30,40,30])[0] for _ in range(8000)]
print("mal:", min(100, sum(Ds)/len(Ds)))
print("bien:", sum(min(100, D) for D in Ds)/len(Ds))
Ver solución
Mal: 100. Bien: ~94. El mínimo recorta: propagar la media miente.
Ejercicio 3: dos entradas juntas
U = P·D − C con P = 5, D discreta y C ~ N(200, 10). Propagá el par.
Ver una posible respuesta
import random
import statistics
us = [5*random.choices([80,100,120], weights=[30,40,30])[0] - random.gauss(200, 10) for _ in range(8000)]
print(round(sum(us)/len(us), 1), round(statistics.pstdev(us), 1))
~300 con s combinado: la salida mezcla ambas dudas en un histograma.
09 · Síntesis
Ideas para recordar
- Propagar = mapear muestras: Yᵢ = g(Xᵢ), luego resumir.
- Lineal conserva forma: media y σ viajan con a y b.
- No lineal deforma: mínimos apilan, productos sesgan.
- Nunca g(promedio): siempre promedio(g).
- La salida es distribución: histograma + media + riesgo.
En el próximo tema usaremos la distribución para decidir bajo riesgo: la simulación de riesgo.