El Teorema de Bayes y Naive Bayes

1 Teorema de Bayes

El Teorema de Bayes es una herramienta probabilidad que nos permite actualizar la probabilidad de un evento a medida que obtenemos nueva evidencia.

Imagina que quieres averiguar la probabilidad de que algo ocurra (por ejemplo, tener una enfermedad) basándote en una nueva información (como dar positivo en un síntoma o test). El Teorema de Bayes te ayuda a combinar lo que ya sabías antes con los nuevos datos para obtener una conclusión mucho más precisa. Para ello se basa en dos elementos esenciales:

  • Prior (Probabilidad Previa - \(P(A)\)): Tu creencia o conocimiento inicial sobre la probabilidad de que ocurra el evento, antes de conocer la nueva información.
  • Posterior (Probabilidad Posterior - \(P(A \mid B)\)): Tu nueva creencia corregida sobre la probabilidad del evento después de analizar la nueva evidencia.

La fórmula matemática que conecta estos conceptos es:

\[P(A \mid B) = \frac{P(B \mid A) \times P(A)}{P(B)}\]

Bayes no inventó una fórmula nueva, solo reescribió la fórmula de la probabilidad condicional.

La fórmula condicional:

\[P(A \mid B) = \frac{P(A \cap B)}{P(B)}\]

La fórmula de Bayes:

\[P(A \mid B) = \frac{P(B \mid A) \times P(A)}{P(B)}\]

El único cambio está en el numerador. La intersección \(P(A \cap B)\) se puede calcular al revés si nos interesa:

\[P(A \cap B) = P(B \mid A) \times P(A)\]

Bayes simplemente cambió el orden del numerador. Sustituyó \(P(A \cap B)\) por su equivalente desglosado.

