01 · Punto de partida
Del resultado suelto a «lo que me interesa»
Un resultado ω es puntual: «salió 4». Un evento es una pregunta sobre ese resultado: «¿salió par?», «¿la espera superó 10 min?», «¿hubo quiebre?». En simulación casi nunca contamos resultados puntuales: contamos eventos.
Los eventos son conjuntos: subconjuntos del espacio muestral Ω. Eso nos deja usar toda la lógica de conjuntos (y, o, no) para construir métricas: «rápido y sin error», «compra o se suscribe», «falla A o falla B».
- ¿Qué conjunto de resultados cuenta como éxito?
- ¿Cómo combino dos condiciones sin contar dos veces?
- ¿Qué significa que dos eventos sean incompatibles?
- ¿Cómo paso del evento en palabras al código que lo cuenta?
02 · Definición
Tipos de eventos
Simple y compuesto
Simple: un solo resultado, {6}. Compuesto: varios, {2, 4, 6} = «par». Casi todo lo útil es compuesto.
Imposible y seguro
∅ nunca ocurre («sacar 7 en un dado»); Ω siempre ocurre («sacar 1 a 6»). Marcan el 0 y el 1 de probabilidad.
Complemento
Lo contrario: Aᶜ = «no ocurre A». Si P(A) es difícil, a veces P(Aᶜ) es fácil y P(A) = 1 − P(Aᶜ).
| Evento en palabras | Como conjunto | Tipo |
|---|---|---|
| Sale 6 | {6} | Simple |
| Sale par | {2, 4, 6} | Compuesto |
| Sale 7 | ∅ | Imposible |
| No sale par | {1, 3, 5} | Complemento |
03 · Operaciones
Combinar eventos sin equivocarse
O lógico
Unión: A ∪ B
Ocurre al menos uno. En código es or. Cuidado: si se solapan, no se suman directo (se restan los contados dos veces).
Y lógico
Intersección: A ∩ B
Ocurren ambos a la vez. En código es and. Es el filtro más exigente: «rápido y sin error».
- Complemento Aᶜ
not A. «No hubo quiebre», «no superó 10 min». P(Aᶜ) = 1 − P(A).- Diferencia A − B
- Ocurre A pero no B. «Pagó pero no se suscribió».
- Mutuamente excluyentes
- No pueden ocurrir juntos: A ∩ B = ∅. «Sale 1» y «sale 6». Sus probabilidades sí se suman.
- De Morgan
- «No (A o B)» = «ni A ni B». Útil para negar condiciones compuestas sin enredarse.
04 · Ejemplos
Eventos que vas a contar en tus simuladores
- 1Cola.
A = «espera mayor a 10 min». B = «abandona». A ∩ B = «esperó mucho y abandonó».
- 2Servidor.
A = «latencia menor a 2 s». Aᶜ = «lento». Se mide disponibilidad como 1 − P(lento).
- 3Ventas.
A = «compra». B = «se suscribe». A ∪ B = «convirtió de alguna forma».
- 4Inventario.
A = «quiebre». Son excluyentes por día: «quiebre» y «sobrante mayor a 20» no se mezclan.
- 5Juego.
A = «crítico». B = «esquiva». A − B = «crítico que impacta».
05 · Representación en Python
Eventos como condiciones y conjuntos
Un evento es una función que devuelve True/False o un set de resultados. Contar es sumar booleanos:
Python en tu navegador. Cambiá las condiciones y observá cómo cambian las frecuencias.
import random
random.seed(3)
dados = [random.randint(1, 6) for _ in range(12)]
par = {2, 4, 6}
es_par = [d in par for d in dados]
print(dados)
print("pares:", sum(es_par), "de", len(dados))
Consejo: in pregunta pertenencia a un conjunto: es literalmente «ω ∈ A».
Combinar con y / o / no
import random
random.seed(6)
# Dos dados: A = suma >= 9, B = doble
def tirar():
return random.randint(1, 6), random.randint(1, 6)
tiradas = [tirar() for _ in range(20)]
A = [d1 + d2 >= 9 for d1, d2 in tiradas]
B = [d1 == d2 for d1, d2 in tiradas]
print("A:", sum(A), "| B:", sum(B), "| ambos:", sum(a and b for a, b in zip(A, B)))
06 · Exploración
Laboratorio: unión e intersección con dos dados
Tiramos dos dados N veces. A = «suma ≥ umbral», B = «doble», A ∩ B = «doble con suma alta». Las barras claras son la probabilidad teórica (36 casos); las sólidas, la frecuencia simulada. Movete el umbral y mirá cómo A se achica pero B queda fijo.
Eventos con dos dados
A = {suma ≥ k} · B = {doble}
Con N grande, las barras sólidas se pegan a las claras.
Tres grupos de barras: A, B y su intersección. Cada grupo muestra la probabilidad exacta y la frecuencia promedio de las réplicas simuladas.
Preguntas para explorar
- Con k = 5 y N = 60, ¿qué tan lejos está la frecuencia de la teoría? ¿Y con N = 3000?
- Subí k a 12. ¿Qué le pasa a A y a A ∩ B? ¿Por qué B no cambia?
- ¿A y B son excluyentes? Mostrá un resultado que esté en ambos.
Ver respuestas sugeridas
- Con 60 hay desvíos de centésimas; con 3000 la barra simulada casi calca la teórica.
- A se achica (solo sumas 12) y la intersección queda en {6,6} = 1/36. B siempre es 6/36 porque no depende del umbral.
- No: (5,5) o (6,6) están en ambos si k ≤ 10. Por eso P(A ∪ B) necesita restar la intersección.
07 · Comprensión
Confusiones frecuentes
«Evento y resultado son lo mismo»
No: el resultado es un punto, el evento es un conjunto. «Salió 4» vs «salió par». La probabilidad vive en los eventos.
«Y es más probable que cada parte»
Al revés: A ∩ B ⊆ A, así que P(A ∩ B) ≤ P(A). Exigir dos cosas a la vez nunca aumenta la chance.
«O siempre suma»
Solo si son excluyentes. Si se solapan, hay que restar la intersección para no contar dos veces.
«El complemento es lo que sobra sin interés»
El complemento suele ser la métrica del negocio: disponibilidad = no falla, cumplimiento = no atrasa.
08 · Práctica guiada
Ejercicios con Python
Ejercicio 1: par o mayor a 4
Con un dado, definí A = «par», B = «mayor a 4». Calculá por enumeración P(A), P(B), P(A ∩ B) y P(A ∪ B).
omega = {1, 2, 3, 4, 5, 6}
A = {2, 4, 6}
B = {5, 6}
print("P(A):", len(A) / len(omega))
print("P(B):", len(B) / len(omega))
print("P(A∩B):", len(A & B) / len(omega))
print("P(A∪B):", len(A | B) / len(omega))
Ver solución razonada
P(A) = 3/6, P(B) = 2/6, intersección {6} = 1/6, unión {2,4,5,6} = 4/6. Verificá: 3/6 + 2/6 − 1/6 = 4/6.
Ejercicio 2: verificar con réplicas
Estimá P(suma ≥ 9 con dos dados) con 5000 tiradas y compará con el valor exacto 10/36.
import random
random.seed(10)
N = 5000
exitos = 0
for _ in range(N):
if random.randint(1, 6) + random.randint(1, 6) >= 9:
exitos += 1
print("frec:", round(exitos / N, 4), "| exacta:", round(10 / 36, 4))
Ver solución
La frecuencia cae cerca de 0,2778. Con N = 5000 el error típico es de milésimas: el experimento confirma la enumeración.
Ejercicio 3: De Morgan en código
Verificá que «no (A o B)» equivale a «ni A ni B» contando las tiradas donde no sale ni par ni mayor a 4.
Ver una posible respuesta
omega = [1, 2, 3, 4, 5, 6]
A = {2, 4, 6}
B = {5, 6}
izq = [x for x in omega if not (x in A or x in B)]
der = [x for x in omega if x not in A and x not in B]
print(izq, der, izq == der)
Ambas dan [1, 3]: «ni par ni mayor a 4». Negar un «o» lo convierte en «y» de negaciones, truco útil para filtros complejos.
09 · Síntesis
Ideas para recordar
- Un evento es un subconjunto de Ω: convierte resultados en preguntas contables.
- Unión es
or, intersección esand, complemento esnot. - La intersección nunca supera a sus partes; la unión necesita restar el solapamiento.
- En Python:
setcon&,|,-o condiciones booleanas que se suman. - Toda métrica de simulación es la frecuencia de un evento bien definido.
En el próximo tema pondremos número a esos eventos con probabilidad aplicada a simulaciones.