Probabilidad y Estadística · Tema 04

Eventos

Resultados, conjuntos y operaciones para describir lo que observamos: cómo agrupar resultados en eventos y combinarlos con unión, intersección y complemento.

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.

Aᶜ

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ᶜ).

Eventos con un dado, Ω = {1,…,6}.
Evento en palabrasComo conjuntoTipo
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

Resultado ω∈Evento A→Frecuencia de A
  1. 1
    Cola.

    A = «espera mayor a 10 min». B = «abandona». A ∩ B = «esperó mucho y abandonó».

  2. 2
    Servidor.

    A = «latencia menor a 2 s». Aᶜ = «lento». Se mide disponibilidad como 1 − P(lento).

  3. 3
    Ventas.

    A = «compra». B = «se suscribe». A ∪ B = «convirtió de alguna forma».

  4. 4
    Inventario.

    A = «quiebre». Son excluyentes por día: «quiebre» y «sobrante mayor a 20» no se mezclan.

  5. 5
    Juego.

    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.

EXPERIMENTO 04

Eventos con dos dados

A = {suma ≥ k} · B = {doble}

Los resultados numéricos aparecen debajo.
Frec. A (suma ≥ k)0,000
Frec. B (doble)0,000
Frec. A ∩ B0,000
Teóricas A / B / ∩0,000

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

  1. Con k = 5 y N = 60, ¿qué tan lejos está la frecuencia de la teoría? ¿Y con N = 3000?
  2. Subí k a 12. ¿Qué le pasa a A y a A ∩ B? ¿Por qué B no cambia?
  3. ¿A y B son excluyentes? Mostrá un resultado que esté en ambos.
Ver respuestas sugeridas
  1. Con 60 hay desvíos de centésimas; con 3000 la barra simulada casi calca la teórica.
  2. 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.
  3. 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 es and, complemento es not.
  • La intersección nunca supera a sus partes; la unión necesita restar el solapamiento.
  • En Python: set con &, |, - 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.