Python & Data Science
Estadística En revisión

Piensa como un bayesiano: una guía para frecuentistas que odian las fórmulas

Imagina que estás en tu escritorio cuando la alarma de humo empieza a sonar fuertemente. Un frecuentista estricto podría razonar: “Esta alarma tiene una tasa de precisión del 99%, así que hay un 99% de probabilidad de que el edificio esté en llamas.” Tomas tu laptop y corres.

Un bayesiano, sin embargo, podría hacer una pausa. Miras a tu alrededor. No hay olor a humo. Recuerdas que el conserje prueba los sensores todos los martes a las 10:00 AM. Tu reloj marca las 10:01 AM, martes. Te quedas en tu silla y sigues escribiendo.

Entonces, ¿quién es más “científico”? El frecuentista tomó los datos por su valor nominal. El bayesiano los sopesó contra lo que ya sabía. Ignorar tu “presentimiento”—lo que llamamos conocimiento previo—hace que tu análisis sea menos preciso, no más.

1. El misterio del sensor roto

Veamos esto a través de un problema clásico de la ciencia de datos: el falso positivo. Supongamos que ejecutas una prueba para detectar un error raro en tu software que solo afecta al 1% de los usuarios. Tu herramienta de detección es sólida: tiene un 95% de precisión. Marca a un usuario. ¿Cuál es la probabilidad de que realmente tenga el error?

La mayoría de las personas diría 95%. Pero están olvidando la Tasa Base.

import numpy as np

# Let's simulate 10,000 users
n_users = 10000
bug_rate = 0.01  # Only 1% have the bug
accuracy = 0.95

# 1. Who actually has the bug?
has_bug = np.random.choice([True, False], size=n_users, p=[bug_rate, 1-bug_rate])

# 2. The sensor flags them
# If they have it, 95% chance it says True. If they don't, 5% chance it says True (False Positive).
detected = np.zeros(n_users, dtype=bool)
for i in range(n_users):
    if has_bug[i]:
        detected[i] = np.random.random() < accuracy
    else:
        detected[i] = np.random.random() > accuracy

# Calculate the result
true_positives = np.sum(has_bug & detected)
total_detected = np.sum(detected)
probability = (true_positives / total_detected) * 100

print(f"Users flagged: {total_detected}")
print(f"Actual bugs in that group: {true_positives}")
print(f"Probability the flag is real: {probability:.2f}%")

Al ejecutar esto, la probabilidad resulta ser de alrededor del 16%. El sensor tiene una precisión del 95%; sin embargo, cuando marca a alguien, esa marca es incorrecta el 84% de las veces.

Lo que esto significa en realidad: Debido a que el error es tan raro (nuestro conocimiento a priori), la gran cantidad de falsos positivos del 99% de usuarios sanos supera a los verdaderos positivos del 1% de usuarios afectados. Un frecuentista que solo se fija en el número del 95% de precisión no ve el bosque por los árboles. Un bayesiano comienza con la tasa base del 1% y la actualiza.

2. La mentalidad ‘fija’ vs. ‘fluida’

El mayor obstáculo es cómo vemos la “Verdad”.

Los frecuentistas asumen que existe un Número Verdadero Fijo allá afuera — digamos, la tasa de conversión exacta de un botón. Nuestros datos son solo una instantánea ruidosa y desordenada de ese número. Calculamos una estimación puntual. Un solo punto en un mapa.

Los bayesianos le dan la vuelta a esto. Los Datos son Fijos (¡es lo único que realmente vimos!), pero el Número Verdadero es Fluido. No buscamos un solo punto; buscamos una “nube” de probabilidad.

import matplotlib.pyplot as plt
import scipy.stats as stats

# Frequentist view: A single point (e.g., Mean = 0.5)
plt.axvline(0.5, color='red', linestyle='--', label='Frequentist Point Estimate')

