Modelos Probabilísticos: La Gramática de la Incertidumbre
En el corazón de cada decisión tomada por un agente inteligente reside un cálculo de probabilidad. Para una IA, el mundo no es determinista, sino una red de posibilidades estocásticas. Este capítulo explora los modelos matemáticos que nos permiten cuantificar esa incertidumbre, transformando el caos de los datos en estructuras predecibles.
Distribuciones Discretas
Utilizamos estos modelos cuando los resultados de nuestro experimento son contables y finitos, como el número de usuarios que hacen clic en un anuncio o la cantidad de intentos necesarios para que un agente refuerce una conducta.
Distribución Uniforme Discreta:
Es el modelo más elemental: todos los resultados posibles tienen la misma probabilidad. Como un dado justo, ningún resultado está favorecido sobre otro.
|
Límites inferior y superior del rango ( ). |
|
Número de valores posibles: . |
-
Media: = \frac{a + b}{2}]
-
Varianza:
# Ejemplo: Simular un dado justo (Uniforme Discreta de 1 a 6)
key = Nx.Random.key(42)
{dado, _key} = Nx.Random.randint(key, 1, 7, shape: {1000})
# Frecuencia de cada cara (debería ser ~167 cada una)
Distribución Binomial:
La Binomial es el modelo de referencia para experimentos de "éxito o fracaso". Imagina intentos independientes (ensayos de Bernoulli), donde cada uno tiene una probabilidad fija de éxito.
|
Número total de ensayos independientes. |
|
Probabilidad de éxito en cada ensayo ( ). |
|
Número de éxitos observados ( ). |
-
Media (Esperanza): = np]
-
Varianza:
|
Uso en IA: Es la base para evaluar modelos de clasificación binaria. Si un modelo tiene un 90% de precisión ( ), la Binomial nos dice qué tan probable es que acierte exactamente veces en nuevas predicciones. |
Distribución Geométrica:
Este modelo responde a la pregunta: ¿Cuántos fallos ocurrirán antes de ver nuestro primer éxito? Es el modelo de la "espera discreta".
|
Probabilidad de éxito en cada intento. |
|
Número de fallos acumulados antes del primer éxito ( ). |
-
Media: = \frac{1-p}{p}]
-
Varianza:
# Ejemplo: ¿Cuántos correos debe enviar un bot antes de obtener una respuesta?
# Si la probabilidad de respuesta es p=0.3
p = 0.3
media_espera = (1 - p) / p # ~2.33 intentos fallidos en promedio
Distribución de Poisson:
Ideal para modelar la ocurrencia de eventos raros en un intervalo continuo de tiempo o espacio.
|
Tasa media de ocurrencia (número esperado de eventos). |
|
Número de eventos que ocurren en el intervalo ( ). |
-
Media y Varianza: = V(X) = \lambda]
|
Uso en IA: Fundamental para modelar el tráfico de peticiones en un servidor de inferencia o la llegada de sensores en un sistema de IoT. |
Distribución Hipergeométrica:
A diferencia de la Binomial, la Hipergeométrica modela el muestreo sin reemplazo. Es vital cuando la extracción de un elemento altera significativamente las probabilidades de los siguientes.
|
Tamaño total de la población. |
|
Número de elementos con la característica de interés (éxitos en la población). |
|
Tamaño de la muestra extraída. |
|
Número de éxitos observados en la muestra. |
-
Media: = \frac{Dn}{N}]
-
Varianza:
# Ejemplo: Probabilidad de obtener x=2 piezas defectuosas en una muestra de n=5,
# de un lote de N=20 con D=4 defectuosas totales.
# Nota: La librería Statistics maneja esto analíticamente.
alias Statistics.Distributions.Hypergeometric
Hypergeometric.pmf(2, 4, 20, 5) # ~0.135
Distribución Binomial Negativa:
Modela el número de fallos ( ) que ocurren antes de alcanzar un número objetivo de éxitos ( ). Es una extensión de la Geométrica.
|
Número de éxitos objetivo. |
|
Probabilidad de éxito en cada intento. |
|
Número de fallos observados antes del éxito -ésimo. |
# Ejemplo: Un agente de RL necesita 3 recompensas (n=3) para aprender una tarea.
# Si la probabilidad de recompensa por acción es p=0.4,
# ¿probabilidad de fallar exactamente 5 veces (x=5) antes del 3er éxito?
n = 3; p = 0.4; x = 5
# Cálculo manual con la fórmula:
combinatorio = div(factorial(n + x - 1), factorial(n - 1) * factorial(x))
prob = combinatorio * :math.pow(1 - p, x) * :math.pow(p, n)
# prob ≈ 0.100
Distribuciones Continuas
A diferencia de las discretas, las distribuciones continuas modelan variables que pueden tomar cualquier valor infinitamente preciso en un rango real (como el tiempo, el peso o los espacios latentes de un Autoencoder).
Distribución Uniforme Continua:
Todos los valores en un intervalo ] son igualmente probables. Es el modelo de la "ignorancia completa" sobre un rango.
-
Media: = \frac{a + b}{2}]
-
Varianza:
# Ejemplo: Generar valores uniformes entre 0 y 1
key = Nx.Random.key(42)
{valores, _key} = Nx.Random.uniform(key, shape: {1000})
Distribución Normal:
La "Campana de Gauss" es el pilar central de la estadística. Según el Teorema Central del Límite, la suma de variables aleatorias independientes tiende a ser Normal, sin importar su origen.
|
Media o centro de la distribución. |
|
Desviación estándar (dispersión). |
|
Valor real a evaluar ( ). |
# Ejemplo: Generación de 1000 muestras para inicializar los pesos de una neurona.
key = Nx.Random.key(42)
{weights, _new_key} = Nx.Random.normal(key, 0.0, 0.1, shape: {1000})
Distribución Beta:
Se define estrictamente en el intervalo . Es la herramienta preferida en la inferencia Bayesiana para modelar probabilidades desconocidas.
|
Parámetros de forma (shape) que inclinan la curva hacia 0 o 1. |
# Ejemplo: Un agente usa una distribución Beta para estimar la probabilidad
# de que un botón dé recompensa. Inicialmente (a=1, b=1) es una Normal Uniforme.
alias Statistics.Distributions.Beta
Beta.pdf(0.5, 1, 1) # Retorna 1.0 (Uniforme)
Distribución Gamma y Exponencial
La Gamma modela el tiempo hasta que ocurren eventos independientes. El caso especial es la Distribución Exponencial, que modela el tiempo entre eventos.
|
Parámetro de forma (k). |
|
Parámetro de escala (theta). |
# Ejemplo: Modelando el tiempo de decaimiento de una señal en una red neuronal temporal.
alias Statistics.Distributions.Exponential
Exponential.pdf(2.0, 1.5) # x=2.0, lambda=1.5
Modelos Bidimensionales
En el aprendizaje profundo, rara vez trabajamos con variables aisladas. La capacidad de modelar la interacción entre dos o más variables es lo que permite a las redes neuronales capturar patrones complejos.
Distribución Normal Bivariante
Describe el comportamiento conjunto de dos variables e . Es la base de las Redes Bayesianas y de los modelos de regresión lineal.
|
Medias de e . |
|
Desviaciones estándar. |
|
Coeficiente de correlación ( ). |
|
Covarianza: El grado de variación conjunta se define como . |
Generando Datos Bivariantes en Nx
# Generar muestras de una distribución normal bivariante
# con correlación rho = 0.7
key = Nx.Random.key(42)
# Generamos dos normales independientes
{z1, key} = Nx.Random.normal(key, 0.0, 1.0, shape: {1000})
{z2, _key} = Nx.Random.normal(key, 0.0, 1.0, shape: {1000})
# Aplicamos la transformación de Cholesky para introducir correlación
rho = 0.7
x = z1
y = Nx.add(Nx.multiply(rho, z1), Nx.multiply(:math.sqrt(1 - rho * rho), z2))
# x e y ahora tienen correlación ~0.7
Referencia Técnica: El Ecosistema Elixir
Para implementar estos modelos, Elixir ofrece dos caminos complementarios dependiendo de si buscas velocidad masiva (IA) o precisión analítica (Estadística).
1. Generación Masiva con Nx.Random
Utiliza esta librería para inicializar pesos, añadir ruido a un agente o realizar simulaciones masivas en GPU/NIFs.
| Modelo | Función | Aplicación Típica |
|---|---|---|
Normal |
|
Inicialización de parámetros. |
Uniforme |
|
Exploración aleatoria, dropout. |
Binomial |
|
Modelado de eventos discretos. |
Beta |
|
Muestreo en Reinforcement Learning. |
t-Student |
|
Robustez frente a outliers. |
2. Análisis Preciso con Statistics.Distributions
Ideal para validación de hipótesis, cálculo de p-valores y análisis exploratorio. Una alternativa más moderna dentro del ecosistema ML es la librería Scholar, que integra estos cálculos directamente con el pipeline de Nx.
| Función | Propósito |
|---|---|
|
Probabilidad en un punto exacto (Masa/Densidad). |
|
Probabilidad acumulada (Área a la izquierda). |
|
Cuantil (Inversa de la CDF). Dado el %, devuelve el valor. |
alias Statistics.Distributions.Normal
# ¿Qué valor 'z' deja el 2.5% de probabilidad en la cola derecha?
# (Equivalente al 97.5% a la izquierda)
z_valor = Normal.ppf(0.975, 0, 1) # ~1.96
# ¿Cuál es la densidad en el centro de una Normal estándar?
densidad = Normal.pdf(0, 0, 1) # ~0.3989
|
Regla de Oro para el Desarrollador:
|