01 · Punto de partida
La media no quiebra, la cola sí
Dos Q con media 290 pueden tener P(pérdida) 0% o 15%. Riesgo es la distribución de lo malo: probabilidad de perder, percentil 5% (VaR) y pérdida media si se pierde (CVaR).
Monte Carlo la entrega gratis: las mismas réplicas que dan la media dan el riesgo.
- ¿Qué es perder en mi problema (< 0, < meta)?
- ¿Qué P(pérdida) tolero?
- ¿Qué VaR me deja dormir?
- ¿Media o riesgo manda la decisión?
02 · Definición
Tres medidas del peligro
P(pérdida)
Fracción bajo el umbral: casos/N. Simple y directa.
VaR 5%
Percentil 5: «el 95% gana más que esto». El colchón mínimo.
CVaR
Media de lo que cae bajo el VaR: «si se pone feo, pierdo esto en promedio».
| Q | Media | P(<0) | VaR 5% |
|---|---|---|---|
| 100 seguro | 290 | 0% | 200 |
| 140 jugado | 295 | 12% | −40 |
03 · Método
- 1Simular N ganancias.
Guardar las N Yᵢ, no solo la media. N ≥ 10 000 para colas.
- 2Ordenar y cortar.
P = contar bajo umbral; VaR = percentil 5; CVaR = media de esos.
- 3Decidir con regla.
«Elijo mayor media con P < 5% y VaR > 0». Sin regla, el riesgo se ignora.
- Umbral
- Qué es perder: 0, la meta, el costo fijo. Explícito y con unidad.
- N para colas
- VaR 5% con N = 500 usa 25 puntos: ruidoso. Colas piden N grande.
- Media vs riesgo
- La media elige valor; el riesgo veta. Decidir con ambas es gestión, no optimismo.
04 · Ejemplos
- 1Diariero Q = 140.
Media alta, P(pérdida) 12%: el riesgo veta aunque la media tiente.
- 2Proyecto N(50,15).
P(<0) ≈ 0, VaR₅ ≈ 25: dormir tranquilo.
- 3Garantía p = 0,05.
Pierdo 200 el 5%: CVaR = 200. La media 10 esconde el golpe.
05 · Representación en Python
Riesgo en 8 líneas
Python en tu navegador. Una corrida, cuatro respuestas.
import random
N, Q = 10000, 120
gs = []
for _ in range(N):
D = random.choices([80, 100, 120], weights=[30, 40, 30])[0]
gs.append(5*min(Q, D) - 2*Q)
gs.sort()
print("media:", round(sum(gs)/N, 1))
print("P(<0):", round(sum(1 for g in gs if g < 0)/N, 4))
print("VaR5:", gs[int(0.05*N)])
print("CVaR:", round(sum(gs[:int(0.05*N)])/int(0.05*N), 1))
06 · Exploración
Laboratorio: la cola en rojo
Mové Q: el histograma muestra ganancias; lo rojo es pérdida (< 0) y la amarilla el VaR 5%. Q grande sube la media pero engorda la cola.
Media que esconde, cola que avisa
riesgo = P(g < 0) + VaR₅
Tocá «Evaluar» para medir el riesgo.
Barras rojas bajo 0. Si el VaR cae bajo 0, el 5% pierde: la media ya no alcanza para decidir.
Preguntas para explorar
- Con Q = 100, ¿P es 0? ¿Y con Q = 150?
- ¿Qué Q maximiza la media? ¿Y cuál minimiza el riesgo?
- ¿Elegirías media máxima o riesgo acotado?
Ver respuestas sugeridas
- Sí: 0 con Q = 100 en este modelo; ~15% con 150 por sobrante.
- Media ~100–110; riesgo ~80. Típico dilema valor vs seguridad.
- Regla del curso: mayor media con P < 5% y VaR > 0.
07 · Comprensión
Confusiones frecuentes
«VaR es la pérdida máxima»
No: es el percentil 5. El 5% pierde MÁS que el VaR; el CVaR dice cuánto más.
«P = 0 significa sin riesgo»
Con N = 500, P = 0 puede ser suerte. Colas piden N ≥ 10 000.
«La media alta compensa el riesgo»
Solo si podés quebrar varias veces. Una quiebra no se promedia.
«CVaR es lo mismo que VaR»
VaR es el corte; CVaR la media de lo cortado. El golpe real lo da el CVaR.
08 · Práctica guiada
Ejercicios con Python
Ejercicio 1: tablero de Q = 130
Calculá media, P, VaR y CVaR.
import random
N, Q = 10000, 130
gs = sorted(5*min(Q, random.choices([80,100,120], weights=[30,40,30])[0])-2*Q for _ in range(N))
k = int(0.05*N)
print(sum(gs)/N, sum(1 for g in gs if g < 0)/N, gs[k], sum(gs[:k])/k)
Ver solución razonada
Media ~260, P ~8%, VaR negativo: la media tienta, la cola veta.
Ejercicio 2: umbral con meta
P(g < 200) con Q = 100: ¿llega a la meta?
import random
N = 10000
gs = [5*min(100, random.choices([80,100,120], weights=[30,40,30])[0])-200 for _ in range(N)]
print(sum(1 for g in gs if g < 200)/N)
Ver solución
~0,30: el 30% no llega a 200. Riesgo de meta, no de quiebra.
Ejercicio 3: elegir con regla
Elegí entre Q = 90/100/110/120 con regla media máx + P < 5%.
Ver una posible respuesta
import random
def tablero(Q, N=8000):
gs = sorted(5*min(Q, random.choices([80,100,120], weights=[30,40,30])[0])-2*Q for _ in range(N))
return sum(gs)/N, sum(1 for g in gs if g < 0)/N
for Q in [90, 100, 110, 120]:
m, p = tablero(Q)
print(Q, round(m, 1), round(p, 3), "OK" if p < 0.05 else "vetado")
Gana 100–110 entre los OK. La regla decide donde la media sola duda.
09 · Síntesis
Ideas para recordar
- Riesgo = P(umbral) + VaR₅ + CVaR, de las mismas réplicas.
- VaR es percentil; CVaR, media de la cola. P es frecuencia.
- Colas piden N ≥ 10 000: con poco N el 0 es suerte.
- Regla: mayor media con P < 5% y VaR > 0.
- La media propone; el riesgo veta.
En el próximo tema mediremos si algo aguanta: la simulación de confiabilidad.