# Bayesian view: A distribution of likelihood
x = np.linspace(0, 1, 100)
y = stats.norm.pdf(x, 0.5, 0.1)
plt.plot(x, y, label='Bayesian Probability Cloud')
plt.title("Point Estimate vs. Probability Distribution")
plt.legend()
plt.show()

En el gráfico bayesiano, el pico se encuentra en 0.5, pero la “nube” nos dice que 0.48 o 0.52 también son bastante probables. No solo estamos dando una respuesta — estamos mostrando nuestro trabajo y nuestra duda.

3. Conoce el a priori: tu foto del ‘antes’

Esta es la parte más difícil para muchos: el Prior. Parece trampa. Si pienso que la tasa de conversión es 5% antes de que el experimento comience, ¿no estoy sesgando los resultados?

La cuestión es esta: si un extraño te dice que vio un OVNI, te muestras escéptico. Si tu mejor amigo —un piloto sobrio— te dice lo mismo, lo escuchas. Estás aplicando un Prior fuerte para filtrar el ruido.

En el código, usamos distribuciones para esto. Un “Prior plano” significa “No tengo idea.” Un “Prior fuerte” significa “Estoy bastante seguro.”

# A 'Flat' Prior (Uninformative) - Every value from 0 to 1 is equally likely
prior_flat = stats.uniform.pdf(x, 0, 1)

# A 'Strong' Prior (Informative) - We strongly believe the value is near 0.2
prior_strong = stats.beta.pdf(x, 20, 80)

plt.plot(x, prior_flat, label='Flat Prior (I know nothing)')
plt.plot(x, prior_strong, label='Strong Prior (I have a hunch)')
plt.legend()
plt.show()

Usa un Prior plano, y las matemáticas bayesianas te darán el mismo resultado que las matemáticas frecuentistas. El Prior simplemente le dice al modelo: no te dejes engañar por tamaños de muestra pequeños.

4. La actualización: cómo los datos te hacen cambiar de opinión

Ahora, la actualización. Cuando llegan nuevos datos, los combinamos con nuestro Prior para producir el Posterior: nuestra imagen del “después”.

Supongamos que estamos probando una nueva página de destino. Comenzamos con una intuición (el Prior), luego observamos 10 usuarios y luego 100. Observemos qué sucede con nuestra creencia a medida que se acumula la evidencia.

def plot_update(successes, failures, prior_alpha, prior_beta, label):
    # The Beta distribution is perfect for binary (Yes/No) data
    x = np.linspace(0, 1, 100)
    # Bayesian Update: Just add successes to alpha and failures to beta!
    posterior = stats.beta.pdf(x, prior_alpha + successes, prior_beta + failures)
    plt.plot(x, posterior, label=label)

plt.figure(figsize=(10, 5))
# Start with a weak prior (alpha=2, beta=2)
plot_update(0, 0, 2, 2, "Initial Hunch")
plot_update(8, 2, 2, 2, "After 10 users (80% success)")
plot_update(70, 30, 2, 2, "After 100 users (70% success)")
plt.title("The Bayesian Update: Learning from Data")
plt.legend()
plt.show()

¿Notas que la curva se vuelve más alta y delgada? El modelo está ganando confianza. Hay un tira y afloja en juego: la tasa de éxito inicial de 80% empujó la curva hacia la derecha, pero a medida que llegaron más datos mostrando 70%, la curva retrocedió y se estrechó.

5. ¿Y ahora qué? Interpretación de los resultados

La cuestión es esta: los “Intervalos de Confianza” frecuentistas son genuinamente confusos. Si tienes un Intervalo de Confianza del 95% de [0.1, 0.3], no significa que haya un 95% de probabilidad de que el valor verdadero esté entre 0.1 y 0.3. Significa que si ejecutaras el experimento 100 veces, 95 de esos intervalos contendrían el valor verdadero.

Un Intervalo de Credibilidad Bayesiano (o Intervalo de Mayor Densidad) significa exactamente lo que esperarías: “Hay una probabilidad del 95% de que el valor verdadero caiga dentro de este rango.”