Supongamos que analizamos una población con las siguientes condiciones de salud y fiabilidad en los análisis:

  • La prevalencia (Prior): El 2% de la población tiene una enfermedad específica (\(E\)). Por tanto, el 98% está sano (\(E'\)).
  • Sensibilidad del test: Si estás enfermo, el test da positivo (\(P\)) en el 90% de los casos (\(P(P \mid E) = 0.90\)).
  • Tasa de falsos positivos: Si estás sano, el test da positivo por error en el 1% de los casos (\(P(P \mid E') = 0.01\)).

Si te realizas el test y da positivo, ¿cuál es la probabilidad real de que estés enfermo? Es decir, queremos calcular la probabilidad condicional \(P(E \mid P)\).

0.02

0.98

Sensibilidad: 0.90

0.10

Tasa FP: 0.01

0.99

Población

Enfermo (E)
Prevalencia: 2%

Sano (E’)
Prevalencia: 98%

Test Positivo (P)
Verdadero Positivo

Test Negativo (P’)
Falso Negativo

Test Positivo (P)
Falso Positivo

Test Negativo (P’)
Verdadero Negativo

Para conocer el denominador de nuestra fórmula, aplicamos el teorema de la probabilidad total (sumando los positivos reales y los falsos positivos), lo que viene siendo es la probabilidad de dar positivo:

\[P(P) = P(E) \times P(P \mid E) + P(E') \times P(P \mid E')\] \[P(P) = 0.02 \times 0.90 + 0.98 \times 0.01\]\[P(P) = 0.0180 + 0.0098 = 0.0278 \implies 2.78\%\]

Ahora cruzamos los datos para aislar a los enfermos reales dentro del grupo de personas que dieron positivo:

\[P(E \mid P) = \frac{P(P \mid E) \times P(E)}{P(P)}\]\[P(E \mid P) = \frac{0.90 \times 0.02}{0.0278}\] \[P(E \mid P) = \frac{0.0180}{0.0278} \approx 0.6475 \implies 64.75\%\]

Aunque el test es muy fiable (90% de efectividad), si das positivo, tu probabilidad real de estar enfermo es del 64.75% y no del 90%.

  1. \(P(P \mid E)\) → Estar enfermo y dar positivo ¿Cuál es la condición? La condición es que ya estás enfermo. Estás en una sala donde solo hay personas enfermas.¿Qué mide? Mide la calidad del laboratorio médico. Si metemos a 100 personas enfermas, ¿a cuántas detecta el aparato?Tu dato: Es del 90%. El test es excelente encontrando el rastro del virus cuando el cuerpo ya está infectado.
  2. \(P(E \mid P)\) → Dar positivo y estar enfermo ¿Cuál es la condición? La condición es que tienes el papel del positivo en la mano. Estás en una sala con todas las personas que han pitado en el test (donde hay enfermos reales, pero también gente sana por culpa del 1% de error).¿Qué mide? Mide tu realidad como paciente. Te acabas de hacer la prueba, ha dado positivo, y quieres saber si de verdad estás en peligro. Tu dato: Es del 64.7%.

Para ver lo peligroso que es cambiar el orden de un condicional, piensa en esta equivalencia:

Condicional A: La probabilidad de que seas un ser humano sabiendo que eres el Presidente del Gobierno: \[P(\text{Humano} \mid \text{Presidente}) = 100\%\]

(Si eres el presidente, obligatoriamente eres un humano).

Condicional B (Al revés): La probabilidad de que seas el Presidente del Gobierno sabiendo que eres un ser humano:

\[P(\text{Presidente} \mid \text{Humano}) \approx 0.00000002\%\]

(Eres un humano, pero la probabilidad de que seas justamente el que gobierna es casi cero).

El Teorema de Bayes existe única y exclusivamente porque \(P(A \mid B)\) nunca es igual a \(P(B \mid A)\).

2 Naive Bayes

Naive Bayes es un modelo basado en el Teorema de Bayes que busca simplificar el teorema para facilitar la aplicación sin perder eficacia.

El término Naive (Inocente) es una descripción de su arquitectura. El modelo decide ignorar voluntariamente el contexto y la gramática.

Imagina que el filtro de Spam que analiza un correo que dice: “Ganaste la lotería de Nueva York”.

El Teorema de Bayes Puro intentaría buscar en tu base de datos históricos correos que tuvieran exactamente esa combinación de frases y orden. Si nunca ha recibido un correo con esas palabras exactas juntas, la probabilidad se vuelve cero y el filtro falla.

Naive Bayes rompe el correo en una “bolsa de palabras” sueltas: [Ganaste], [lotería], [Nueva], [York]. Calcula la probabilidad de spam de cada una por separado y luego las multiplica. Asume de forma “inocente” que la aparición de “lotería” no tiene nada que ver con que aparezca “Ganaste”.

En el lenguaje humano, las palabras no son independientes. Si aparece la palabra “Buenos”, la probabilidad de que la siguiente sea “Días” es altísima. Naive Bayes ignora esto por completo. Entonces, ¿por qué sigue clasificando el spam con un éxito cercano al 90-95%?

  • No busca redactar, busca clasificar: A Naive Bayes no le importa el orden ni el significado real del correo. Solo necesita saber si la balanza de palabras sospechosas pesa más que la de palabras legítimas.
  • Las correlaciones se cancelan entre sí: Aunque la suposición de independencia es falsa, los errores que comete el algoritmo al analizar las palabras tienden a equilibrarse mutuamente al final de la multiplicación masiva, manteniendo el resultado de la clasificación intacto.
  • Funciona con muy pocos datos: Al no buscar combinaciones exactas de frases, el modelo aprende muy rápido. Con solo ver un par de correos con la palabra “lotería”, ya sabe qué hacer cuando la vuelva a ver, sin importar el resto de la frase.

Imaginemos que nuestro servidor de correo ya ha analizado 100 emails históricos para entrenar al filtro, y tenemos estos datos:

  • Spam (\(S\)): 20 emails
  • No Spam (\(S'\)): 80 emails

Ahora miramos cuántas veces aparecen las palabras “lotería” (\(L\)) y “premio” (\(P\)) dentro de cada grupo por separado:

Palabra En los 20 de Spam En los 80 de No Spam
Lotería (\(L\)) 14 emails 10 emails
Premio (\(P\)) 12 emails 8 emails

Nos llega un correo nuevo a la bandeja de entrada que contiene ambas palabras: “lotería” y “premio”. Queremos calcular la probabilidad de que sea Spam sabiendo que tiene esas dos palabras:

\[P(S \mid L \cap P)\]

Como calcular la probabilidad de que aparezcan “lotería” y “premio” juntas de forma exacta es muy difícil en textos largos, asumimos que son independientes. Gracias a eso, las probabilidades condicionales se calculan multiplicando las de cada palabra por separado:

En el grupo de Spam (\(S\)):

  • Probabilidad de “lotería”: \(P(L \mid S) = \frac{14}{20} = 0.70\)
  • Probabilidad de “premio”: \(P(P \mid S) = \frac{12}{20} = 0.60\)
  • Combinadas (Multiplicación Naive):\[P(L \cap P \mid S) = 0.70 \times 0.60 = 0.42\]

En el grupo de No Spam (\(S'\)): * Probabilidad de “lotería”: \(P(L \mid S') = \frac{10}{80} = 0.125\) * Probabilidad de “premio”: \(P(P \mid S') = \frac{8}{80} = 0.10\) * Combinadas (Multiplicación Naive):\[P(L \cap P \mid S') = 0.125 \times 0.10 = 0.0125\]

Ahora hay que calcular el denominador que es la probabilidad global de que un correo cualquiera tenga ambas palabras bajo el modelo Naive:

\[P(L \cap P) = [P(L \cap P \mid S) \times P(S)] + [P(L \cap P \mid S') \times P(S')]\] \[P(L \cap P) = [0.42 \times 0.20] + [0.0125 \times 0.80]\] \[P(L \cap P) = 0.084 + 0.010 = 0.094\]

Ahora simplemente dividimos la probabilidad de la ruta del Spam entre la probabilidad total que acabamos de calcular \[P(S \mid L \cap P) = \frac{P(L \cap P \mid S) \times P(S)}{P(L \cap P)}\] \[P(S \mid L \cap P) = \frac{0.42 \times 0.20}{0.094} = \frac{0.084}{0.094} \approx 0.8936\]

Si fueran tres palabras —por ejemplo, “lotería” (\(L\)), “premio” (\(P\)) y “urgente” (\(U\))— el proceso es exactamente el mismo, pero añadiendo un eslabón más a la cadena de multiplicación.

Palabra En los 20 de Spam En los 80 de No Spam
Lotería (\(L\)) 14 emails 10 emails
Premio (\(P\)) 12 emails 8 emails
Urgente (\(U\)) 16 emails 4 emails

Nos llega un correo que contiene las tres palabras a la vez: “Urgente, ganaste el premio de la lotería”. Queremos calcular:

\[P(S \mid L \cap P \cap U)\]

Asumimos que las tres palabras son independientes entre sí dentro de cada grupo. Simplemente calculamos la probabilidad de la tercera palabra y la multiplicamos por lo que ya teníamos.

En el grupo de Spam (\(S\)): * Probabilidad de “urgente”: \(P(U \mid S) = \frac{16}{20} = 0.80\) * Combinadas de las 3 palabras:

\[P(L \cap P \cap U \mid S) = P(L \mid S) \times P(P \mid S) \times P(U \mid S)\] \[P(L \cap P \cap U \mid S) = 0.70 \times 0.60 \times 0.80 = 0.336\]

En el grupo de No Spam (\(S'\)): * Probabilidad de “urgente”: \(P(U \mid S') = \frac{4}{80} = 0.05\) * Combinadas de las 3 palabras: \[P(L \cap P \cap U \mid S') = P(L \mid S') \times P(P \mid S') \times P(U \mid S')\] \[P(L \cap P \cap U \mid S') = 0.125 \times 0.10 \times 0.05 = 0.000625\]

Sumamos la probabilidad de encontrar esa combinación de tres palabras tanto en el camino del spam como en el del correo legítimo:

\[P(L \cap P \cap U) = [0.336 \times 0.20] + [0.000625 \times 0.80]\]\[P(L \cap P \cap U) = 0.0672 + 0.0005 = 0.0677\]

Dividimos la ruta del spam de tres palabras entre el total:

\[P(S \mid L \cap P \cap U) = \frac{0.0672}{0.0677} \approx 0.9926 \implies 99.26\%\]