Prob-02 — Conditional probability & Bayes

El teorema de Bayes es el corazón de una enorme parte del ML: clasificadores Naive Bayes, inferencia bayesiana, y la interpretación misma de "dado los datos, ¿qué modelo es más probable?" (que lleva directo a MAP en Prob-07). Entender $P(\text{clase}\mid\text{features})$ es entender qué hace un clasificador.

Why this matters for ML

El teorema de Bayes es el corazón de una enorme parte del ML: clasificadores Naive Bayes, inferencia bayesiana, y la interpretación misma de "dado los datos, ¿qué modelo es más probable?" (que lleva directo a MAP en Prob-07). Entender P(clasefeatures)P(\text{clase}\mid\text{features}) es entender qué hace un clasificador.

Concepts covered

  • Conditional probability P(AB)P(A\mid B)
  • Multiplication rule y chain rule de probabilidad
  • Independence
  • Law of total probability
  • Bayes' theorem
  • Prior, likelihood, posterior

Intuition first

🎬 3Blue1Brown "Bayes theorem" y Stat 110 Lectures 3–4. Idea: condicionar es "reducir el universo" al evento que ya sabes que ocurrió.

Theory & key results

Conditional probability: la probabilidad de AA dado que BB ocurrió: P(AB)=P(AB)P(B),P(B)>0.P(A\mid B) = \frac{P(A\cap B)}{P(B)},\quad P(B)>0. Reescribiendo: multiplication rule P(AB)=P(AB)P(B)P(A\cap B)=P(A\mid B),P(B).

Independence: AA y BB son independientes si saber uno no cambia el otro: P(AB)=P(A)P(A\mid B)=P(A), equivalentemente P(AB)=P(A)P(B)P(A\cap B)=P(A)P(B). (Ojo: independencia ≠ mutuamente excluyentes.)

Law of total probability: si {Bi}{B_i} particiona Ω\Omega, P(A)=iP(ABi)P(Bi).P(A)=\sum_i P(A\mid B_i),P(B_i). Es "promediar sobre todos los escenarios posibles".

Bayes' theorem: P(BA)=P(AB)P(B)P(A)\boxed{,P(B\mid A) = \frac{P(A\mid B),P(B)}{P(A)},} con P(A)=iP(ABi)P(Bi)P(A)=\sum_i P(A\mid B_i)P(B_i) (total probability) en el denominador. Nombres (fundamentales en ML):

  • P(B)P(B) = prior (creencia antes de ver datos),
  • P(AB)P(A\mid B) = likelihood (qué tan bien el modelo explica los datos),
  • P(BA)P(B\mid A) = posterior (creencia actualizada tras ver datos),
  • P(A)P(A) = evidence (normalizador).

En ML: P(clasedatos)P(datosclase)P(clase)P(\text{clase}\mid\text{datos}) \propto P(\text{datos}\mid\text{clase}),P(\text{clase}).

Worked example (el clásico test médico)

Enfermedad con prevalencia P(D)=1%P(D)=1%. Test con sensibilidad P(+D)=99%P(+\mid D)=99% y falsos positivos P(+Dc)=5%P(+\mid D^c)=5%. Si das positivo, ¿probabilidad real de estar enfermo? P(+)=0.99(0.01)+0.05(0.99)=0.0099+0.0495=0.0594.P(+)=0.99(0.01)+0.05(0.99)=0.0099+0.0495=0.0594. P(D+)=0.990.010.05940.167.P(D\mid +)=\frac{0.99\cdot0.01}{0.0594}\approx0.167. ¡Solo ~17%! La intuición falla porque la enfermedad es rara (el prior domina). Lección central de Bayes para ML.

Notebook exercises (by hand)

  1. P(AB)P(A\mid B) si P(AB)=0.12P(A\cap B)=0.12 y P(B)=0.3P(B)=0.3.
  2. Dos monedas justas: P(2 carasal menos 1 cara)P(\text{2 caras}\mid \text{al menos 1 cara}).
  3. Rehaz el test médico con prevalencia 10%10%; compara el posterior.
  4. Bolsa A (2 rojas, 3 azules), bolsa B (4 rojas, 1 azul). Eliges bolsa al azar y sacas roja: ¿P(era bolsa Broja)P(\text{era bolsa B}\mid\text{roja})?
  5. Muestra que si A,BA,B independientes, entonces A,BcA, B^c también.
  6. Escribe Bayes en la forma posteriorlikelihood×prior\text{posterior}\propto\text{likelihood}\times\text{prior} y explica cada término en un clasificador de spam.