# Data: 70 successes, 30 failures
a, b = 70 + 2, 30 + 2
ci_low, ci_high = stats.beta.ppf([0.025, 0.975], a, b)

print(f"Frequentist approach: 'If I repeat this forever...' (Confusing)")
print(f"Bayesian approach: 'I am 95% sure the rate is between {ci_low:.2f} and {ci_high:.2f}' (Clear)")

Lo que esto significa para nosotros: Los métodos bayesianos nos permiten tomar decisiones basadas en el riesgo y la probabilidad en lugar de en umbrales arbitrarios de valores p. Puedes decirle a tu jefe: “Hay un 85% de probabilidad de que esta nueva característica sea mejor que la anterior”, lo cual es mucho más útil que decir “No logramos rechazar la hipótesis nula”.

Resumen:

  • Los Priors son tu contexto inicial.
  • La Actualización es dejar que los datos cambien tu creencia.
  • Los Posteriors son la “nube” final de probabilidad que te da un rango claro de la verdad.

La próxima vez que te enfrentes a un conjunto de datos pequeño o a una pregunta de negocios compleja, no solo busques un valor p. Pregúntate: “¿Qué sabía antes y cuánto han cambiado realmente estos datos mi forma de pensar?”

Comprueba tu comprensión

Las preguntas a continuación van desde el simple recuerdo hasta el diseño abierto, siguiendo aproximadamente la Taxonomía de Bloom.

Recordar ¿Qué es un “prior” y cuál es la diferencia entre un “prior plano” y un “prior fuerte”?

Comprender En sus propias palabras, explique por qué un detector de errores con un 95% de precisión solo acierta alrededor del 16% de las veces cuando marca a alguien, utilizando la explicación de la tasa base del artículo.

Aplicar Usando la regla de actualización bayesiana del artículo para una distribución Beta (posterior = Beta(prior_alpha + successes, prior_beta + failures)), ¿cuáles serían los parámetros de la posterior si comenzara con prior_alpha=2, prior_beta=2 y observara 15 éxitos y 5 fracasos?

Analizar El ejemplo de plot_update del artículo muestra la curva primero desplazándose hacia el 80% (después de 10 usuarios) y luego volviendo hacia el 70% (después de 100 usuarios), mientras se estrecha cada vez más. Analice paso a paso por qué la muestra temprana pequeña (10 usuarios) tenía más poder para desviar la curva del prior que la muestra más grande (100 usuarios), a pesar de que ambos eran “datos nuevos”.

Evaluar El artículo dice que un prior plano hace que “las matemáticas bayesianas en realidad le den el mismo resultado que las matemáticas frecuentistas”. Critique el planteamiento de que los métodos bayesianos son simplemente “mejores” que los frecuentistas: si un prior fuerte es incorrecto (por ejemplo, su “intuición” sobre la tasa de conversión se basaba en información desactualizada), ¿qué le sucede a su estimación posterior en comparación con un análisis frecuentista que ignora los priors por completo?

Crear Diseñe un plan de análisis bayesiano para un nuevo escenario: un equipo de soporte quiere saber la probabilidad de que la respuesta de un nuevo chatbot satisfaga a los clientes, y tienen datos a priori de un chatbot similar que muestra aproximadamente un 60% de satisfacción. Usando el patrón de actualización de distribución Beta del artículo, describa con qué prior (alpha, beta) comenzaría y cómo lo actualizaría después de recopilar la primera semana de calificaciones.

Esta traducción fue generada automáticamente y puede contener errores. Si el idioma inglés es tu preferencia, puedes leer el artículo original en inglés .

«Aplica lo que aprendiste» es para suscriptores Supporter e Insider.

Suscríbete para desbloquear los ejercicios de este artículo.

Ver planes

¿Buscas otra cosa?

Busca en todos los artículos por título, resumen o tema.