01 · Punto de partida
Una población, varios perfiles
El Tema 11 dio el algoritmo (elegir componente y muestrear). Este tema describe el objeto: la distribución mezcla. Tiempos de atención día/noche, demanda con días cero, retornos con régimen calmo/turbulento: un solo pico no alcanza, hacen falta pesos + componentes.
Entender sus momentos y su forma evita dos errores caros: confundir mezcla con suma de variables y pedirle a una normal única que ajuste dos picos.
- ¿Cómo se escribe f, F, media y varianza de una mezcla?
- ¿Cuándo se ve bimodal y cuándo con un solo hombro?
- ¿Mezcla vs. convolución (suma)?
- ¿Cómo se valida una mezcla simulada?
02 · Definición
Densidad, media y varianza de la mezcla
Con pesos wᵢ ≥ 0, Σwᵢ = 1 y componentes Fᵢ con media μᵢ y varianza σᵢ²:
Pondera densidades
f mezcla es promedio pesado de fᵢ punto a punto. Con soportes disjuntos se ven bloques; solapados, hombros o dos picos.
Varianza total
Ley total: promedio de varianzas + varianza de medias. Mezclar grupos distintos siempre infla la varianza respecto al promedio interno.
No es suma
Mezcla = elegir UNA rama (o esto o lo otro). Convolución = sumar valores (esto más lo otro). Símbolos distintos, histogramas distintos.
| Mezcla | Media | Forma típica |
|---|---|---|
| 0,5·N(−2,07²)+0,5·N(2,07²) | 0 | Bimodal simétrica |
| 0,4·Exp(1)+0,6·Exp(0,2) | 3,4 | Decreciente con cola pesada |
| 0,3·δ₀+0,7·Poisson(2) | 1,4 | Pico en 0 + joroba en 2 |
03 · Anatomía
Pesos, separación y bimodalidad
- Pesos w
- Fracción de cada subpoblación. Se estiman por conteo o por EM; en simulación se fijan por escenario (“30 % nocturno”).
- Separación vs. dispersión
- Dos normales se ven bimodales si |μ₁−μ₂| > ~2σ. Cerca, se fusionan en un pico ancho: sigue siendo mezcla aunque “parezca” una sola.
- Variable latente I
- Etiqueta no observada del componente. Guardarla en la simulación permite auditar ramas (¿la cola vino de la Exp lenta?).
- Ceros y truncamientos
- δ₀ (masa en 0) + conteo/densidad: demanda intermitente, siniestros. Caso límite de mezcla discreta-continua.
Mezcla
Elegir una rama
Histograma con picos/hombros de cada fᵢ. Media entre medias, varianza inflada por la distancia entre grupos.
Suma (convolución)
Sumar valores
Binomial = suma de Bernoulli; gamma entera = suma de exponenciales. Un solo pico que se corre y angosta (relativamente).
04 · Catálogo de mezclas útiles
Del mostrador al riesgo
- 1Bimodales día/noche.
Dos normales/uniformes por turno. El peso es la fracción horaria. (Laboratorio)
- 2Hiperexponencial.
Mezcla de exponenciales: más flexible que una sola para tiempos con cola. Riesgo y fiabilidad.
- 3Cero-inflados.
Masa en 0 + Poisson/binomial/exponencial. Demanda esporádica, lluvias, siniestros.
- 4Jerárquicas continuas.
θ ~ H luego X|θ. Puente a Gamma-Poisson (binomial negativa) y a Bayes. (Temas 26–29)
05 · Representación en Python
Mezcla normal con momentos exactos
Guía: 0,5·N(−2, 0,7²) + 0,5·N(2, 0,7²). Media 0, varianza 0,49 + 4 = 4,49. Se muestrea por composición con gauss por rama.
Python en tu navegador. Cambiá w a 0,8 y verificá que la media se mueve a −1,2.
import random
random.seed(90)
w, mu1, mu2, sd, N = 0.5, -2.0, 2.0, 0.7, 8000
m = [(random.gauss(mu1, sd) if random.random() < w
else random.gauss(mu2, sd)) for _ in range(N)]
media = sum(m) / N
var = sum((x - media) ** 2 for x in m) / N
print("media:", round(media, 3), "teórica:", w * mu1 + (1 - w) * mu2)
print("var:", round(var, 3), "teórica:",
round(w * (sd**2 + mu1**2) + (1-w) * (sd**2 + mu2**2), 3))
print("P(X>3):", round(sum(1 for x in m if x > 3) / N, 3))
Media ≈ 0 y var ≈ 4,49. Con w = 0,8 la media ≈ −1,2 y el pico izquierdo domina.
06 · Exploración
Laboratorio: balancear dos campanas
Movete w con N fijo. La curva naranja es la mezcla teórica w·N(−2,07²)+(1−w)·N(2,07²). Con w = 0,5 hay dos picos iguales; en extremos uno absorbe al otro.
Mezcla de normales
f(x) = w·φ₋₂ + (1−w)·φ₊₂
Con w 0,5, media 0 y varianza 4,49 bimodal.
Histograma en densidad sobre [−5,5]. Probá w = 0,9 (pico izquierdo) y N = 500 (ruido en el valle).
Preguntas para explorar
- Con w = 0,5, ¿media y varianza teóricas? Leelas en el panel.
- Pasá a w = 0,9. ¿La media tiende a −1,6? ¿El pico derecho desaparece o queda como hombro?
- ¿Por qué la varianza (≈ 4,5) supera tanto a 0,49 de cada campana?
Ver respuestas sugeridas
- Media 0, varianza 4,49.
- Media −1,6; el pico derecho queda como hombro (10 % de masa).
- Por la distancia entre medias (4): el término “varianza entre grupos” domina.
07 · Comprensión
Confusiones frecuentes
«Mezcla de normales es normal»
No: la mezcla es bimodal/asimétrica y su varianza incluye la distancia entre medias. Solo la suma (convolución) de normales independientes es normal.
«Los pesos pueden ser cualesquiera»
Deben ser ≥ 0 y sumar 1. Pesos 2 y 3 sin normalizar inflan f a área 5: ya no es densidad.
«Si no se ven dos picos, no es mezcla»
Componentes cercanas se fusionan visualmente pero la varianza delata la heterogeneidad. Mirá varianza y CDF, no solo picos.
«La etiqueta I no hace falta guardarla»
Sin I no podés validar ramas ni explicar colas. En simulación, I es gratis y vale oro para depurar.
08 · Práctica guiada
Ejercicios con Python
Ejercicio 1: varianza que delata heterogeneidad
Mezcla 0,5·N(−2,07²)+0,5·N(2,07²): calculá la varianza teórica 4,49 a mano y verificá con 8000 muestras (semilla 91).
import random
random.seed(91)
N = 8000
m = [(random.gauss(-2, 0.7) if random.random() < 0.5
else random.gauss(2, 0.7)) for _ in range(N)]
media = sum(m) / N
print("media:", round(media, 3))
print("var:", round(sum((x - media) ** 2 for x in m) / N, 3), "vs 4.49")
Ver solución razonada
Var = 0,5·(0,49+4) + 0,5·(0,49+4) − 0² = 4,49. La muestral debe caer 4,3–4,7. Si da ≈ 0,5, generaste una sola rama.
Ejercicio 2: cero-inflado de demanda
0,3·δ₀ + 0,7·Poisson(2) por composición simple. Estimá la media 1,4 y P(X=0) ≈ 0,395.
import random
import math
random.seed(92)
p0, lam, N = 0.3, 2.0, 8000
def poisson(lam):
L, k, p = math.exp(-lam), 0, 1.0
while True:
p *= random.random()
if p <= L:
return k
k += 1
m = [0 if random.random() < p0 else poisson(lam) for _ in range(N)]
print("media:", round(sum(m) / N, 3), "vs 1.4")
print("P0:", round(m.count(0) / N, 3), "vs 0.395")
Ver solución
Ambos deben calzar. El 0 viene de dos fuentes: el inflado estructural y los ceros propios del Poisson.
Ejercicio 3: mezcla vs suma, el duelo
Compará mezcla 0,5·U(0,1)+0,5·U(3,4) (bimodal) contra suma U(0,1)+U(3,4) (triangular en [3,5]). Medias 2,0 vs 4,0: el histograma lo deja clarísimo.
Ver una posible respuesta
import random
random.seed(93)
N = 6000
mezcla = [(random.random() if random.random() < 0.5 else 3 + random.random())
for _ in range(N)]
suma = [random.random() + (3 + random.random()) for _ in range(N)]
print("mezcla:", round(sum(mezcla) / N, 3), "vs 2.0")
print("suma:", round(sum(suma) / N, 3), "vs 4.0")
print("mezcla en [1,3]:", sum(1 for x in mezcla if 1 < x < 3) / N,
"| suma en [1,3]:", sum(1 for x in suma if 1 < x < 3) / N)
La mezcla deja el hueco [1,3] vacío; la suma vive en [3,5]. Misma piezas, operaciones opuestas.
09 · Síntesis
Ideas para recordar
- f mezcla = Σwᵢfᵢ; media Σwᵢμᵢ; varianza con término entre grupos.
- Bimodal si la separación supera ~2σ; si no, pico ancho con varianza inflada.
- Mezcla = elegir rama; suma = sumar valores. No confundir.
- Guardar la etiqueta I permite validar ramas y explicar colas.
- Se genera por composición: discreta para I + generador por rama.
En el próximo tema aceleraremos la rama discreta: el método del alias en O(1).