Python lab

import numpy as np

# test médico con Bayes
def posterior(prior, sens, fpr):
    p_pos = sens*prior + fpr*(1-prior)
    return sens*prior / p_pos

for prev in [0.01, 0.10, 0.50]:
    print(f"prevalencia {prev}: P(D|+) = {posterior(prev, 0.99, 0.05):.3f}")

# verifica por simulación
rng = np.random.default_rng(0); n = 2_000_000
sick = rng.random(n) < 0.01
test_pos = np.where(sick, rng.random(n) < 0.99, rng.random(n) < 0.05)
print("MC P(D|+):", sick[test_pos].mean())     # ~0.167

Examen final 📝

Intenta cada nivel antes de abrir las soluciones.

🟡 Medio

  1. P(AB)P(A\mid B) si P(AB)=0.15P(A\cap B)=0.15, P(B)=0.5P(B)=0.5.
  2. Dos dados: P(suma=8primer dado=5)P(\text{suma}=8\mid \text{primer dado}=5).

🟠 Medio-difícil

  1. Clasificador de spam: P(spam)=0.4P(\text{spam})=0.4, P("gratis"spam)=0.6P(\text{"gratis"}\mid\text{spam})=0.6, P("gratis"no spam)=0.1P(\text{"gratis"}\mid\text{no spam})=0.1. Si un correo contiene "gratis", P(spam"gratis")P(\text{spam}\mid\text{"gratis"}).
  2. Demuestra que si AA y BB son independientes, entonces AcA^c y BB también lo son.

🔴 Difícil

  1. Deriva el clasificador Naive Bayes para dos features: muestra que P(clasex1,x2)P(clase)P(x1clase)P(x2clase)P(\text{clase}\mid x_1,x_2)\propto P(\text{clase})P(x_1\mid\text{clase})P(x_2\mid\text{clase}) y explica qué suposición ("naive") permite factorizar la likelihood.
  2. En el test médico del módulo, muestra cómo cambia el posterior si aplicas el test dos veces (ambos positivos, tests condicionalmente independientes dada la enfermedad). Calcula P(D++)P(D\mid ++) con prevalencia 1%, sensibilidad 99%, FPR 5%.
✅ Soluciones
  1. 0.15/0.5=0.30.15/0.5=0.3.
  2. Primer dado 5 ⇒ suma 8 requiere segundo=3; P=1/6P=1/6.
  3. P("gratis")=0.6(0.4)+0.1(0.6)=0.24+0.06=0.30P(\text{"gratis"})=0.6(0.4)+0.1(0.6)=0.24+0.06=0.30. P(spam"gratis")=0.240.30=0.8P(\text{spam}\mid\text{"gratis"})=\frac{0.24}{0.30}=0.8.
  4. P(AcB)=P(B)P(AB)=P(B)P(A)P(B)=P(B)(1P(A))=P(Ac)P(B)P(A^c\cap B)=P(B)-P(A\cap B)=P(B)-P(A)P(B)=P(B)(1-P(A))=P(A^c)P(B) ⇒ independientes.
  5. Por Bayes P(cx1,x2)P(x1,x2c)P(c)P(c\mid x_1,x_2)\propto P(x_1,x_2\mid c)P(c). La suposición naive es que las features son condicionalmente independientes dada la clase: P(x1,x2c)=P(x1c)P(x2c)P(x_1,x_2\mid c)=P(x_1\mid c)P(x_2\mid c). Sustituyendo da la factorización. (Suele ser falsa pero funciona sorprendentemente bien.)
  6. Actualiza secuencialmente: tras el 1er +, posterior 0.167\approx0.167 (del módulo). Úsalo como nuevo prior: P(D++)=0.990.1670.990.167+0.050.833=0.16530.1653+0.04170.799P(D\mid++)=\frac{0.99\cdot0.167}{0.99\cdot0.167+0.05\cdot0.833}=\frac{0.1653}{0.1653+0.0417}\approx0.799. Dos positivos suben de 17% a ~80%.