Referencia: Distribuciones de probabilidad
Una distribución de probabilidad es una función que asigna probabilidades a los posibles resultados de un proceso aleatorio. Para una distribución discreta, esas probabilidades suman 1 entre los resultados numerables; para una distribución continua, el área bajo la curva de densidad se integra a 1. Cada simulación que escribas con np.random.*, cada intervalo de confianza que calcules y cada prior bayesiano que establezcas es, en última instancia, una elección de distribución — así que la lista a continuación es el vocabulario que necesitas para leer el resto del corpus con claridad.
Lista de distribuciones principales
| Distribución | Fórmula / densidad | Soporte (rango) | Media | Varianza | Historia generativa natural |
|---|---|---|---|---|---|
| Bernoulli | Un ensayo único de sí/no con probabilidad de éxito | ||||
| Binomial | Número de éxitos en ensayos independientes de Bernoulli | ||||
| Poisson | Número de eventos en una ventana fija cuando los eventos son raros e independientes | ||||
| Uniforme | Ignorancia pura / entropía máxima en un intervalo acotado | ||||
| Normal (Gaussiana) | Suma (o promedio) de muchos efectos aditivos independientes — Teorema del Límite Central | ||||
| Exponencial | Tiempo de espera hasta el próximo evento en un proceso de Poisson | ||||
| Gamma | Tiempo de espera hasta el -ésimo evento; suma de exponenciales; prior conjugada para tasas de Poisson | ||||
| Beta | Una probabilidad sobre una probabilidad; prior conjugada para Bernoulli/Binomial |
Los dos parámetros de la distribución Gamma reciben muchos nombres según el libro de texto — aquí usan la convención de forma/tasa; la convención de forma/escala escribe la escala como . Tanto NumPy como SciPy exponen scale, por lo que al portar estas fórmulas a código, preste atención a la convención que esté utilizando.
¿Qué distribución para qué historia generativa?
Usa este árbol cuando puedas describir cómo se producen los datos pero no estés seguro de qué distribución se ajusta a esa historia.
- ¿El resultado es un recuento?
- ¿Cada ensayo es un único sí/no? → Bernoulli (un lanzamiento de moneda) o Binomial ( lanzamientos, contar las caras).
- ¿El recuento se da en un intervalo fijo sin límite superior natural y los eventos son raros? → Poisson ( = recuento esperado por intervalo).
- ¿El recuento está acotado pero deseas máxima ignorancia? → Uniforme Discreta en .
- ¿El resultado es una cantidad continua en un rango acotado?
- ¿En sin un valor preferido? → Uniforme.
- ¿En y deseas modelar una probabilidad desconocida con creencias previas? → Beta.
- ¿El resultado es una cantidad continua en toda la línea real?
- ¿Proviene de promediar o sumar muchos pequeños efectos independientes? → Normal (Teorema del Límite Central).
- ¿Es estrictamente positivo y aproximadamente simétrico en la escala logarítmica? → Log-Normal (una Normal en ; común para precios, ingresos, tamaños).
- ¿El resultado es un tiempo de espera o tiempo hasta un evento?
- ¿Tiempo hasta el primer evento con riesgo constante? → Exponencial.
- ¿Tiempo hasta el -ésimo evento? → Gamma.
- ¿Tiempos de espera con colas pesadas (p. ej., eventos extremos)? → considera Weibull (fuera de esta lista).
La rama más importante de todas es la Normal: es la distribución por defecto para el ruido de medición, los residuos de regresión y los efectos agregados, y es la distribución límite que el Teorema del Límite Central te entrega gratis. El artículo del corpus El Teorema del Límite Central: Por qué tus datos no necesitan ser normales construye la intuición de por qué el promedio transforma casi cualquier forma original en una Normal.
Ejemplo práctico en Python: muestreo y graficación de cada distribución
El bloque a continuación extrae 50,000 muestras de cada distribución, calcula la media y varianza empíricas, y superpone la densidad teórica. Ejecútalo tal cual en cualquier entorno moderno de Python con NumPy, SciPy y Matplotlib instalados. Las líneas de salida se muestran como comentarios — son valores ilustrativos; deberías esperar que tus resultados caigan cerca de ellos, no son una transcripción de una ejecución real.
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
rng = np.random.default_rng(seed=42)
N = 50_000
# Bernoulli(p=0.3)
bern = rng.binomial(1, 0.3, size=N)
print(bern.mean(), bern.var())
# 0.2994 0.2096 (theoretical: 0.30, 0.21)
# Binomial(n=10, p=0.3)
binom = rng.binomial(10, 0.3, size=N)
print(binom.mean(), binom.var())
# 3.0016 2.1006 (theoretical: 3.0, 2.1)
# Poisson(lambda=4)
pois = rng.poisson(4.0, size=N)
print(pois.mean(), pois.var())
# 3.9985 4.0031 (theoretical: 4, 4)
# Uniform(a=0, b=10) -- note NumPy's high is exclusive
uni = rng.uniform(0, 10, size=N)
print(uni.mean(), uni.var())
# 5.0067 8.336 (theoretical: 5, 8.333)
# Normal(mu=2, sigma=3) -- sigma is the standard deviation, not variance
norm = rng.normal(2, 3, size=N)
print(norm.mean(), norm.var())
# 1.997 9.011 (theoretical: 2, 9)
# Exponential(rate=0.5) -> scale = 1/rate = 2
expo = rng.exponential(scale=2.0, size=N)
print(expo.mean(), expo.var())
# 2.006 4.038 (theoretical: 2, 4)
# Gamma(shape=3, scale=2) -> mean = shape*scale, var = shape*scale^2
gam = rng.gamma(3, 2, size=N)
print(gam.mean(), gam.var())
# 6.008 23.91 (theoretical: 6, 24)
# Beta(alpha=2, beta=5)
beta = rng.beta(2, 5, size=N)
print(beta.mean(), beta.var())
# 0.2853 0.0307 (theoretical: 2/7 ~ 0.2857, 10/(49*8) ~ 0.0255)
# Quick visual check for one of them
fig, ax = plt.subplots(1, 1, figsize=(7, 3))
ax.hist(binom, bins=np.arange(-0.5, 11.5, 1), density=True, alpha=0.4, label="empirical")
xs = np.arange(0, 11)
ax.plot(xs, stats.binom.pmf(xs, 10, 0.3), "o-", label="theoretical")
ax.set_xlabel("k"); ax.set_ylabel("P(X=k)"); ax.legend(); ax.set_title("Binomial(10, 0.3)")
plt.tight_layout(); plt.show()
El objeto unificador es la función de distribución acumulada (FDA), . Cada una de las distribuciones anteriores tiene una; la función de densidad/masa es su derivada (caso continuo) o su estructura de saltos discretos.
| Términos simples | Símbolo estadístico | Equivalente en Python |
|---|---|---|
| Densidad de probabilidad en | scipy.stats.<dist>.pdf(x, ...) (continua) o .pmf(...) (discreta) | |
| Probabilidad acumulada hasta | scipy.stats.<dist>.cdf(x, ...) | |
| FDA inversa (función cuantil) | scipy.stats.<dist>.ppf(u, ...) | |
| Esperanza (media) | np.mean(samples) en una muestra grande | |
| Varianza | np.var(samples, ddof=1) para una estimación insesgada de la muestra | |
| Momento central de orden | (samples - samples.mean())**n).mean() | |
| Asimetría (3.er momento estandarizado) | scipy.stats.skew(samples) | |
| Curtosis excesiva | scipy.stats.kurtosis(samples) |
Las distribuciones Bernoulli, Binomial, Poisson, Uniforme y Uniforme discreta son discretas — tienen una función de masa de probabilidad que puedes leer directamente. Las distribuciones Normal, Exponencial, Gamma y Beta son continuas — tienen una densidad , y puede ser mayor que 1 (solo tiene que integrar a 1). Una confusión común entre estudiantes es tratar la densidad Normal de como una “probabilidad”; no lo es. Solo la integral sobre una región es una probabilidad.
La función generadora de momentos para una Normal es , y el hecho de que las sumas de Normales independientes sean Normal se deduce inmediatamente porque las FGM se multiplican bajo independencia. Esa misma propiedad multiplicativa es el núcleo algebraico del Teorema del Límite Central: la suma de variables i.i.d., estandarizadas, tiene una FGM que converge a — la FGM de una Normal estándar.
Línea por línea:
rng = np.random.default_rng(seed=42)— elGeneratormoderno de NumPy. Preferirlo sobre las funciones heredadasnp.random.*porque es más rápido, está mejor probado estadísticamente y es reproducible por instancia. La semilla fija el flujo para que los números anteriores coincidan con los que obtienes en tu máquina.N = 50_000— suficientemente grande para que la media y varianza empíricas caigan dentro de uno o dos por ciento de la teoría para estas distribuciones. Para distribuciones de cola pesada (Gamma con forma pequeña, o cualquier otra de cola más pesada) necesitarías muchas más muestras para que la varianza se estabilice.rng.binomial(1, 0.3, size=N)—n=1hace que sea Bernoulli;n=10hace que sea Binomial(10, 0.3). NumPy no expone unrng.bernoulliseparado; ese es un error común.rng.poisson(4.0, ...)— el único argumento es la tasa , que es tanto la media como la varianza. La varianza de Poisson es igual a su media; si tus datos de conteo tienen varianza >> media, tienes sobredispersión y Poisson es el modelo equivocado.rng.uniform(0, 10, ...)— nota quehighes exclusivo en eluniformde NumPy. La Uniforme continua en tiene media 5 y varianza .rng.normal(2, 3, ...)— el segundo argumento es la desviación estándar , no la varianza . Este es el error más común en código de distribuciones. Si quieres varianza 9, pasa3, no9.rng.exponential(scale=2.0, ...)—scalees , la media de la distribución. Una tasa de por unidad de tiempo significa una espera promedio de unidades de tiempo.rng.gamma(3, 2, ...)— NumPy/SciPy usan la convención shape/scale; media , varianza . Verifícalo conscipy.stats.gamma.mean(3, scale=2).rng.beta(2, 5, ...)— la media de la Beta la hace interpretable como “tu mejor estimación de probabilidad” en un modelo Beta-Binomial. Con la media es — es decir, te inclinas hacia “este Bernoulli tiene éxito aproximadamente el 29% de las veces.”ax.hist(..., density=True)vsax.plot(xs, stats.binom.pmf(...))— para una distribución discreta, superpon la PMF como puntos; para una continua, superpon la PDF como una curva. Usardensity=Trueen el histograma normaliza las barras para que integren a 1, de modo que sean comparables con una PDF.
El mapa del “hogar natural”: proceso del mundo real → distribución
Cada distribución se gana su lugar al ser la respuesta límite o exacta a un proceso generativo reconocible. Memoriza el proceso y la distribución viene con él.
| Proceso generativo | Distribución | Por qué |
|---|---|---|
| Lanzar una moneda sesgada una vez | Bernoulli | Definición de la distribución |
| Lanzar una moneda sesgada veces, contar caras | Binomial | Suma de Bernoullis i.i.d. |
| Ocurren eventos independientes raros en una ventana fija | Poisson | Límite de la Binomial cuando , , |
| Tiempo hasta el primer evento raro | Exponencial | Análogo continuo de la geométrica; sin memoria |
| Tiempo hasta el -ésimo evento raro | Gamma | Suma de Exponenciales i.i.d. |
| Promedio de muchos efectos aditivos pequeños e independientes | Normal | Teorema del Límite Central |
| Elegir un valor sin más información que sus límites | Uniforme | Distribución de máxima entropía en |
| Expresar una creencia previa sobre una probabilidad desconocida | Beta | Prior conjugado para Bernoulli/Binomial; forma flexible en |
Las combinaciones Beta-Binomial y Gamma-Poisson aparecen constantemente en los flujos de trabajo bayesianos debido a la conjugación: si tu verosimilitud es Binomial y tu prior es Beta, tu posterior también es Beta (con parámetros actualizados), y de manera similar para Gamma-Poisson. El artículo del corpus The Bootstrap: Estimating Uncertainty Without Assumptions es la contraparte frecuentista — evita por completo la cuestión de la conjugación mediante remuestreo, por lo que “el bootstrap” es la ruta sin supuestos cuando prefieres no comprometerte con un prior paramétrico.
Casos extremos y errores comunes
1. Confundir sigma y sigma^2 en np.random.normal. El segundo argumento posicional es la desviación estándar. Pasar np.random.normal(0, 4) produce una distribución con varianza 16, no 4. Si la varianza residual de tu código parece cuatro veces más grande, esto es lo primero que debes revisar.
2. Tratar una densidad como una probabilidad. Una Normal con tiene una densidad pico de , que es mayor que 1. Eso está bien — las densidades se integran a probabilidad, no son probabilidades en sí mismas. Esto importa cuando estableces un umbral basado en valores de densidad (“valor atípico si ”) — ese umbral no tiene unidades y depende de .
3. Usar Poisson para datos de conteo con sobredispersión. Poisson fuerza . Los datos de conteo reales — clics por sesión, reclamos por titular de póliza, fallas por lote — casi siempre tienen una varianza mayor que la media. Verifica la razón primero; si , usa la Binomial Negativa en su lugar. Esto es directamente relevante para el monitoreo de drift: consulta Cómo detectar y manejar el drift de datos en producción, donde asumir Poisson cuando los datos están sobredispersados generará alertas de drift falsas positivas.
4. Muestrear una Binomial con y llamarla Bernoulli. Esto es correcto, pero oculta la intención del modelo. Usa rng.binomial(1, p) solo cuando realmente tengas un ensayo; si tus datos son de tipo sí/no por fila, el enfoque de Bernoulli mantiene honesta la historia de la verosimilitud. Estadísticamente son la misma distribución, pero la historia que cuentas sobre tus datos difiere.
5. Olvidar que el límite superior de rng.uniform es exclusivo. rng.uniform(0, 1) nunca devuelve exactamente 1.0. Para la simulación esto rara vez importa, pero si indexas en una lista con el resultado (categories[int(rng.uniform(0, len(cats)))]) la exclusividad es lo que evita que te salgas de los límites — explótalo deliberadamente.
6. Usar la Normal como valor predeterminado para datos de valores positivos. Una Normal asigna probabilidad no nula a valores negativos. Para mediciones estrictamente positivas (precios, duraciones, tamaños), la Exponencial, Gamma o Log-Normal son modelos generativos más seguros; para una Normal al menos necesitas para que sea despreciable.
7. Especificar incorrectamente la parametrización de Gamma al portar fórmulas. Hay tres convenciones en uso activo: forma-tasa , forma-escala y media-forma . La forma principal de Wikipedia es forma-tasa; NumPy y SciPy exponen forma-escala; Stan expone ambas. Siempre lee la documentación (docstring) antes de copiar una fórmula entre librerías.
8. Elegir un a priori Beta con o sin pensar. Esos parámetros ponen una densidad infinita en 0 o 1 respectivamente — el a priori dice “la probabilidad es casi con seguridad 0 o 1, pero no sé cuál.” Para un a priori débilmente informativo centrado en un valor, usa con en tu media a priori. El corpus usa este patrón implícitamente cuando los artículos de modelado buscan a prioris — ten en cuenta los bordes de la Beta.
9. Asumir que el Teorema del Límite Central rescata las muestras pequeñas. No lo hace, o no rápidamente. El TCL es un resultado asintótico; para provenientes de una distribución fuertemente sesgada, la media muestral sigue estando notablemente sesgada. El artículo del corpus Gradient Boosting para Series Temporales usando LightGBM es relevante aquí: los modelos basados en árboles no dependen de supuestos de normalidad para la variable objetivo, lo cual es parte de la razón por la que toleran el régimen de colas pesadas y muestra efectiva pequeña común en series temporales.
10. Reutilizar el estado global de np.random entre workers paralelos. Si bifurcas un proceso y cada worker llama a np.random.normal, heredan la misma semilla y producen flujos idénticos. Siempre construye un np.random.default_rng() (o un hijo generado por SeedSequence) dentro de cada worker. El artículo del corpus sobre el bootstrap depende de que esto se haga correctamente: las remuestras duplicadas corrompen silenciosamente tus estimaciones de incertidumbre.
Referencias cruzadas
- El Teorema del Límite Central: Por qué tus datos no necesitan ser Normales — construye la intuición de por qué las sumas y los promedios convergen a la Normal, y cuándo la convergencia es lo suficientemente rápida como para depender de ella.
- El Bootstrap: Estimación de incertidumbre sin supuestos — alternativa basada en remuestreo a asumir una distribución paramétrica; explica por qué a veces no necesitas comprometerte con una de este repertorio.
- Cómo detectar y manejar el data drift en producción — utiliza comparaciones distribucionales (pruebas KS, PSI) para detectar cuándo los datos de producción se han desplazado de la distribución de entrenamiento; la elección de la distribución de referencia importa.
- Gradient Boosting para series temporales usando LightGBM — los modelos basados en árboles no asumen una distribución objetivo, por lo que prosperan con los datos de colas pesadas y no Normales que las otras ramas del repertorio describen.
Lecturas recomendadas
- Casella, G. & Berger, R. L. Statistical Inference (2nd ed., Duxbury, 2002), Capítulos 3–4 — el tratamiento canónico a nivel de posgrado de las distribuciones anteriores, incluyendo las deducciones de los límites de Poisson a partir de Binomial y de Gamma a partir de Exponencial. El texto de referencia al que la mayoría de los estadísticos en activo recurren primero.
- Wikipedia — Prior conjugado. Una tabla clara de qué prior es conjugado con qué verosimilitud (Beta-Binomial, Gamma-Poisson, Normal-Normal, Dirichlet-Multinomial), junto con las fórmulas de actualización del posterior. El paso natural siguiente para los lectores que llegan a este listado desde el enfoque bayesiano.
- Documentación de
Generatorde NumPy —numpy.org/doc/stable/reference/random/generator.html— la referencia canónica de la API de muestreo utilizada en el ejemplo práctico anterior, incluyendo el patrón de flujos paralelos basado enSeedSequence. - Documentación del módulo
statsde SciPy —docs.scipy.org/doc/scipy/reference/stats.html—pdf,cdf,ppf,fityrvspara cada distribución del listado; la referencia para cuando necesitas cuantiles exactos o estimaciones de máxima verosimilitud de los parámetros en lugar de muestras.
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 .
Artículos relacionados
- Estadística En revisión
Referencia: Prueba de hipótesis
Una referencia completa sobre la prueba de hipótesis: valores p, tipos de error, potencia, correcciones para comparaciones múltiples y cómo elegir la prueba adecuada con ejemplos en Python.
- Estadística En revisión
Piensa como un bayesiano: una guía para frecuentistas que odian las fórmulas
Aprende cómo los a priori bayesianos, los a posteriori y las tasas base producen conclusiones más claras y accionables que los métodos frecuentistas — con ejemplos intuitivos en Python.
- Estadística En revisión
Intervalos de confianza: lo que realmente significa '95% de confianza' (sin dolores de cabeza con las matemáticas)
Aprende qué significa realmente el 95% de confianza —describe el proceso, no tu intervalo específico— con código en Python, ejemplos de pruebas A/B y una intuición clara.
- Estadística En revisión
Pearson vs Spearman vs Kendall: Cómo elegir la correlación adecuada para tus datos
Aprende cuándo usar la correlación de Pearson, Spearman o Kendall en Python — y por qué un puntaje bajo puede significar que simplemente elegiste la herramienta incorrecta para tus datos.
¿Buscas otra cosa?
Busca en todos los artículos por título, resumen o tema.