5 · Varianza, desviación estándar y por qué n−1
La dispersión importa tanto como el centro — y un factor de corrección explica por qué toda biblioteca de estadística tiene un argumento 'ddof'.
La varianza es la distancia cuadrática esperada desde la media — y dividir entre n−1 en lugar de n no es un error; elimina un sesgo sistemático.
Sin esto:
Sin varianza y desviación estándar, no puedes normalizar características con z-score, entender el PCA, ni interpretar curvas de pérdida del modelo.
Conocer el centro de una distribución es solo la mitad del panorama. Dos datasets pueden compartir la misma media pero verse completamente diferentes:
- Salarios de {50k, 50k, 50k, 50k} — perfectamente planos.
- Salarios de {10k, 30k, 70k, 90k} — dispersión enorme.
Las medidas de dispersión caracterizan el spread de una distribución:
- Varianza σ² = E[(X − μ)²]: desviación cuadrática promedio respecto a la media. Elevar al cuadrado tiene dos efectos — hace que todas las desviaciones sean positivas y amplifica las grandes desviaciones más que las pequeñas.
- Desviación estándar σ = √(Varianza): vuelve a las unidades originales (pesos, milisegundos, grados…), haciéndola directamente comparable con los datos.
- Rango = max − min: la medida más simple; catastróficamente sensible a un solo outlier.
- Rango intercuartílico (IQR) = Q3 − Q1: el rango del 50 % central de los datos. Robusto a outliers porque las colas son irrelevantes.
- Desviación absoluta media (MAD) = E[|X − μ|]: promedia desviaciones absolutas (no cuadradas). Más robusta que la varianza pero menos conveniente matemáticamente.
El tradeoff clave: varianza y desviación estándar son sensibles a outliers; IQR y MAD son robustas.
Python (in browser)
ddof=0 divide entre n (fórmula poblacional). ddof=1 divide entre n−1 (fórmula muestral, corrección de Bessel). La varianza muestral es siempre mayor por un factor de n/(n−1).
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
¿Por qué n−1? La corrección de Bessel explicada.
Cuando estimas la varianza a partir de una muestra, primero calculas la media muestral x̄ de esos mismos datos. Aquí está el problema sutil: la media muestral x̄ no es la media poblacional verdadera μ — es la media que minimiza la suma de desviaciones cuadradas de los datos que tienes. Eso significa que las desviaciones (xᵢ − x̄) son sistemáticamente más pequeñas que las desviaciones desde la μ verdadera. Por lo tanto, dividir entre n subestima la varianza verdadera.
Dividir entre n−1 corrige este sesgo. Intuitivamente: una vez que has fijado x̄, solo n−1 de las desviaciones son "libres" — la última está determinada por la restricción de que todas las desviaciones deben sumar cero.
La afirmación formal: E[S²] = σ² solo cuando S² = Σ(xᵢ − x̄)² / (n−1). Eso es lo que significa "estimador insesgado".
Python (in browser)
Con 10,000 simulaciones de muestras de tamaño 5, el promedio con divisor n aterriza consistentemente por debajo de 1.0 (varianza verdadera), mientras que el de divisor n−1 aterriza cerca de 1.0. Eso es lo que 'insesgado' significa en la práctica.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
La desviación estándar se triplica con un 5% de contaminación; el IQR no se mueve. Para datasets con posibles outliers (errores de sensor, errores de anotación), el IQR es la medida de dispersión más segura.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Si σ = 15 para una distribución normal, ¿qué proporción aproximada de valores cae dentro de ±σ de la media (es decir, entre μ−15 y μ+15)?
Estadísticos Resumidos e Independencia — el capítulo de MML que formaliza la varianza como E[(X−μ)²], la covarianza y la independencia de variables aleatorias. Léelo para la derivación de E[S²] = σ² bajo la corrección de Bessel.
- **Varianza** = desviación cuadrática promedio respecto a la media. **Desviación estándar** = √varianza, en las mismas unidades que los datos. Ambas son sensibles a outliers.
- Dividir entre **n−1** (corrección de Bessel) da una varianza muestral *insesgada*. numpy usa ddof=0 por defecto; pandas usa ddof=1. Sé siempre explícito.
- El **IQR** (Q3 − Q1) es la alternativa robusta a la desviación estándar — ignora completamente las colas y no se ve afectado por outliers.
La desviación estándar es el factor de escala en la normalización z-score `(x − μ) / σ`. La varianza es lo que el PCA maximiza en cada componente principal. Las bandas de incertidumbre en curvas de pérdida son típicamente ±1 desviación estándar en bootstrap o validación cruzada.
Si lo quitas: El escalado de características sin σ es imposible — no puedes calcular z-scores ni normalizar gradientes. El PCA no tiene objetivo definido sin la noción de varianza explicada.