Categoría: Estadistica y probabilidad

  • Valor Esperado: El Promedio de los Resultados Aleatorios

    En estadística y ciencia de datos, el valor esperado representa el promedio teórico de los resultados posibles de una variable aleatoria. Es una medida fundamental para evaluar decisiones bajo incertidumbre: juegos de azar, inversiones o modelos probabilísticos.

    Para entenderlo de manera intuitiva, imagina dos juegos simples.

    • En el primero, lanzas un dado de seis caras y ganas la cantidad de dólares igual al número que salga.
    • En el segundo, lanzas una moneda: ganas $6 si sale cara, o $0 si sale cruz.

    ¿Cuál conviene jugar si quieres maximizar tus ganancias?


    2. Representando los juegos como variables aleatorias

    Denotemos por:

    • ( D ): el valor aleatorio del dado (posibles valores 1, 2, 3, 4, 5, 6).
    • ( C ): el valor aleatorio del lanzamiento de moneda (posibles valores 0 y 6).

    El valor esperado de una variable aleatoria discreta ( X ) se calcula como:

    [
    E(X) = \sum_{i} x_i , P(x_i)
    ]

    Es decir: multiplicamos cada resultado posible ( x_i ) por su probabilidad ( P(x_i) ), y sumamos todos esos productos.


    3. Ejemplo 1: Dado justo

    Cada cara tiene probabilidad ( \frac{1}{6} ), y los valores posibles son 1 a 6.

    [
    E(D) = \frac{1 + 2 + 3 + 4 + 5 + 6}{6} = 3.5
    ]

    El valor esperado del dado es $3.50.


    4. Ejemplo 2: Moneda justa

    La moneda tiene dos resultados posibles:

    • $6 con probabilidad ( \frac{1}{2} ),
    • $0 con probabilidad ( \frac{1}{2} ).

    [
    E(C) = 0 \times \frac{1}{2} + 6 \times \frac{1}{2} = 3
    ]

    El valor esperado de la moneda es $3.

    Conclusión: el juego del dado tiene un valor esperado ligeramente mayor ($3.5 vs $3). Si jugamos muchas veces, el dado nos da, en promedio, más ganancia.


    5. Ejemplo 3: Dado sesgado

    Supongamos ahora que el dado está cargado:

    • Las probabilidades de sacar 1, 2, 3, 4 o 5 son 0.15 cada una.
    • La probabilidad de sacar 6 es 0.25 (más alta).

    Verificamos que las probabilidades sumen 1:

    [
    5 \times 0.15 + 0.25 = 1
    ]

    Entonces:

    [
    E(D) = 1(0.15) + 2(0.15) + 3(0.15) + 4(0.15) + 5(0.15) + 6(0.25) = 3.75
    ]

    El valor esperado del dado sesgado aumenta a $3.75, porque hay más probabilidad de obtener 6.


    6. Interpretación vectorial

    Otra forma elegante de calcular el valor esperado es mediante el producto punto entre:

    • el vector de valores posibles,
    • y el vector de probabilidades correspondientes.

    [
    E(X) = \mathbf{x} \cdot \mathbf{p}
    ]

    Por ejemplo, para el dado sesgado:

    [
    \mathbf{x} = [1, 2, 3, 4, 5, 6], \quad \mathbf{p} = [0.15, 0.15, 0.15, 0.15, 0.15, 0.25]
    ]


    7. Implementación en Python

    import numpy as np
    
    # Juego del dado justo
    valores_dado = np.array([1, 2, 3, 4, 5, 6])
    prob_dado_justo = np.full(6, 1/6)
    E_dado = np.dot(valores_dado, prob_dado_justo)
    
    # Juego de la moneda
    valores_moneda = np.array([0, 6])
    prob_moneda = np.array([0.5, 0.5])
    E_moneda = np.dot(valores_moneda, prob_moneda)
    
    # Dado sesgado
    prob_dado_sesgado = np.array([0.15, 0.15, 0.15, 0.15, 0.15, 0.25])
    E_dado_sesgado = np.dot(valores_dado, prob_dado_sesgado)
    
    print(f"Valor esperado dado justo: {E_dado}")
    print(f"Valor esperado moneda: {E_moneda}")
    print(f"Valor esperado dado sesgado: {E_dado_sesgado}")
    

    📈 Salida esperada:

    Valor esperado dado justo: 3.5
    Valor esperado moneda: 3.0
    Valor esperado dado sesgado: 3.75
    

    8. Conclusión

    El valor esperado es una herramienta esencial para cuantificar el promedio a largo plazo de un proceso aleatorio.
    Aunque un solo resultado pueda variar, el valor esperado nos dice qué esperar “en promedio” si el experimento se repite muchas veces.


    ¿Quieres que a este artículo le agregue también una figura o gráfico en Python (por ejemplo, una comparación visual de las distribuciones del dado justo y el sesgado)?

  • Random Variables

    Las variables aleatorias son uno de los pilares fundamentales de la probabilidad y la estadística, y entenderlas es clave para trabajar con datos, modelos matemáticos, inferencia estadística o machine learning. En este artículo veremos de forma clara qué son, cómo se clasifican, cómo funcionan sus funciones asociadas (PMF y CDF), y cómo se calculan y visualizan con Python.

    ¿Qué es una Variable Aleatoria?

    Una variable aleatoria es una función que asigna valores numéricos a los resultados de un experimento aleatorio.

    • Si lanzas un dado, la variable aleatoria puede ser “el número que sale”.
    • Si tiras una moneda, la variable aleatoria puede ser “1 si sale cara, 0 si sale cruz”.
    • Si cuentas cuántos clientes entran a un local por hora, esa cantidad diaria también es una variable aleatoria.

    Clasificación principal:

    1. Variables aleatorias discretas → toman valores contables: 0,1,2,…
    2. Variables aleatorias continuas → toman infinitos valores dentro de un intervalo: altura, tiempos, pesos…

    Variables aleatorias discretas

    Las variables aleatorias discretas son aquellas que toman un número finito o contablemente infinito de valores distintos. Cada uno de estos valores tiene una probabilidad asociada, y la suma de todas estas probabilidades debe ser igual a uno. Pueden adoptar valores que se pueden contar, como 0, 1, 2, …, n, o una lista de valores específicos como {-3, -1, 0, 1, 5}.

    Ejemplos comunes:

    • Número de caras al lanzar una moneda 10 veces.
    • Número de clientes en una hora.
    • Número de errores en un texto.

    Variable Aleatoria de Bernoulli

    Una variable aleatoria de Bernoulli es un tipo específico de variable aleatoria discreta que sólo toma dos posibles valores, típicamente 0 y 1, para representar los resultados de un único ensayo de Bernoulli.

    Una variable de Bernoulli X se define de la siguiente manera:

    • \(X=1\) con probabilidad \(p\) (éxito).
    • \(X=0\) con probabilidad \(1−p\) (fracaso).

    Simulación en Python

    Vamos a construir una función en Python que simule un experimento de Bernoulli, el cual podría representar, por ejemplo, el lanzamiento de una moneda:

    import numpy as np
    
    def bernoulli_trial(p=0.5):
        """Simula un experimento de Bernoulli.
            Args:
        p (float): Probabilidad de éxito (por defecto 0.5).
            Returns:
        int: 1 si el experimento resulta en éxito, 0 en caso contrario.
        """
        return 1 if np.random.rand() <= p else 0
    

    En esta función, np.random.rand() genera un número aleatorio entre 0 y 1, y compara este número con la probabilidad de éxito p. Si el número generado es menor o igual a p, el resultado es un éxito (1); de lo contrario, es un fracaso (0).

    Simulación y Análisis de Resultados

    Podemos usar esta función para realizar múltiples ensayos y observar la frecuencia de éxitos, lo que nos permite estimar la probabilidad de éxito de la moneda:

    def simulate_bernoulli_trials(n, p=0.5):
        """Simula n ensayos de Bernoulli y reporta la frecuencia de éxitos.
            Args:
        n (int): Número de ensayos.
        p (float): Probabilidad de éxito.
        
        Returns:
        float: Frecuencia de éxitos.
        """
        results = [bernoulli_trial(p) for _ <strong>in</strong> range(n)]
        return sum(results) / n
    
    # Simular 1000 lanzamientos de una moneda con p = 0.7
    n_trials = 1000
    success_prob = 0.612199
    frequency_of_success = simulate_bernoulli_trials(n_trials, success_prob)
    
    print(f"La frecuencia de éxito estimada es {frequency_of_success:.2f}")

    Output:

    La frecuencia de éxito estimada es 0.71

    Este código simula 1000 lanzamientos de una moneda donde la probabilidad de obtener cara (éxito) es del 70%. La función simulate_bernoulli_trials devuelve la frecuencia de éxitos, que debería acercarse a 0.7 a medida que el número de ensayos aumenta.

    Visualización de la Convergencia

    Para visualizar cómo la frecuencia de éxitos converge a la probabilidad real, podríamos realizar múltiples simulaciones aumentando progresivamente el número de ensayos y graficar los resultados:

    import matplotlib.pyplot as plt
    
    trial_counts = [10, 50, 100, 500, 1000, 5000, 10000]
    frequencies = [simulate_bernoulli_trials(count, success_prob) for count <strong>in</strong> trial_counts]
    
    plt.figure(figsize=(10, 5))
    plt.plot(trial_counts, frequencies, marker='o', linestyle='-')
    plt.axhline(y=success_prob, color='r', linestyle='--')
    plt.title('Convergencia de la Frecuencia de Éxitos a la Probabilidad Real')
    plt.xlabel('Número de Ensayos')
    plt.ylabel('Frecuencia de Éxitos')
    plt.xscale('log')
    plt.show()
    
    Visualización de la Convergencia

    Este gráfico mostrará cómo la frecuencia de éxitos se estabiliza y converge hacia la probabilidad real de éxito (0.612199 en este caso) a medida que aumenta el número de ensayos, ilustrando la ley de los grandes números.

    Función de Masa de Probabilidad (PMF)

    La Función de Masa de Probabilidad (PMF) es una función que describe la probabilidad de que una variable aleatoria discreta tome un valor específico. Es una función que devuelve la probabilidad de que una variable aleatoria discreta sea exactamente igual a algún valor.​ Es una función que asocia a cada punto de su espacio muestral X la probabilidad de que esta lo asuma. La función de probabilidad suele ser el medio principal para definir una distribución de probabilidad discreta, y tales funciones existen para variables aleatorias escalares o multivariantes, cuyo dominio es discreto.

    La función de masa de probabilidad de un dado. Todos los números tienen la misma probabilidad de aparecer cuando este es tirado.

    pmf_dado

    Por ejemplo, supongamos que lanzamos una moneda justa varias veces y contamos el número de caras. La función de masa de probabilidad que describe la probabilidad de cada resultado posible (p. ej., 0 caras, 1 cara, 2 caras, etc.) se denomina distribución binomial. Los parámetros para la distribución binomial son:

    • n para el número de intentos (por ejemplo, n=10 si lanzamos una moneda 10 veces)
    • p para la probabilidad de éxito en cada prueba (probabilidad de observar un resultado particular en cada prueba. En este ejemplo, p= 0,5 porque la probabilidad de observar caras en un lanzamiento de moneda justo es 0,5)

    Si lanzamos una moneda normal 10 veces, decimos que el número de caras observadas sigue una distribución Binomial(n=10, p=0.5). El siguiente gráfico muestra la función de masa de probabilidad para este experimento. Las alturas de las barras representan la probabilidad de observar cada resultado posible calculado por el PMF.

    Veamos cómo cambia la forma de la distribución binomial a medida que cambia el tamaño de la muestra.

    Utilice el control deslizante para cambiar el valor de x lanzamientos de moneda justos, entre uno y diez. Las alturas de las barras resultantes representan la probabilidad de observar diferentes valores de caras en x número de lanzamientos de moneda justos. Puede pasar el cursor sobre cada barra y ver el valor numérico real de la altura de la barra. Las barras más altas representan resultados más probables.

    Observe que a medida que x aumenta, las barras se hacen más pequeñas. Esto se debe a que la suma de las alturas de todas las barras siempre será igual a 1. Entonces, cuando x es mayor, el número de caras que podemos observar aumenta y la probabilidad debe dividirse entre más valores.

    Binomial Distribution: Calculating Probability of a Given Number of Heads

    Calcular probabilidades usando Python

    El método binom.pmf() de la biblioteca scipy.stats se puede utilizar para calcular el PMF de la distribución binomial en cualquier valor. Este método toma 3 valores:

    • x: el valor del interés
    • n: el número de ensayos
    • p: la probabilidad de éxito

    Por ejemplo, supongamos que lanzamos una moneda normal 10 veces y contamos el número de caras. Podemos usar la función binom.pmf() para calcular la probabilidad de observar 6 cabezas de la siguiente manera:

    # import necessary library
    import scipy.stats as stats
    
    # st.binom.pmf(x, n, p)
    print(stats.binom.pmf(6, 10, 0.5))

    Output

    0.205078

    Observe que dos de los tres valores que entran en el método stats.binomial.pmf() son los parámetros que definen la distribución binomial: n representa el número de intentos y p representa la probabilidad de éxito.

    Uso de la función de masa de probabilidad en un rango

    Hemos visto que podemos calcular la probabilidad de observar un valor específico usando una función de masa de probabilidad. ¿Qué pasa si queremos encontrar la probabilidad de observar un rango de valores para una variable aleatoria discreta? Una forma de hacer esto es sumando la probabilidad de cada valor.

    Por ejemplo, digamos que lanzamos una moneda justa 5 veces y queremos saber la probabilidad de obtener entre 1 y 3 caras. Podemos visualizar este escenario con la función de masa de probabilidad:

    Binomial Distribution: Calculating Probability of a Range

    Podemos calcular esto usando la siguiente ecuación donde P(x) es la probabilidad de observar el número x de éxitos (cara en este caso):

    P(1 to 3 heads) = P(1<= X <=3)
    P(1 to 3 heads) = P(X=1) + P(X=2) + P(X=3)
    P(1 to 3 heads) = 0.1562 + 0.3125 + 0.3125
    P(1 to 3 heads) = 0.7812

    Visualicemos lo que significa tomar la probabilidad de un rango. Utilice los controles deslizantes para seleccionar un rango de valores que representen el número de caras que podríamos observar en 10 lanzamientos de moneda justos.

    Pruebe diferentes rangos para ver cómo cambian las probabilidades para diferentes valores. Pase el cursor sobre una barra individual para ver la altura de la barra (que corresponde a la probabilidad de que ocurra el valor).

    Binomial Distribution: Calculating Probability of a Range

    Función de masa de probabilidad en un rango usando Python

    Podemos utilizar el mismo método binom.pmf() de la biblioteca scipy.stats para calcular la probabilidad de observar un rango de valores. Como se mencionó en un ejercicio anterior, el método binom.pmf toma 3 valores:

    • x: el valor del interés
    • n: el número de ensayos
    • p: la probabilidad de éxito

    Por ejemplo, podemos calcular la probabilidad de observar entre 2 y 4 caras en 10 lanzamientos de moneda de la siguiente manera:

    import scipy.stats as stats
    
    # calculating P(2-4 heads) = P(2 heads) + P(3 heads) + P(4 heads) for flipping a coin 10 times
    print(stats.binom.pmf(2, n=10, p=.5) 
        + stats.binom.pmf(3, n=10, p=.5) 
        + stats.binom.pmf(4, n=10, p=.5))

    Output:

    0.366211

    También podemos calcular la probabilidad de observar menos de un cierto valor, digamos 3 caras, sumando las probabilidades de los valores debajo de él:

    import scipy.stats as stats
    
    # calculating P(less than 3 heads) = P(0 heads) + P(1 head) + P(2 heads) for flipping a coin 10 times
    print(stats.binom.pmf(0, n=10, p=.5) 
        + stats.binom.pmf(1, n=10, p=.5) 
        + stats.binom.pmf(2, n=10, p=.5))

    Output

    0.0546875

    Tenga en cuenta que debido a que nuestro rango deseado es inferior a 3 cabezas, no incluimos ese valor en la suma.

    Cuando hay muchos valores de interés posibles, esta tarea de sumar probabilidades puede resultar difícil. Si queremos saber la probabilidad de observar 8 o menos caras en 10 lanzamientos de moneda, debemos sumar los valores del 0 al 8:

    import scipy.stats as stats
    
    var = stats.binom.pmf(0, n = 10, p = 0.5) 
        + stats.binom.pmf(1, n = 10, p = 0.5) 
        + stats.binom.pmf(2, n = 10, p = 0.5) 
        + stats.binom.pmf(3, n = 10, p = 0.5) 
        + stats.binom.pmf(4, n = 10, p = 0.5) 
        + stats.binom.pmf(5, n = 10, p = 0.5) 
        + stats.binom.pmf(6, n = 10, p = 0.5) 
        + stats.binom.pmf(7, n = 10, p = 0.5) 
        + stats.binom.pmf(8, n = 10, p = 0.5)

    Output

    0.98926

    Esto implica una gran cantidad de código repetitivo. En su lugar, también podemos utilizar el hecho de que la suma de las probabilidades de todos los valores posibles es igual a 1:

    P(0to8heads) + P(9to10heads) = P(0to10heads) = 1
    P(0to8heads) = 1 − P(9to10heads)

    Ahora, en lugar de sumar 9 valores para las probabilidades entre 0 y 8 caras, podemos hacer 1 menos la suma de dos valores y obtener el mismo resultado:

    import scipy.stats as stats
    # less than or equal to 8
    1 - (stats.binom.pmf(9, n=10, p=.5) + stats.binom.pmf(10, n=10, p=.5))

    Output

    0.98926

    Función de distribución acumulativa

    La función de distribución acumulativa para una variable aleatoria discreta se puede derivar de la función de masa de probabilidad. Sin embargo, en lugar de la probabilidad de observar un valor específico, la función de distribución acumulativa proporciona la probabilidad de observar un valor específico O MENOS.

    Como se analizó anteriormente, las probabilidades de todos los valores posibles en una distribución de probabilidad dada suman 1. El valor de una función de distribución acumulativa en un valor dado es igual a la suma de las probabilidades menores que él, con un valor de 1 para la mayor número posible.

    CDF de Ejemplo para Diferentes Distribuciones

    • Distribución Discreta: Si una variable aleatoria 𝑋X es discreta, la CDF tiene saltos en los puntos donde la variable tiene una probabilidad distinta de cero.
    • Distribución Continua: Si una variable aleatoria 𝑋X es continua, la CDF es una función continua. Ejemplo: para una distribución normal con media 𝜇𝜇 y desviación estándar 𝜎𝜎, la CDF se representa usando la función de error, la cual es una integral de la función de densidad de probabilidad (PDF).

    Mostramos cómo se puede utilizar la función de masa de probabilidad para calcular la probabilidad de observar menos de 3 caras en 10 lanzamientos de moneda sumando las probabilidades de observar 0, 1 y 2 caras. La función de distribución acumulativa produce la misma respuesta al evaluar la función en CDF(X=2). En este caso, utilizar el CDF es más sencillo que el PMF porque requiere un cálculo en lugar de tres.

    La animación del enlace muestra la relación entre la función de masa de probabilidad y la función de distribución acumulativa. El gráfico superior es el PMF, mientras que el gráfico inferior es el CDF correspondiente. Al observar la gráfica de una CDF, cada valor del eje y es la suma de las probabilidades menores o iguales que él en la PMF.

    Enlace a la animacion

    Podemos usar una función de distribución acumulativa para calcular la probabilidad de un rango específico tomando la diferencia entre dos valores de la función de distribución acumulativa. Por ejemplo, para encontrar la probabilidad de observar entre 3 y 6 caras, podemos tomar la probabilidad de observar 6 o menos cabezas y restar la probabilidad de observar 2 o menos caras. Esto deja un remanente de entre 3 y 6 cabezas.

    La imagen de la derecha demuestra cómo funciona esto. Es importante tener en cuenta que para incluir el límite inferior en el rango, el valor que se resta debe ser uno menos que el límite inferior. En este ejemplo, queríamos saber la probabilidad de 3 a 6, que incluye 3.

    Enlace a la animacion

    Usando la función de distribución acumulativa en Python

    Podemos utilizar el método binom.cdf() de la biblioteca scipy.stats para calcular la función de distribución acumulativa. Este método toma 3 valores:

    • x: el valor de interés, buscando la probabilidad de este valor o menos
    • n: el tamaño de la muestra
    • p: la probabilidad de éxito

    Calcular matemáticamente la probabilidad de observar 6 o menos caras en 10 lanzamientos de moneda justos (0 a 6 caras) se parece a lo siguiente:

    P(6 or fewer heads) = P(0 to 6 heads)
    

    El codigo en Python es:

    import scipy.stats as stats
    
    print(stats.binom.cdf(6, 10, 0.5))
    

    Output

    0.828125
    

    Se puede pensar que calcular la probabilidad de observar entre 4 y 8 caras en 10 lanzamientos de moneda justos es tomar la diferencia del valor de la función de distribución acumulativa en 8 de la función de distribución acumulativa en 3:

    P(4 to 8 Heads) = P(0 to 8 Heads) − P(0 to 3 Heads)
    

    En Python utilizamos el codigo:

    import scipy.stats as stats
    
    print(stats.binom.cdf(8, 10, 0.5) - stats.binom.cdf(3, 10, 0.5))
    

    Output

    0.81738
    

    Para calcular la probabilidad de observar más de 6 caras en 10 lanzamientos de moneda justos, restamos el valor de la función de distribución acumulativa en 6 de 1. Matemáticamente, esto se parece a lo siguiente:

    P(more than 6 Heads) = 1 - P(6 or fewer Heads)
    

    Tenga en cuenta que “más de 6 cabezas” no incluye 6. En Python, calcularíamos esta probabilidad usando el siguiente código:

    import scipy.stats as stats
    print(1 - stats.binom.cdf(6, 10, 0.5))
    

    Output

    0.171875
    

    Tipos de Variables Aleatorias Discretas

    Los tipos de variables aleatorias discretas se clasifican comúnmente según las distribuciones de probabilidad que describen cómo se comportan los datos asociados a estas variables. Aquí describo algunas de las distribuciones más comunes y utilizadas para variables aleatorias discretas. En Python, la librería scipy.stats proporciona implementaciones de las PMFs para muchas distribuciones discretas comunes, lo que facilita su cálculo en la práctica. Estas funciones son extremadamente útiles para simulaciones, modelado estadístico y análisis probabilístico en una amplia gama de aplicaciones.

    1. Distribución Binomial:
      Usada cuando se están observando el número de éxitos en un número fijo de ensayos independientes y cada ensayo tiene solo dos posibles resultados (éxito o fracaso).
      La PMF de una distribución binomial describe la probabilidad de obtener un número específico de éxitos en un número fijo de ensayos independientes, cada uno con dos posibles resultados y una misma probabilidad de éxito.
    2. from scipy.stats import binom import numpy # Parámetros n = 10 # número de ensayos p = 0.5 # probabilidad de éxito size = 100 # muestras a generar # Generar Variables numpy.random.binomial(n, p, size) # Calcular PMF para un valor específico k = 5 # número de éxitos prob = binom.pmf(k, n, p) print(f"Probabilidad de {k} éxitos en {n} ensayos: {prob:.4f}")
    3. Distribución de Poisson: Aplica para modelar el número de eventos en un intervalo de tiempo o espacio fijo cuando estos eventos ocurren con una tasa media conocida y de manera independiente entre sí. La PMF de una distribución de Poisson mide la probabilidad de un número determinado de eventos ocurriendo en un intervalo fijo, dado que estos eventos ocurren con una tasa media conocida y de manera independiente. from scipy.stats import poisson import numpy lambda_ = 3 # tasa media de eventos por intervalo zize = 10 # número de muestras a generar. # Generar variables numpy.random.poisson(lambda_, size) # Calcular PMF k = 4 # número de eventos prob = poisson.pmf(k, lambda_) print(f"Probabilidad de {k} eventos: {prob:.4f}")
    4. Distribución Geométrica: Describe el número de ensayos necesarios para obtener el primer éxito en una secuencia de ensayos independientes, cada uno con dos posibles resultados. La PMF de una distribución geométrica describe la probabilidad de que el primer éxito ocurra en el ensayo 𝑘k from scipy.stats import geom import numpy p = 0.2 # probabilidad de éxito en cada ensayo zize = 10 # número de muestras a generar. # generar variable numpy.random.geometric(p, size) # Calcular PMF k = 5 # ensayo en el que ocurre el primer éxito prob = geom.pmf(k, p) print(f"Probabilidad de primer éxito en el intento {k}: {prob:.4f}")
    5. Distribución Binomial Negativa: Generaliza la distribución geométrica para contar el número de ensayos requeridos para obtener un número fijo de éxitos. Esta distribución cuenta cuántos ensayos son necesarios para lograr un número especificado de éxitos. from scipy.stats import nbinom import numpy r = 5 # número de éxitos deseados p = 0.5 # probabilidad de éxito en cada ensayo zize = 10 # número de muestras a generar. # generar variable numpy.random.negative_binomial(n, p, size) # Calcular PMF k = 10 # total de ensayos prob = nbinom.pmf(k-r, r, p) print(f"Probabilidad de alcanzar {r} éxitos en {k} ensayos: {prob:.4f}")
    6. Distribución Hipergeométrica: Modela el número de éxitos en una muestra de tamaño fijo tomada sin reemplazo de una población que consta de dos tipos de objetos (éxitos y fracasos).
      La PMF de la distribución hipergeométrica describe la probabilidad de obtener un número determinado de éxitos en una muestra extraída sin reemplazo de una población finita que consta de dos tipos de objetos. from scipy.stats import hypergeom import numpy M = 20 # tamaño total de la población n = 7 # número de éxitos en la población N = 12 # tamaño de la muestra # Calcular PMF k = 3 # número de éxitos observados en la muestra prob = hypergeom.pmf(k, M, n, N) print(f"Probabilidad de {k} éxitos en una muestra de {N}: {prob:.4f}") # generar variable ngood # número de elementos "buenos" en la población. nbad # número de elementos "malos" en la población. nsample # número de elementos a muestrear (sin reemplazo). size # número de muestras a generar. numpy.random.hypergeometric(ngood, nbad, nsample, size=None)
    7. Distribución Uniforme Discreta:
      • Todos los valores posibles de la variable tienen la misma probabilidad de ocurrir.
      • Parámetros: el mínimo y máximo valor que puede tomar la variable.
    8. Distribución de Bernoulli:
      • Un caso especial de la distribución binomial con un solo ensayo n=1n=1.
      • Parámetro: probabilidad de éxito pp.
    9. Distribución Multinomial:
      • Extensión de la distribución binomial para situaciones en las que cada ensayo puede resultar en más de dos categorías.
      • Parámetros: número de ensayos nn y vector de probabilidades pp para cada categoría.

    Estas distribuciones permiten modelar una gran variedad de procesos y fenómenos en diversos campos como la biología, ingeniería, economía, ciencias sociales, y más. Cada tipo de distribución proporciona un modelo estadístico que se adapta a las características específicas de los datos y la naturaleza del experimento o la observación realizada.

    Variables aleatorias continuas

    Las variables aleatorias continuas son aquellas que pueden tomar cualquier valor numérico dentro de un intervalo o conjunto de intervalos, a diferencia de las variables aleatorias discretas que tienen valores contables y separados. Este tipo de variables es fundamental en estadística y probabilidad para modelar fenómenos que requieren una escala de medida infinita y continua.

    Características Principales

    1. Valores no Contables: Las variables aleatorias continuas pueden adoptar cualquier valor dentro de un rango específico, que puede ser finito o infinito.
    2. Función de Densidad de Probabilidad (PDF): A diferencia de las variables discretas que usan una función de probabilidad de masa, las continuas se describen mediante una función de densidad de probabilidad. Esta función no proporciona probabilidades directamente, sino que el área bajo la curva de la función entre dos puntos corresponde a la probabilidad de que la variable aleatoria caiga dentro de ese intervalo.

    Ejemplos de Variables Aleatorias Continuas

    • Altura de los estudiantes en una clase: La altura puede variar continuamente y puede ser cualquier valor dentro de un rango razonable, por ejemplo, entre 1.50 metros y 2.00 metros.
    • Tiempo necesario para completar una tarea: Este tiempo puede ser cualquier número no negativo, medido con precisión hasta fracciones de segundo.
    • Presión en un tanque de gas: La presión puede fluctuar y tomar cualquier valor dentro de los límites de seguridad del tanque.

    Funcion de densidad de probabilidad

    De manera similar a cómo las variables aleatorias discretas se relacionan con las funciones de masa de probabilidad, las variables aleatorias continuas se relacionan con las funciones de densidad de probabilidad. Definen las distribuciones de probabilidad de variables aleatorias continuas y abarcan todos los valores posibles que puede adoptar la variable aleatoria dada.

    Cuando se representa gráficamente, una función de densidad de probabilidad es una curva que atraviesa todos los valores posibles que puede tomar la variable aleatoria, y el área total bajo esta curva suma 1.

    La siguiente imagen muestra una función de densidad de probabilidad. El área resaltada representa la probabilidad de observar un valor dentro del rango resaltado.

    Probability Density

    En una función de densidad de probabilidad, no podemos calcular la probabilidad en un solo punto. Esto se debe a que el área de la curva debajo de un único punto es siempre cero. El siguiente gif muestra esto.

    Probability Density one point

    Como podemos ver en la imagen anterior, a medida que el intervalo se hace más pequeño, el ancho del área bajo la curva también se hace más pequeño. Al intentar evaluar el área bajo la curva en un punto específico, el ancho de esa área se vuelve 0 y, por lo tanto, la probabilidad es igual a 0.

    Podemos calcular el área bajo la curva usando la función de distribución acumulativa para la distribución de probabilidad dada.

    Por ejemplo, las alturas caen bajo un tipo de distribución de probabilidad llamada distribución normal. Los parámetros de la distribución normal son la media y la desviación estándar, y utilizamos la forma Normal(media, desviación estándar) como abreviatura.

    Sabemos que la altura de las mujeres tiene una media de 167,64 cm con una desviación estándar de 8 cm, lo que las sitúa bajo la distribución Normal(167,64,8).

    Digamos que queremos saber la probabilidad de que una mujer elegida al azar mida menos de 158 cm. Podemos usar la función de distribución acumulativa para calcular el área bajo la curva de la función de densidad de probabilidad de 0 a 158 para encontrar esa probabilidad.

    Area

    Podemos calcular el área de la región azul en Python usando el método norm.cdf() de la biblioteca scipy.stats. Este método toma 3 valores:

    • x: el valor del interés
    • loc: la media de la distribución de probabilidad
    • scale: la desviación estándar de la distribución de probabilidad
    import scipy.stats as stats
    
    # stats.norm.cdf(x, loc, scale)
    print(stats.norm.cdf(158, 167.64, 8))
    

    Output

    0.1141
    

    Funciones de densidad de probabilidad y función de distribución acumulativa

    Podemos tomar la diferencia entre dos rangos superpuestos para calcular la probabilidad de que una selección aleatoria esté dentro de un rango de valores para distribuciones continuas. Este es esencialmente el mismo proceso que calcular la probabilidad de un rango de valores para distribuciones discretas.

    Rangos superpuestos

    Digamos que queremos calcular la probabilidad de observar aleatoriamente a una mujer de entre 165 cm y 175 cm, suponiendo que las alturas todavía siguen la distribución Normal (167,74, 8). Podemos calcular la probabilidad de observar estos valores o menos. La diferencia entre estas dos probabilidades será la probabilidad de observar aleatoriamente a una mujer en este rango dado. Esto se puede hacer en Python usando el método norm.cdf() de la biblioteca scipy.stats. Como se mencionó anteriormente, este método adopta 3 valores:

    import scipy.stats as stats
    # P(165 < X < 175) = P(X < 175) - P(X < 165)
    # stats.norm.cdf(x, loc, scale) - stats.norm.cdf(x, loc, scale)
    print(stats.norm.cdf(175, 167.74, 8) - stats.norm.cdf(165, 167.74, 8))
    

    Output

    0.45194
    

    También podemos calcular la probabilidad de observar aleatoriamente un valor o mayor restando de 1 la probabilidad de observar menos que el valor dado. Esto es posible porque sabemos que el área total bajo la curva es 1, por lo que la probabilidad de observar algo mayor que un valor es 1 menos la probabilidad de observar algo menor que el valor dado.

    Digamos que queremos calcular la probabilidad de observar a una mujer que mide más de 172 centímetros, suponiendo que las alturas todavía siguen la distribución Normal (167,74, 8). Podemos pensar en esto como lo opuesto a observar a una mujer que mide menos de 172 centímetros. Podemos visualizarlo de esta manera:

    Grafica

    Podemos usar el siguiente código para calcular el área azul tomando 1 menos el área roja:

    import scipy.stats as stats
    
    # P(X > 172) = 1 - P(X < 172)
    # 1 - stats.norm.cdf(x, loc, scale)
    print(1 - stats.norm.cdf(172, 167.74, 8))
    

    Output

    0.45194
    

    Tipos de Variables Aleatorias Continuas

    1. Normal (Gaussiana):
      • loc: media de la distribución (mu).
      • scale: desviación estándar de la distribución (sigma).
      • size: número de muestras a generar.
      numpy.random.normal(loc=0.0, scale=1.0, size=None) Genera números a partir de una distribución normal con media loc y desviación estándar scale.
    2. Exponencial:
      • scale: inverso de la tasa (lambda), a veces llamado parámetro de escala.
      • size: número de muestras a generar.
      numpy.random.exponential(scale=1.0, size=None) Genera números a partir de una distribución exponencial con un parámetro de escala.
    3. Uniforme:
      • low: límite inferior del rango de los valores.
      • high: límite superior del rango de los valores.
      • size: número de muestras a generar.
      numpy.random.uniform(low=0.0, high=1.0, size=None) Genera números a partir de una distribución uniforme entre low y high.
    4. Beta:
      • a: parámetro de forma alpha.
      • b: parámetro de forma beta.
      • size: número de muestras a generar.
      numpy.random.beta(a, b, size=None) Genera números a partir de una distribución beta con parámetros a y b.
    5. Gamma:
      • shape: parámetro de forma (k).
      • scale: parámetro de escala (theta).
      • size: número de muestras a generar.
      numpy.random.gamma(shape, scale=1.0, size=None) Genera números a partir de una distribución gamma con un parámetro de forma y escala.

    Estos métodos permiten simular datos que siguen estas distribuciones, lo que es útil en simulaciones, pruebas de hipótesis, y para entender mejor el comportamiento estadístico de fenómenos modelados por estas distribuciones.

  • La Distribución Binomial: La Base Matemática para Contar Éxitos en Experimentos Repetidos

    La distribución binomial es una de las herramientas más importantes en estadística y ciencia de datos. Aparece siempre que repetimos un experimento con dos posibles resultados —éxito o fracaso, sí o no, 1 o 0 — y queremos conocer la probabilidad de obtener cierto número de éxitos en un conjunto de intentos.

    En esta clase veremos qué es, cómo se construye y por qué es tan útil para problemas reales como comprobar si una moneda está trucada, evaluar la precisión de un modelo o estimar tasas de éxito en marketing, medicina o industria.

    Del experimento Bernoulli a la distribución Binomial

    En el articulo anterior aborde la Distribución Bernoulli, que describe un experimento con dos resultados posibles:

    • Éxito → se representa con 1
    • Fracaso → se representa con 0

    Si la probabilidad de éxito es p, entonces la probabilidad de fracaso es 1 – p.

    La pregunta ahora es: ¿qué ocurre cuando repetimos este experimento varias veces?

    Por ejemplo:

    • Lanzar una moneda n veces
    • Enviar n anuncios y medir si cada usuario hace clic
    • Revisar n productos y ver si cada uno tiene defectos

    La distribución que describe el número total de éxitos obtenidos en n intentos independientes es la Distribución Binomial.

    Una aplicación real: ¿es justa una moneda? (Test de hipótesis)

    Supón que quieres determinar si una moneda es justa.

    Planteamos dos hipótesis:

    • H₀ (Hipótesis nula): la moneda es justa → \( p = 0.5 \)
    • H₁ (Hipótesis alternativa): la moneda no es justa → \( p \neq 0.5 \)

    Lanzas la moneda n veces y defines:

    $$X_i = \begin{cases}1, & \text{si sale cara} \\ 0, & \text{si sale cruz} \end{cases}$$

    El número total de caras es:

    $$S = X_1 + X_2 + \cdots + X_n$$

    La pregunta clave es:

    ¿cuál es la probabilidad de que ocurra un determinado valor de S si la moneda es justa?

    Responder a eso es exactamente el papel de la distribución binomial.

    Construyendo la distribución binomial paso a paso

    Caso S = 0 (todas cruces)

    Para obtener 0 caras en n lanzamientos, todas deben ser cruces:

    $$P(S=0) = (1 – p)^n$$

    Solo existe una secuencia posible: TTTTT…T (n veces).


    Caso S = 1 (una sola cara)

    La probabilidad de que una secuencia concreta sea “una cara + n-1 cruces” es:

    $$p(1-p)^{n-1}$$

    Pero hay n posiciones posibles para esa única cara:

    • Cara en el lanzamiento 1
    • Cara en el lanzamiento 2
    • Cara en el lanzamiento n

    Así que:

    $$P(S=1) = n \cdot p(1-p)^{n-1}$$

    Caso general: S = s

    Para obtener exactamente s caras en n lanzamientos:

    La probabilidad de una secuencia concreta es:

    $$p^{s}(1-p)^{n-s}$$

    El número de secuencias distintas que contienen exactamente s caras y n-s cruces es:

    $$\begin{pmatrix} n \\ s \end{pmatrix}$$

    que se lee “n elige s”.

    Entonces, la probabilidad total es:

    $$P(S=s) = \begin{pmatrix} n \\ s \end{pmatrix} p^{s}(1-p)^{n-s}$$

    Esta es la fórmula de la distribución binomial.

    ¿Qué es el “n elige s”? La intuición del coeficiente binomial

    El operador combinatorio:

    $$ \begin{pmatrix} n \\ s \end{pmatrix} = \frac{n!}{s!(n-s)!}$$

    cuenta cuántas formas hay de elegir s elementos dentro de un conjunto de n elementos, sin importar el orden.

    Ejemplo clásico:

    El número de manos posibles de 5 cartas tomadas de una baraja de 52 cartas es:

    $$\begin{pmatrix}52 \\ 5 \end{pmatrix}$$

    En nuestro contexto, representa cuántas secuencias distintas tienen s caras y n-s cruces.

    ¿Qué forma tiene la distribución binomial?

    La distribución depende de dos parámetros:

    • n → número de ensayos
    • p → probabilidad de éxito en cada ensayo

    Si aumentamos n (más repeticiones)

    • El número máximo posible de éxitos crece
    • La distribución se vuelve más “ancha” cuando se mira en términos de conteos

    Pero si en vez de mirar S, miramos la fracción de éxitos:

    $$\frac{S}{n}$$

    lo que ocurre es que la distribución se estrecha alrededor de p. Esto conecta con la Ley de los Grandes Números.

    Si cambiamos p (probabilidad de éxito)

    • Si p aumenta → el histograma se desplaza hacia la derecha
    • Si p disminuye → se desplaza hacia la izquierda

    Cuando p = 0.5, la distribución es simétrica (si n es grande).

    Propiedades importantes de la distribución binomial

    Valor esperado (media)

    $$E[S] = np$$

    Varianza

    $$Var(S) = np(1-p)$$

    Aproximación normal (cuando n es grande)

    Si (n) es suficientemente grande, la distribución binomial se aproxima a una normal:

    $$S \approx \mathcal{N}(np, np(1-p))$$

    Esto es extremadamente útil en estadística inferencial.

    ¿Para qué sirve la distribución binomial en ciencia de datos?

    • Test A/B y marketing digital: Medir clics, conversiones o aperturas de email.
    • Calidad industrial: Detectar la tasa de defectos.
    • Modelos de clasificación: Analizar el número de aciertos vs. errores.
    • Inferencia estadística: Construir intervalos de confianza para una proporción.
    • Simulaciones y análisis de riesgo: Modelar escenarios de éxito/fracaso repetidos.

    En Resumen

    La distribución binomial:

    • Surge al repetir un experimento Bernoulli n veces
    • Modela el número de éxitos S en esas repeticiones
    • Su fórmula combina:
      • Probabilidad de una secuencia → \( p^s (1-p)^{n-s} \)
      • Número de secuencias posibles → \( \begin{pmatrix} n \\ s \end{pmatrix} \)
    • Tiene una estructura simple pero extremadamente poderosa
    • Es fundamental en estadística, machine learning y análisis de datos aplicado

  • La Distribución de Bernoulli — La base de la probabilidad binaria

    En muchas situaciones del mundo real nos enfrentamos a experimentos que solo tienen dos posibles resultados. Por ejemplo:

    • Lanzar una moneda: cara o cruz.
    • Aprobar o suspender un examen.
    • Un cliente hace clic en un anuncio o no lo hace.
    • Una lámpara funciona o se funde.

    Cuando un experimento tiene solo dos resultados posibles, podemos modelarlo mediante la distribución de Bernoulli, una de las distribuciones más simples y fundamentales en la estadística y la teoría de la probabilidad.

    Esta distribución recibe su nombre del matemático suizo Jacob Bernoulli (1655–1705), y es la base de muchas distribuciones más complejas, como la binomial, la geométrica o la beta.

    Definición formal

    Una variable aleatoria Bernoulli \( X \) puede tomar solo dos valores:

    $$X = \begin{cases} 1 & \text{con probabilidad } p \\ 0 & \text{con probabilidad } (1 – p)
    \end{cases}$$

    Donde \( p \) es el parámetro de la distribución y representa la probabilidad de éxito (por ejemplo, obtener “cara” en una moneda justa).

    El parámetro \( p \) cumple que:

    $$0 \leq p \leq 1$$

    Función de masa de probabilidad (PMF)

    La función que describe la probabilidad de cada posible resultado se llama función de masa de probabilidad (PMF):

    $$P(X = x) = p^x (1 – p)^{1 – x}, \quad x \in {0, 1}$$

    Aunque parezca complicada, en realidad es muy sencilla:

    • Si ( x = 1 ): \( P(X=1) = p \)
    • Si ( x = 0 ): \( P(X=0) = 1 – p \)

    Por ejemplo, si ( p = 0.5 ), tenemos una moneda justa; si ( p = 0.8 ), una moneda sesgada hacia cara.

    Esperanza o valor esperado

    El valor esperado o esperanza matemática \(E[X] [latex] representa el promedio que obtendríamos si repitiésemos el experimento infinitas veces.

    Para una Bernoulli:

    $$E[X] = 0 \times (1 – p) + 1 \times p = p$$

    Es decir, la esperanza de una Bernoulli es igual al parámetro ( p ).

    Si una moneda tiene ( p = 0.7 ) de salir cara, el valor esperado de obtener cara es 0.7.

    Varianza

    La varianza mide cuánto se dispersan los valores posibles de la variable respecto a su media.
    En la Bernoulli, se calcula como:

    $$Var(X) = p (1 – p)$$

    Esto tiene una interpretación interesante:

    • Cuando [latex] p = 0 \) o \( p = 1 \), la varianza es 0, ya que siempre se obtiene el mismo resultado.
    • La varianza máxima se da cuando \( p = 0.5 \), es decir, cuando ambos resultados son igualmente probables.

    Implementación en Python

    Podemos representar la distribución de Bernoulli de varias formas en Python.
    A continuación se muestran ejemplos con scipy y también una simulación manual con numpy.

    import numpy as np
    import matplotlib.pyplot as plt
    from scipy.stats import bernoulli
    
    # Parámetro de la distribución
    p = 0.5
    
    # Posibles valores de X (0 o 1)
    x = [0, 1]
    
    # Función de masa de probabilidad (PMF)
    pmf = bernoulli.pmf(x, p)
    
    # Graficamos
    plt.bar(x, pmf, color='skyblue', edgecolor='black')
    plt.xticks([0, 1], ['Fallo (0)', 'Éxito (1)'])
    plt.title(f'Distribución de Bernoulli (p = {p})')
    plt.ylabel('Probabilidad')
    plt.show()

    Esto mostrará una gráfica con dos barras, una en 0 con altura 0.5 y otra en 1 con altura 0.5.


    Ejemplo: Esperanza y varianza

    # Cálculo teórico
    mean_theoretical = bernoulli.mean(p)
    var_theoretical = bernoulli.var(p)
    
    print(f"Esperanza (E[X]) = {mean_theoretical}")
    print(f"Varianza (Var[X]) = {var_theoretical}")

    Salida:

    Esperanza (E[X]) = 0.5
    Varianza (Var[X]) = 0.25

    Ejemplo: Simulación con numpy

    Vamos a simular 10,000 lanzamientos de una moneda con probabilidad p = 0.7 de salir cara.

    # Simulación de 10,000 lanzamientos
    n = 10_000
    p = 0.7
    data = np.random.binomial(1, p, size=n)  # Binomial con n=1 equivale a Bernoulli
    
    # Resultados empíricos
    mean_empirical = np.mean(data)
    var_empirical = np.var(data)
    
    print(f"Media observada: {mean_empirical:.3f}")
    print(f"Varianza observada: {var_empirical:.3f}")

    Salida:

    Media observada: 0.703
    Varianza observada: 0.209

    7. Interpretación visual

    La varianza \( Var(X) = p(1 – p) \) alcanza su máximo cuando \( p = 0.5 \).
    Podemos comprobarlo gráficamente:

    p_values = np.linspace(0, 1, 100)
    variance = p_values * (1 - p_values)
    
    plt.plot(p_values, variance, color='coral')
    plt.title("Varianza de la Distribución de Bernoulli")
    plt.xlabel("p")
    plt.ylabel("Varianza")
    plt.grid(True)
    plt.show()

    En resumen:

    La distribución de Bernoulli es la piedra angular de la probabilidad binaria.
    Su simplicidad la convierte en un modelo ideal para entender conceptos más avanzados, como:

    • Distribución binomial: suma de varios experimentos Bernoulli independientes.
    • Distribución beta: distribución continua conjugada para ( p ) en el contexto bayesiano.
    • Procesos de clasificación binaria en machine learning (éxito/fracaso, 1/0).

    En resumen:

    ConceptoFórmulaInterpretación
    PMF( P(X=x) = p^x (1-p)^{1-x} )Probabilidad de éxito o fallo
    Esperanza( E[X] = p )Promedio esperado
    Varianza( Var(X) = p(1-p) )Dispersión de los resultados
  • El Teorema de Bayes: Cómo Actualizar Nuestras Creencias con Nueva Evidencia

    El Teorema de Bayes es una de las ideas más poderosas y elegantes de la probabilidad. Nos permite calcular la probabilidad de que algo sea cierto cuando tenemos nueva información o evidencia.

    La Intuición: Probabilidades Condicionales

    Imagina un experimento con dos pasos:

    1. Lanzamos una moneda (con una probabilidad desconocida de salir cara).
    2. Si sale cara, tiramos un dado de seis caras.
      Si sale cruz, tiramos uno de veinte caras.

    Ahora, supón que el resultado del dado fue un 5. La pregunta es: ¿Cuál es la probabilidad de que la moneda haya salido cara, sabiendo que el dado dio 5?

    Este es un ejemplo clásico de probabilidad condicional inversa: queremos invertir el sentido del razonamiento, pasando de

    $$P(\text{dado}=5 | \text{cara})$$

    a

    $$P(\text{cara} | \text{dado}=5)$$

    Derivando el Teorema

    A partir de las definiciones básicas de probabilidad y usando la interpretación geométrica de áreas bajo la curva, se llega a la fórmula general:

    $$P(A|B) = \frac{P(B|A) P(A)}{P(B)}$$

    Donde:

    • \(P(A) \) es la probabilidad inicial o priori de que ocurra \( A \).
    • \( P(B|A) \) es la verosimilitud: qué tan probable es observar \( B\) si \( A \) fuera cierto.
    • \( P(B) \) es la probabilidad total de \( B \), considerando todos los casos posibles.

    Aplicación: Ejemplo del Test de COVID

    Supongamos un test que da positivo el 80 % de las veces en la población general. Sabemos que si una persona tiene COVID, la probabilidad de que el test dé positivo es 0.9. Antes de hacernos el test, creemos que hay un 70 % de probabilidad de estar infectados.

    Aplicando Bayes:

    $$P(\text{COVID}|\text{test positivo}) = \frac{0.9 \times 0.7}{0.8} = 0.7875$$

    Es decir, la probabilidad real de tener COVID aumenta a 78.75 % tras recibir el resultado positivo.

    Actualización Iterativa

    Lo más interesante es que Bayes nos permite actualizar las probabilidades cada vez que obtenemos nueva evidencia. Por ejemplo, si un compañero de piso también da positivo, podemos recalcular con esa información y la probabilidad aumentará (en este caso, hasta cerca del 88 %).

    Este proceso de revisión continua de nuestras creencias es la base de muchos algoritmos de aprendizaje automático, donde los modelos aprenden y se ajustan con cada nuevo dato.

    Inferencia Bayesiana con Python

    La idea central de la inferencia bayesiana

    En lugar de estimar un solo valor (como hace la estadística clásica), Bayes nos da una distribución completa sobre los posibles valores de los parámetros. Así podemos medir incertidumbre y ajustar nuestras creencias conforme llegan nuevos datos.

    $$\text{Posterior} = \frac{\text{Verosimilitud} \times \text{Prior}}{\text{Evidencia}}$$

    Ejemplo práctico: Clasificador Bayesiano simple

    Veamos un ejemplo básico con Naive Bayes, aplicado a correos electrónicos.
    No necesitamos datos reales todavía — solo entender el razonamiento.

    from sklearn.naive_bayes import MultinomialNB
    from sklearn.feature_extraction.text import CountVectorizer
    
    # Datos de ejemplo
    emails = [
        "Oferta exclusiva gana dinero rápido",    # spam
        "Reunión de trabajo a las 10",            # no spam
        "Compra ahora descuento especial",        # spam
        "Adjunto informe mensual del proyecto"    # no spam
    ]
    
    labels = [1, 0, 1, 0]  # 1 = spam, 0 = no spam
    
    # Convertimos texto a matriz de frecuencias
    vectorizer = CountVectorizer()
    X = vectorizer.fit_transform(emails)
    
    # Entrenamos el modelo bayesiano
    model = MultinomialNB()
    model.fit(X, labels)
    
    # Probamos con un nuevo mensaje
    nuevo_email = ["oferta de trabajo con descuento"]
    X_new = vectorizer.transform(nuevo_email)
    prob_spam = model.predict_proba(X_new)
    
    print("Probabilidad de SPAM:", prob_spam[0][1])
    

    Este modelo aplica el Teorema de Bayes a cada palabra del mensaje y combina los resultados suponiendo independencia entre ellas (por eso se llama Naive o “ingenuo”).

    Inferencia bayesiana “real” con PyMC o NumPyro

    Cuando queremos estimar parámetros desconocidos, usamos librerías especializadas como PyMC:

    import pymc as pm
    import arviz as az
    
    # Ejemplo: estimar la probabilidad de éxito de una moneda sesgada
    with pm.Model() as modelo:
        p = pm.Beta("p", alpha=2, beta=2)        # Prior: distribución beta
        observaciones = pm.Bernoulli("obs", p, observed=[1,0,1,1,0,1])  # Datos
        trazas = pm.sample(2000, tune=1000)
    
    az.plot_posterior(trazas)
    

    Aquí usamos una distribución Beta como priori, y tras observar los datos (caras y cruces) obtenemos la distribución posterior de p : nuestra creencia actualizada sobre cuán sesgada está la moneda.

    ¿Por qué es importante?

    La inferencia bayesiana permite:

    • Actualizar modelos dinámicamente (ej. diagnóstico médico con nueva información).
    • Expresar incertidumbre en vez de dar una sola respuesta.
    • Combinar conocimiento previo con datos (por ejemplo, en modelos predictivos con pocos datos).

    Por eso se usa en:

    • Machine Learning probabilístico
    • Sistemas de recomendación
    • Medicina y biología
    • Finanzas y predicción de riesgos

    En resumen

    ConceptoInterpretación Bayesiana
    PriorLo que creemos antes de ver los datos
    EvidenciaLos datos observados
    PosteriorLo que creemos después de ver los datos
    VerosimilitudQué tan probable es ver esos datos si la hipótesis fuera cierta
  • Probabilidad Condicional: Cómo un Suceso Afecta la Posibilidad de Otro

    La probabilidad condicional es uno de los conceptos más importantes en estadística y ciencia de datos. Nos permite responder preguntas como:

    ¿Cuál es la probabilidad de que ocurra un evento A sabiendo que ya ocurrió un evento B?

    En la vida real, casi ningún fenómeno ocurre de forma completamente independiente. Las variables se relacionan, se influyen y cambian entre sí. La probabilidad condicional nos da una forma matemática de actualizar nuestras expectativas cuando obtenemos nueva información.

    Cuando los eventos no son independientes

    Si dos eventos A y B son independientes, conocer que uno ocurrió no cambia la probabilidad del otro. Por ejemplo, lanzar una moneda y luego lanzar un dado son sucesos independientes.

    Pero, ¿qué pasa si los eventos no son independientes? Entonces el hecho de que ocurra A modifica la probabilidad de que ocurra B. Esto es exactamente lo que estudia la probabilidad condicional.

    Ejemplo: moneda y dado

    Imaginemos un proceso aleatorio en dos pasos:

    1. Lanzamos una moneda.
      • Probabilidad de cara = \( P(C) = P_c\)
      • Probabilidad de escudo = \( P(E) = P_e = 1 – P_c\)
    2. Dependiendo del resultado, lanzamos un dado distinto:
      • Si sale cara, lanzamos un dado de 6 caras.
      • Si sale cruz, lanzamos un dado de 20 caras.

    En este experimento, el tipo de dado que usamos depende del resultado de la moneda. Por tanto, el resultado del dado no es independiente del lanzamiento previo.

    Calculando una probabilidad condicional

    Queremos saber, por ejemplo: ¿Cuál es la probabilidad de obtener un 5 en el dado?

    Existen dos formas de obtener un 5:

    Caso 1: La moneda sale cara y el dado de 6 caras muestra un 5.

    $$P(5 \text{ y cara}) = P(C) \times P(5|C)$$

    Dado que el dado de 6 caras es justo:

    $$P(5|C) = \frac{1}{6}$$

    Entonces:

    $$P(5 \text{ y cara}) = P_c \times \frac{1}{6}$$

    Caso 2: La moneda sale cruz y el dado de 20 caras muestra un 5.

    $$P(5 \text{ y cruz}) = P(E) \times P(5|E)$$

    En este caso:

    $$P(5|T) = \frac{1}{20}$$

    Entonces:

    $$P(5 \text{ y cruz}) = p_E \times \frac{1}{20}$$

    La probabilidad total de obtener un 5 es la suma de ambos casos:

    $$P(5) = p_H \times \frac{1}{6} + p_T \times \frac{1}{20}$$

    Interpretación visual

    Imagina el área total de posibles resultados del experimento como un rectángulo.

    • Una parte representa los casos en que la moneda da cara y se lanza el dado de 6.
    • La otra parte representa los casos con cruz y el dado de 20.

    El área combinada de ambos representa la probabilidad total de obtener cualquier resultado posible. Dentro de cada zona, las franjas correspondientes al número “5” son pequeñas porciones de ese total, y su tamaño depende del tipo de dado y de la probabilidad de cada cara o cruz.

    Definición formal

    La probabilidad condicional de un evento A, dado que ocurrió B, se define como:

    $$P(A|B) = \frac{P(A \cap B)}{P(B)}$$

    Es decir:

    La probabilidad de que ocurra A dado que ocurrió B, es igual a la probabilidad de que ambos ocurran, dividida entre la probabilidad de B.

    Ejemplo generalizado

    Volviendo a nuestro experimento, podemos preguntar:

    ¿Cuál es la probabilidad de que el dado muestre 5 dado que salió cara?

    Aplicamos la definición:

    $$P(5|C) = \frac{P(5 \cap C)}{P(C)} = \frac{P_c \times \frac{1}{6}}{P_c } = \frac{1}{6}$$

    Lo que confirma que, al saber que salió cara, solo nos interesa el dado de 6 caras, y cada resultado tiene probabilidad 1/6.

    La regla del producto

    De la definición anterior se deriva una relación muy útil:

    $$P(A \cap B) = P(A|B) \times P(B)$$

    Esta regla permite descomponer probabilidades conjuntas en términos condicionales y viceversa. También sirve para construir árboles de probabilidad, donde cada rama representa la probabilidad condicional de avanzar hacia un resultado dado.

    El principio de no duplicar probabilidades

    Un error común al calcular probabilidades es sumar eventos que no son independientes sin ajustar por su intersección.
    Por ejemplo, si queremos la probabilidad de que ocurra A o B, debemos restar el solapamiento:

    $$P(A \cup B) = P(A) + P(B) – P(A \cap B)$$

    De lo contrario, estaríamos contando dos veces los casos en que A y B ocurren simultáneamente.

    En Resumen

    La probabilidad condicional nos enseña que la información cambia la probabilidad. Saber que algo ocurrió modifica lo que podemos esperar a continuación. Es la base de la estadística inferencial, la teoría bayesiana y gran parte del razonamiento probabilístico moderno.

    Nos permite pasar de la incertidumbre total a una incertidumbre informada, paso esencial en cualquier proceso analítico.

  • La probabilidad es área: una forma intuitiva de entender eventos

    Cuando hablamos de probabilidad, a menudo pensamos en números entre 0 y 1, fracciones o porcentajes. Pero existe una forma geométrica e intuitiva de entender la probabilidad:
    la probabilidad es área.

    ¿Qué significa que la probabilidad sea área?

    La probabilidad de que ocurra un evento puede representarse como la proporción del área total correspondiente a ese evento dentro del espacio de todos los posibles resultados.

    Imagina un espacio de resultados como un rectángulo o un círculo que representa todos los resultados posibles de un experimento.

    • Cada punto dentro de este espacio es un resultado posible.
    • Un evento es una región dentro de ese espacio.
    • La probabilidad del evento es el área de esa región dividida entre el área total.

    Ejemplo con un dado “geométrico”

    Supongamos que lanzamos un dado y queremos visualizarlo en un diagrama rectangular:

    • Cada resultado (1, 2, 3, 4, 5, 6) ocupa el mismo “espacio” dentro del rectángulo.
    • El área de cada sección es igual, así que la probabilidad de cada resultado es:

    $$P(\text{resultado}) = \frac{\text{área de la sección}}{\text{área total}} = \frac{1}{6}$$

    Aquí, área = probabilidad.
    Este enfoque funciona incluso si el dado está sesgado: las áreas de cada sección cambian según la probabilidad, pero la suma de todas las áreas sigue siendo 1.

    Distribuciones continuas

    El concepto de probabilidad como área es fundamental en variables continuas, donde los resultados posibles no son discretos. Por ejemplo, si lanzamos un dado “perfectamente continuo” que puede dar cualquier valor entre 0 y 1, entonces:

    • No podemos hablar de un solo resultado: la probabilidad de un valor exacto es 0.
    • Pero podemos calcular la probabilidad de un intervalo, que es proporcional al área bajo la curva de densidad.

    Esto es la base de la probabilidad continua y la función de densidad (PDF):

    $$P(a \leq X \leq b) = \int_{a}^{b} f(x) dx$$

    Aquí, la integral representa el área bajo la curva entre los puntos a y b, y esa área es la probabilidad de que X esté en ese intervalo.

    Visualizando la probabilidad como área

    Una forma muy clara de entenderlo es mediante un diagrama de rectángulos o gráficos de barras:

    • Cada barra representa un resultado posible.
    • La altura de la barra corresponde a la “densidad” o probabilidad.
    • El área de la barra es proporcional a la probabilidad del resultado.

    En variables continuas, reemplazamos las barras por curvas suaves.

    • Por ejemplo, la distribución normal es una curva de campana:
    • La probabilidad de un intervalo es el área bajo la curva en ese intervalo.

    Aplicaciones prácticas

    Visualizar la probabilidad como área tiene ventajas:

    1. Intuición inmediata: Nos ayuda a “ver” los eventos probables y menos probables.
    2. Distribuciones continuas: Fundamental en estadística, machine learning y análisis de datos.
    3. Comparación de eventos: Podemos comparar fácilmente qué evento es más probable observando qué área ocupa.
    4. Simulaciones y Monte Carlo: Al generar puntos aleatorios dentro de un espacio, contar cuántos caen dentro de un evento es equivalente a calcular el área y, por lo tanto, la probabilidad.

    En resumen

    • La probabilidad puede visualizarse como área dentro de un espacio de resultados.
    • En eventos discretos, el área es proporcional a la fracción de resultados posibles.
    • En variables continuas, la probabilidad es el área bajo la curva de densidad.
    • Este enfoque conecta geometría y estadística, haciendo que la probabilidad sea más intuitiva y visual.

  • Probabilidad y Modelos Probabilísticos

    La probabilidad es una herramienta matemática que nos permite cuantificar la incertidumbre asociada a fenómenos aleatorios. A través de ella, podemos estimar la posibilidad de que ocurran ciertos eventos y construir modelos que representen el comportamiento de sistemas inciertos: desde el lanzamiento de un dado hasta la predicción de enfermedades o el rendimiento de un modelo de Machine Learning.

    El estudio de la probabilidad se basa en modelos formales, llamados modelos de probabilidad, que se sustentan en axiomas y reglas fundamentales. En esta sección exploraremos estos conceptos, desde las bases hasta aplicaciones prácticas como la Ley de Bayes o la construcción de un Clasificador de Bayes desde cero.

    El Modelo de Probabilidad

    Un modelo de probabilidad es un marco conceptual y matemático que permite analizar y predecir el comportamiento de fenómenos aleatorios.

    Se apoya en dos componentes esenciales:

    • Espacio muestral (Ω): el conjunto de todos los resultados posibles de un experimento aleatorio.
    • Regla de probabilidad (P): una función que asigna valores entre 0 y 1 a cada subconjunto del espacio muestral.

    El objetivo de este modelo es establecer una ley de probabilidad, una regla que asigne de manera coherente valores no negativos a los eventos, reflejando nuestro grado de confianza o creencia en que ocurran.

    Asignación de Probabilidades

    La asignación de probabilidades consiste en atribuir valores numéricos a los eventos del espacio muestral. Reflejando la confianza o la creencia en la ocurrencia de esos eventos. 

    La probabilidad de un evento \( A \), denotada como \(P(A) \), representa qué tan probable es que \( A \) ocurra cuando se realiza el experimento.
    Cumple siempre:

    $$0 \leq P(A) \leq 1$$

    Ley de Laplace

    También conocida como la regla de la probabilidad clásica o equiprobable, establece que si un experimento aleatorio tiene resultados igualmente probables, entonces la probabilidad de un evento \(E\) es el número de resultados en \(|E|\) dividido por el número total de resultados posibles en el espacio muestral \(|S|\).

    $$P(E) = \frac{|E|}{|S|}$$

    Ejemplo práctico:
    Un bol contiene 3 bolas rojas y 2 azules.

    $$P(\text{Roja}) = \frac{3}{5} = 0.6$$

    Si no conocemos los colores, pero sabemos que hay 5 bolas idénticas, la probabilidad de sacar una cualquiera sería ( 1/5 ).

    Axiomas de la Probabilidad

    Formulados por Kolmogórov (1933), los axiomas definen la base formal de la probabilidad. Son las reglas fundamentales para definir las probabilidades de los eventos dentro del marco de la teoría de probabilidad

    No Negatividad:

    El primer axioma establece que la probabilidad de cualquier evento es siempre un número no negativo

    $$ P(A) \geq 0 $$

    Normalización:

    La probabilidad del espacio muestral completo, representado como \(S\), es igual a 1. Esto significa que es seguro que ocurrirá algún resultado del experimento aleatorio. Se expresa como:

    $$P(S)=1$$

    Aditividad (Regla de la Suma para eventos disjuntos):

    Para dos eventos  \(A\)  y \(B\) que no pueden ocurrir al mismo tiempo (es decir, son mutuamente excluyentes), la regla de la suma establece que la probabilidad de que ocurra  \(A\) o \(B\) es simplemente la suma de sus probabilidades individuales:

    $$P(A∪B)=P(A)+P(B)$$

    Regla de la Suma para eventos no excluyentes

    La regla de la suma es una derivación del axioma de aditivita en caso de que los eventos no sean mutuamente excluyentes. Esta permite calcular la probabilidad de que ocurra al menos uno de dos eventos.

    $$P(A \cup B) = P(A) + P(B) – P(A \cap B)$$

    Ejemplo (cartas):
    Probabilidad de sacar un as o un corazón:

    $$P(A \cup B) = \frac{4}{52} + \frac{13}{52} – \frac{1}{52} $$

    $$P(A \cup B) = \frac{16}{52} = \frac{4}{13}$$

    Ejemplo (dados):
    Número impar o mayor que 4:

    $$P(A \cup B) = \frac{3}{6} + \frac{2}{6} – \frac{1}{6} $$

    $$P(A \cup B)= \frac{4}{6} = \frac{2}{3}$$

    Regla de la Multiplicación general

    Es un teorema derivado de los axiomas de probabilidad se define a partir del concepto de probabilidad condicional. Permite calcular la probabilidad de que ocurran dos o más eventos a la vez.

    Dado que A paso, ¿Cuál es la probabilidad de B?

    $$P(A \cap B) = P(A) \times P(B|A)$$

    Eventos independientes:

    Si A y B son independientes (el resultado de uno no afecta al otro):

    $$P(B∣A)=P(B)$$

    Entonces:

    $$P(A \cap B) = P(A) \times P(B)$$

    Ejemplo (cartas sin reemplazo):

    $$P(\text{Dos Ases}) = \frac{4}{52} \times \frac{3}{51} $$

    $$P(\text{Dos Ases}) = \frac{12}{2652} \approx 0.0045$$

    Diagramas de Árbol

    Un diagrama de árbol representa de forma visual las posibles secuencias de eventos y sus probabilidades. Cada rama muestra un resultado y la probabilidad asociada.

    Ejemplo (dos monedas):

    Cada camino representa un evento y su probabilidad se obtiene multiplicando las ramas.

    Derivaciones de los Axiomas

    A partir de estos axiomas, se pueden deducir varias reglas importantes que son esenciales para el trabajo práctico en probabilidad y estadística.:

    Probabilidad del Complemento de un Evento:

    Una de las derivaciones más directas es la probabilidad del complemento de un evento. Si A es un evento, entonces el complemento de A, denotado \( A^c\), representa la ocurrencia de \(no−A\). Utilizando los axiomas, se puede demostrar que:

    $$P(A^c) = 1 – P(A)$$

    Esto se deduce del hecho de que \( A\), y \( A^c\) son mutuamente excluyentes y su unión es el espacio muestral completo, cuya probabilidad es 1.

    Probabilidad de Eventos Vacíos y Ciertos:

    Directamente de los axiomas, se establece que la probabilidad del conjunto vacío \(∅\), que es un evento imposible, es 0:

    $$P(\emptyset) = 0 $$

    Asimismo, la probabilidad del espacio muestral completo \( Ω\) , que representa un evento seguro, es 1:

    $$P(Ω)=1$$

    Monotonicidad:

    Si un evento A es un subconjunto de otro evento B, entonces la probabilidad de A es menor o igual a la probabilidad de B. Esto refleja la idea de que la ocurrencia de B incluye la ocurrencia de A junto con posiblemente otros resultados:

    $$A \subseteq B \Rightarrow P(A) \leq P(B$$

    Probabilidad de unión:

    Para dos eventos A y B, la probabilidad de su unión puede ser expresada en términos de las probabilidades de A, B, y su intersección \(A∩B\). Esta regla se aplica incluso si A y B no son disjuntos y se deriva como sigue:

    $$ P(A \cup B) = P(A) + P(B) – P(A \cap B)$$

    Esto ajusta la aditividad para el caso de eventos que no son mutuamente excluyentes, evitando la sobre contabilización de la intersección de A y B.

    Subaditividad:

    La subaditividad se refiere a la propiedad de que la probabilidad de la unión de cualquier colección de eventos es menor o igual a la suma de sus probabilidades individuales. Para una secuencia de eventos \(A1,A2,….,An\):

    Esta propiedad es particularmente útil para tratar con uniones de eventos que no son necesariamente disjuntos.

    Límites de Probabilidad:

    Cualquier probabilidad \(P(A)\) para un evento A siempre estará en el rango de 0 a 1, inclusive. Esto se deriva del hecho de que todas las probabilidades son no negativas y que la probabilidad del espacio muestral, el conjunto más grande posible, es 1.

    Tablas de Contingencia

    Organizan y muestran las probabilidades de combinaciones de dos variables.+

    Ejemplo:

    En una ciudad el 60% de las personas tienen ojos negros, el 80% tienen cabello negro y el 50% tienen cabello negro y ojos negros. Si se selecciona una persona al azar, calcule la probabilidad que:

    • No tenga los ojos negros.
    • Tenga los ojos o cabello negro
    • O –> Ojos Negros
    • C –> Cabellos Negros
    VariablesOjos NegrosOjos No NegrosTotal
    Cabello Negro50%30%80%
    Cabello No Negro10%10%20%
    Total60%40%1.00

    Las tablas permiten calcular probabilidades marginales, conjuntas y condicionales de manera sencilla.

    Modelos de Probabilidad Discretos

    Los modelos de probabilidad discretos se ocupan de experimentos donde el número de posibles resultados es finito o contable. Un ejemplo clásico es el lanzamiento de dados, donde los resultados posibles pueden listarse de manera explícita.

    Ejemplo: dos dados de cuatro caras.

    Supongamos que tenemos dos dados de cuatro caras, donde cada resultado tiene una probabilidad de 1/161/16, podemos construir una tabla que muestre todas las combinaciones posibles de los resultados de los dos dados. Cada dado puede mostrar uno de cuatro resultados posibles (1, 2, 3, o 4), lo que nos da un total de 4×4=164×4=16 combinaciones posibles para los dos dados. 

    Probabilidades1234
    11/161/161/161/16
    21/161/161/161/16
    31/161/161/161/16
    41/161/161/161/16
    Sumas1234
    12345
    23456
    34567
    45678

    Probabilidad de suma par: 8 combinaciones → ( 8/16 = 1/2 )
    Probabilidad de al menos un 4: 7 combinaciones → ( 7/16 )


    Ejemplo Aplicado: Diagnóstico Médico

    Un médico sabe que:

    • \( P(\text{Malaria}) = 0.6 \)
    • \( P(\text{Tifoidea}) = 0.7 \)
    • \( P(\text{Ambas}) = 0.4 \)

    La probabilidad de que no tenga ninguna enfermedad:

    $$P(\text{No M ni T}) = 1 – P(\text{M} \cup \text{T}) = 1 – [0.6 + 0.7 – 0.4] = 0.1$$

    El 10% de los pacientes no tendra ninguna enfermedad.

    En resumen

    • Las distribuciones de probabilidad son la base para el análisis estadístico, la simulación y la inferencia.
    • La probabilidad mide la incertidumbre.
    • Todo experimento tiene un conjunto de posibles resultados (espacio muestral).
    • Los eventos son subconjuntos de ese espacio.
    • Las probabilidades se pueden estimar mediante la frecuencia de los resultados en ensayos repetidos.
    • La suma de las probabilidades de todos los resultados posibles siempre es 1.
  • Experimento Aleatorio, Espacio Muestral y Eventos

    ¿Qué es un Experimento Aleatorio?

    Se refiere a cualquier proceso o acción que se realiza bajo condiciones específicas y controladas, pero que, sin embargo, puede producir diferentes resultados en cada realización, sin que sea posible predecir con certeza cuál será el resultado específico en una instancia particular del experimento. La característica distintiva de un experimento aleatorio es esta incertidumbre inherente en el resultado.

    Aunque las condiciones sean las mismas, el resultado puede variar en cada repetición.
    La característica clave es la incertidumbre del resultado.

    Características de un Experimento Aleatorio

    1. Múltiples resultados posibles:
      Puede producir más de un resultado distinto.
      Ejemplo: al lanzar un dado, los posibles resultados son ( {1, 2, 3, 4, 5, 6} ).
    2. Resultado impredecible:
      No se puede saber con certeza cuál será el resultado antes de realizar el experimento.
    3. Repetibilidad:
      El experimento puede repetirse bajo las mismas condiciones, manteniendo las mismas probabilidades para cada posible resultado.

    Ejemplos Clásicos

    ExperimentoEspacio Muestral
    Lanzar una moneda{Cara, Cruz}
    Lanzar un dado{1, 2, 3, 4, 5, 6}
    Extraer una carta de una baraja52 posibles resultados
    Medir el tiempo de vida de un componentevalores continuos en segundos o días

    Resultado (Punto Muestral)

    En el contexto de experimentos aleatorios en probabilidad y estadística. Un resultado es definido como el resultado observable de realizar un experimento, el cual, bajo las mismas condiciones, puede variar en cada realización. Esto ilustra la naturaleza aleatoria de tales experimentos, donde no es posible predecir con certeza el resultado específico antes de realizar el experimento.

    Ejemplos:

    • Lanzar una moneda 4 veces: \(B = {Cara, Cruz, Cara, Cara} \)
    • Lanzar un dado 2 veces: \(A = {4, 6} \)
    • Extraer una carta: \( C = {“A de corazones”} \)

    Espacio Muestral (S o Ω)

    El espacio muestral es el conjunto de todos los posibles resultados de un experimento aleatorio. simbolizado comúnmente como S o Ω. Cada resultado individual dentro del espacio muestral es un punto muestral

    $$S = {R_1, R_2, …, R_n}$$

    Ejemplos:

    • Moneda: \( S = {Cara, Cruz} \)
    • Dos monedas: \(S = {(Cara, Cara), (Cara, Cruz), (Cruz, Cara), (Cruz, Cruz)} \)
    • Dado de 6 caras: \( S = {1, 2, 3, 4, 5, 6} \)

    Algunos espacios muestrales pueden ser infinitos, como lanzar una moneda hasta obtener “Cara”. Aunque sea infinito, sigue siendo contable, ya que podemos enumerar los posibles resultados.

    Ejemplo en Python

    import itertools
    
    # Lanzar dos monedas
    monedas = ["Cara", "Cruz"]
    S = list(itertools.product(monedas, repeat=2))
    print("Espacio muestral:", S)

    Salida:

    Espacio muestral: [('Cara', 'Cara'), ('Cara', 'Cruz'), ('Cruz', 'Cara'), ('Cruz', 'Cruz')]

    Eventos

    Un evento o suceso se define como uno o cualquier conjunto de resultados posibles de un experimento. El espacio muestral S o Ω de un experimento es el conjunto de todos los posibles resultados individuales, y un evento es cualquier subconjunto de este espacio. Esto incluye desde el conjunto vacío, que representa un evento que nunca ocurre, hasta el espacio muestral completo, que es un evento que siempre ocurre.

    • Evento seguro: ocurre siempre → coincide con todo el espacio muestral.
    • Evento imposible: nunca ocurre → conjunto vacío \(\emptyset \).

    Ejemplo:

    Lanzamos dos monedas:

    $$S = {(Cara, Cara), (Cara, Cruz), (Cruz, Cara), (Cruz, Cruz)}$$

    Evento \(A\): “la primera moneda sea Cara”
    $$A = {(Cara, Cara), (Cara, Cruz)}$

    Ejemplo en Python

    S = [("Cara", "Cara"), ("Cara", "Cruz"), ("Cruz", "Cara"), ("Cruz", "Cruz")]
    A = [x for x in S if x[0] == "Cara"]
    print("Evento A:", A)

    Salida:

    Evento A: [('Cara', 'Cara'), ('Cara', 'Cruz')]

    Eventos Mutuamente Excluyentes

    Dos eventos son mutuamente excluyentes si no pueden ocurrir al mismo tiempo.
    En el lanzamiento de una moneda, los eventos “Cara” y “Cruz” son mutuamente excluyentes.

    Ejemplo con Dado:

    • ( A ): número impar → {1, 3, 5}
    • ( B ): número mayor que 4 → {5, 6}
    • Intersección: {5}
      ⇒ No son mutuamente excluyentes.

    Visualización con Diagramas de Venn

    Podemos usar matplotlib-venn para visualizar intersecciones de eventos.

    from matplotlib import pyplot as plt
    from matplotlib_venn import venn2
    
    A = set([1, 3, 5])
    B = set([5, 6])
    
    venn2([A, B], set_labels=('A: números impares', 'B: > 4'))
    plt.title("Eventos A y B (no mutuamente excluyentes)")
    plt.show()

    Resumen Conceptual

    ConceptoDescripciónEjemplo
    Experimento AleatorioProceso con resultado inciertoLanzar un dado
    ResultadoUn resultado individual“5”
    Espacio Muestral (S)Conjunto de todos los resultados{1,2,3,4,5,6}
    EventoSubconjunto de S“número par” = {2,4,6}
    Eventos Mutuamente ExcluyentesNo pueden ocurrir simultáneamente“Cara” y “Cruz”

    En la práctica estadística

    En estadística aplicada y machine learning, estos conceptos son fundamentales porque:

    • Permiten modelar la incertidumbre (base de la probabilidad).
    • Sirven para definir variables aleatorias y distribuciones.
    • Son la base de los métodos inferenciales, como estimación o pruebas de hipótesis.

    ¿Quieres que el siguiente artículo de la serie sea sobre variables aleatorias (discretas y continuas) o sobre probabilidad condicional y regla de Bayes?

  • Conjuntos en Estadística: Fundamentos y Aplicación en Python

    Los conjuntos son uno de los conceptos más básicos y a la vez más importantes en estadística y probabilidad. Toda la teoría de la probabilidad —y, por extensión, gran parte del análisis estadístico— se construye sobre la teoría de conjuntos, que nos permite describir y razonar sobre eventos, muestras y resultados posibles.

    ¿Qué es un Conjunto?

    Un conjunto es una colección bien definida de elementos, que pueden ser números, personas, objetos o resultados de un experimento.

    En estadística, usamos conjuntos para describir:

    • El espacio muestral (todos los resultados posibles de un experimento).
    • Los eventos (subconjuntos del espacio muestral).
    • Las relaciones entre distintos eventos.

    Por ejemplo:

    Si lanzamos un dado, el espacio muestral es

    $$S = {1, 2, 3, 4, 5, 6}$$

    Un evento puede ser “obtener un número par”:

    $$A = {2, 4, 6}$$

    Operaciones entre Conjuntos

    Las operaciones entre conjuntos reflejan relaciones entre eventos en probabilidad.

    OperaciónDescripciónSímboloEjemplo (en el dado)
    UniónOcurre A o B (o ambos)\(A \cup B\)“Número par o mayor que 4”
    IntersecciónOcurre A y B a la vez\(A \cap B\)“Número par y mayor que 4”
    ComplementoNo ocurre A\(A’\) o \(A^c\)“Número impar”
    DiferenciaElementos en A que no están en B\(A – B\)“Números pares que no son mayores que 4”

    Estas operaciones son la base del cálculo de probabilidades, porque cada evento se asocia con un conjunto de resultados, y las reglas de probabilidad siguen las mismas leyes que los conjuntos (como las Leyes de De Morgan).

    Ejemplo Práctico en Python

    Podemos representar los conjuntos y operaciones anteriores fácilmente con set:

    # Espacio muestral del lanzamiento de un dado
    S = {1, 2, 3, 4, 5, 6}
    
    # Eventos
    A = {2, 4, 6}  # número par
    B = {4, 5, 6}  # número mayor que 3
    
    # Operaciones entre conjuntos
    union = A | B
    interseccion = A & B
    complemento = S - A
    diferencia = A - B
    
    print("A ∪ B =", union)
    print("A ∩ B =", interseccion)
    print("A' =", complemento)
    print("A - B =", diferencia)

    Salida:

    A ∪ B = {2, 4, 5, 6}
    A ∩ B = {4, 6}
    A' = {1, 3, 5}
    A - B = {2}

    Conjuntos y Probabilidad

    En la teoría de la probabilidad, los conjuntos se usan para definir y combinar eventos.
    La probabilidad de un evento \( A \) se define como la proporción de casos favorables respecto al total de casos posibles:

    $$P(A) = \frac{|A|}{|S|}$$

    Ejemplo:

    $$S = {1,2,3,4,5,6}, \quad A = {2,4,6}$$

    $$P(A) = \frac{3}{6} = 0.5$$

    En Python, podemos calcularlo así:

    S = {1,2,3,4,5,6}
    A = {2,4,6}
    
    P_A = len(A) / len(S)
    print(f"P(A) = {P_A}")

    Salida:

    P(A) = 0.5

    Leyes de De Morgan en Probabilidad

    Las Leyes de De Morgan conectan los conceptos de unión, intersección y complemento, tanto en conjuntos como en eventos probabilísticos:

    $$(A \cup B)’ = A’ \cap B’$$

    $$(A \cap B)’ = A’ \cup B’$$

    Estas leyes permiten simplificar cálculos y entender mejor la relación entre eventos.

    Verificación en Python: assert no devuelve ningún valor. Es una instrucción de verificación:

    • Si la condición es verdadera, no hace nada.
    • Si la condición es falsa, lanza un AssertionError.
    U = {1, 2, 3, 4, 5, 6}
    A = {1, 2, 3}
    B = {3, 4, 5}
    
    # Leyes de De Morgan:
    # (A ∪ B)' = A' ∩ B'
    # (A ∩ B)' = A' ∪ B'
    
    assert U - (A | B) == (U - A) & (U - B)
    assert U - (A & B) == (U - A) | (U - B)
    
    print("Ambas leyes de De Morgan se verifican correctamente.")

    Representación Visual: Diagramas de Venn

    En estadística, los diagramas de Venn son una herramienta visual para representar eventos y sus intersecciones.

    En Python podemos generarlos fácilmente:

    from matplotlib import pyplot as plt
    from matplotlib_venn import venn2
    
    A = {1, 2, 3, 4, 5}
    B = {4, 5, 6, 7, 8}
    
    union = A | B
    interseccion = A & B
    diferencia = A - B
    
    print("A ∪ B:", union)
    print("A ∩ B:", interseccion)
    print("A - B:", diferencia)
    
    venn2([A, B], set_labels=('A', 'B'))
    plt.title("Operaciones entre conjuntos")
    plt.show()
    Union - A ∪ B: {1, 2, 3, 4, 5, 6, 7, 8}
    Interseccion - A ∩ B: {4, 5}
    Diferencia -  A - B: {1, 2, 3}

    Estos gráficos son muy útiles al enseñar reglas de probabilidad, interdependencia de eventos y espacios muestrales.

    En Resumen

    ConceptoEn EstadísticaEn Python
    Espacio muestralTodos los resultados posiblesset()
    EventoSubconjunto de resultadossubconjunto de set()
    Probabilidad\(P(A)\)A
    Unión de eventos\(A \cup B\)`A
    Intersección\(A \cap B\)A & B
    Complemento\(A’\)S - A
    Diferencia\(A – B\)A - B