Phase 01 - Lesson 15

Estadística para Aprendizaje Automático

This lesson includes a graded coding exercise that runs in your browser, unlocked with lifetime access.

La estadística es cómo sabes si tu modelo realmente funciona o solo tuvo suerte.

Tipo: Construir Lenguaje: Python Requisitos previos: Fase 1, Lecciones 06 (Probabilidad y Distribuciones), 07 (Teorema de Bayes) Tiempo: ~120 minutos

Objetivos de Aprendizaje

  • Calcular estadísticas descriptivas, correlación de Pearson/Spearman y matrices de covarianza desde cero
  • Realizar pruebas de hipótesis (prueba t, chi-cuadrado) e interpretar p-valores e intervalos de confianza correctamente
  • Usar remuestreo por bootstrap para construir intervalos de confianza para cualquier métrica sin supuestos distribucionales
  • Distinguir la significancia estadística de la significancia práctica usando medidas de tamaño de efecto

El Problema

Entrenaste dos modelos. El Modelo A obtiene 0.87 en tu conjunto de prueba. El Modelo B obtiene 0.89. Despliegas el Modelo B. Tres semanas después, las métricas de producción son peores que antes. ¿Qué pasó?

El Modelo B en realidad no superó al Modelo A. La diferencia de 0.02 era ruido. Tu conjunto de prueba era demasiado pequeño, o la varianza demasiado alta, o ambas cosas. Embarcaste aleatoriedad disfrazada de mejora.

Esto pasa constantemente. Vuelcos en el leaderboard de Kaggle. Papers que no reproducen. Pruebas A/B que declaran ganadores con base en unos pocos cientos de muestras. La causa raíz siempre es la misma: alguien se saltó la estadística.

La estadística te da las herramientas para distinguir señal de ruido. Te dice cuándo una diferencia es real, qué tan confiado deberías estar y cuántos datos necesitas antes de poder confiar en un resultado. Cada pipeline de ML, cada comparación de modelos, cada experimento necesita estadística. Sin ella, estás adivinando.

El Concepto

Estadísticas Descriptivas: Resumiendo Tus Datos

Antes de modelar cualquier cosa, necesitas saber cómo se ven tus datos. Las estadísticas descriptivas comprimen un conjunto de datos en unos pocos números que capturan su forma.

Las medidas de tendencia central responden "¿dónde está el medio?"

Mean:   sum of all values / count
        mu = (1/n) * sum(x_i)

Median: middle value when sorted
        Robust to outliers. If you have [1, 2, 3, 4, 1000], the mean is 202
        but the median is 3.

Mode:   most frequent value
        Useful for categorical data. For continuous data, rarely informative.

La media es el punto de equilibrio. La mediana es la marca de la mitad. Cuando divergen, tu distribución es asimétrica. Las distribuciones de ingreso tienen media >> mediana (asimetría a la derecha por los multimillonarios). Las distribuciones de pérdida durante el entrenamiento a menudo tienen media << mediana (asimetría a la izquierda por las muestras fáciles).

Las medidas de dispersión responden "¿qué tan dispersos están los datos?"

Variance:   average squared deviation from the mean
            sigma^2 = (1/n) * sum((x_i - mu)^2)

Standard deviation:  square root of variance
                     sigma = sqrt(sigma^2)
                     Same units as the data, so more interpretable.

Range:      max - min
            Sensitive to outliers. Almost never useful alone.

IQR:        Q3 - Q1 (interquartile range)
            The range of the middle 50% of the data.
            Robust to outliers. Used for box plots and outlier detection.

Los percentiles dividen los datos ordenados en 100 partes iguales. El percentil 25 (Q1) significa que el 25% de los valores cae por debajo de ese punto. El percentil 50 es la mediana. El percentil 75 es Q3.

For latency monitoring:
  P50 = median latency        (typical user experience)
  P95 = 95th percentile       (bad but not worst case)
  P99 = 99th percentile       (tail latency, often 10x the median)

En ML, te importan los percentiles para la latencia de inferencia, las distribuciones de confianza de predicción y para entender las distribuciones de error. Un modelo con bajo error promedio pero pésimo error de P99 puede ser inútil para aplicaciones críticas de seguridad.

Estadísticas de muestra vs población. Al calcular la varianza a partir de una muestra, divide por (n-1) en lugar de n. Esa es la corrección de Bessel. Compensa el hecho de que la media de tu muestra no es la media verdadera de la población. Con n en el denominador, subestimas sistemáticamente la varianza verdadera. Con (n-1), la estimación queda no sesgada.

Population variance: sigma^2 = (1/N) * sum((x_i - mu)^2)
Sample variance:     s^2     = (1/(n-1)) * sum((x_i - x_bar)^2)

En la práctica: si n es grande (miles de muestras), la diferencia es despreciable. Si n es pequeño (decenas de muestras), importa.

Correlación: Cómo las Variables se Mueven Juntas

La correlación mide la fuerza y la dirección de una relación lineal entre dos variables.

El coeficiente de correlación de Pearson mide la asociación lineal:

r = sum((x_i - x_bar)(y_i - y_bar)) / (n * s_x * s_y)

r = +1:  perfect positive linear relationship
r = -1:  perfect negative linear relationship
r =  0:  no linear relationship (but there might be a nonlinear one!)

Range: [-1, 1]

Pearson asume que la relación es lineal y que ambas variables están aproximadamente distribuidas de forma normal. Es sensible a los outliers. Un solo punto extremo puede arrastrar r de 0.1 a 0.9.

La correlación de rangos de Spearman mide la asociación monotónica:

1. Replace each value with its rank (1, 2, 3, ...)
2. Compute Pearson correlation on the ranks

Spearman catches any monotonic relationship, not just linear.
If y = x^3, Pearson gives r < 1 but Spearman gives rho = 1.

Cuándo usar cada una:

Pearson:    Both variables are continuous and roughly normal.
            You care about the linear relationship specifically.
            No extreme outliers.

Spearman:   Ordinal data (rankings, ratings).
            Data is not normally distributed.
            You suspect a monotonic but not linear relationship.
            Outliers are present.

La regla de oro: correlación no implica causalidad. Las ventas de helado y las muertes por ahogamiento están correlacionadas porque ambas aumentan en verano. La exactitud de tu modelo y el número de parámetros están correlacionados, pero agregar parámetros no mejora automáticamente la exactitud (ver: overfitting).

Matriz de Covarianza

La covarianza entre dos variables mide cuánto varían juntas:

Cov(X, Y) = (1/n) * sum((x_i - x_bar)(y_i - y_bar))

Cov(X, Y) > 0:  X and Y tend to increase together
Cov(X, Y) < 0:  when X increases, Y tends to decrease
Cov(X, Y) = 0:  no linear co-movement

Para d features, la matriz de covarianza C es una matriz d x d donde C[i][j] = Cov(feature_i, feature_j). Las entradas diagonales C[i][i] son las varianzas de cada feature.

C = | Var(x1)      Cov(x1,x2)  Cov(x1,x3) |
    | Cov(x2,x1)  Var(x2)      Cov(x2,x3) |
    | Cov(x3,x1)  Cov(x3,x2)  Var(x3)     |

Properties:
  - Symmetric: C[i][j] = C[j][i]
  - Positive semi-definite: all eigenvalues >= 0
  - Diagonal = variances
  - Off-diagonal = covariances

Conexión con PCA. El PCA hace la descomposición en valores propios de la matriz de covarianza. Los vectores propios son los componentes principales (direcciones de varianza máxima). Los valores propios te dicen cuánta varianza captura cada componente. Es exactamente lo que cubrió la Lección 10, pero ahora ves por qué la matriz de covarianza es lo correcto a descomponer: codifica todas las relaciones lineales por pares en tus datos.

Conexión con la correlación. La matriz de correlación es la matriz de covarianza de variables estandarizadas (cada una dividida por su desviación estándar). La correlación normaliza la covarianza para que todos los valores caigan en [-1, 1].

Prueba de Hipótesis

La prueba de hipótesis es un marco para tomar decisiones bajo incertidumbre. Comienzas con una afirmación, recolectas datos y determinas si los datos son consistentes con la afirmación.

La configuración:

Null hypothesis (H0):        the default assumption, usually "no effect"
Alternative hypothesis (H1): what you are trying to show

Example:
  H0: Model A and Model B have the same accuracy
  H1: Model B has higher accuracy than Model A

El p-valor es la probabilidad de ver datos tan extremos como los que observaste, asumiendo que H0 es verdadera. NO es la probabilidad de que H0 sea verdadera. Ese es el malentendido aislado más común en estadística.

p-value = P(data this extreme | H0 is true)

If p-value < alpha (typically 0.05):
    Reject H0. The result is "statistically significant."
If p-value >= alpha:
    Fail to reject H0. You do not have enough evidence.
    This does NOT mean H0 is true.

Los intervalos de confianza dan un rango de valores plausibles para un parámetro:

95% confidence interval for the mean:
    x_bar +/- z * (s / sqrt(n))

where z = 1.96 for 95% confidence

Interpretation: if you repeated this experiment many times, 95% of the
computed intervals would contain the true mean. It does NOT mean there
is a 95% probability the true mean is in this specific interval.

El ancho del intervalo de confianza te dice sobre la precisión. Los intervalos anchos significan alta incertidumbre. Los intervalos estrechos significan que tu estimación es precisa (pero no necesariamente exacta, si tus datos están sesgados).

La Prueba t

La prueba t compara medias. Hay varios sabores.

Prueba t de una muestra: ¿la media de la población es diferente de un valor hipotético?

t = (x_bar - mu_0) / (s / sqrt(n))

degrees of freedom = n - 1

Prueba t de dos muestras (independiente): ¿las medias de dos grupos son diferentes?

t = (x_bar_1 - x_bar_2) / sqrt(s1^2/n1 + s2^2/n2)

This is Welch's t-test, which does not assume equal variances.
Always use Welch's unless you have a specific reason for equal variances.

Prueba t pareada: cuando las mediciones vienen en pares (mismo modelo evaluado en los mismos splits de datos):

Compute d_i = x_i - y_i for each pair
Then run a one-sample t-test on the d_i values against mu_0 = 0

En ML, la prueba t pareada es común: corres ambos modelos en los mismos 10 folds de validación cruzada y comparas sus puntuaciones por pares.

Prueba Chi-cuadrado

La prueba chi-cuadrado verifica si las frecuencias observadas coinciden con las frecuencias esperadas. Útil para datos categóricos.

chi^2 = sum((observed - expected)^2 / expected)

Example: does a language model's output distribution match the
training distribution across categories?

Category    Observed   Expected
Positive       120        100
Negative        80        100
chi^2 = (120-100)^2/100 + (80-100)^2/100 = 4 + 4 = 8

With 1 degree of freedom, chi^2 = 8 gives p < 0.005.
The difference is significant.

Prueba A/B para Modelos de ML

La prueba A/B en ML no es lo mismo que la prueba A/B en la web. La comparación de modelos tiene desafíos específicos:

1. Same test set:    Both models must be evaluated on identical data.
                     Different test sets make comparison meaningless.

2. Multiple metrics: Accuracy alone is not enough. You need precision,
                     recall, F1, latency, and fairness metrics.

3. Variance:         Use cross-validation or bootstrap to estimate
                     the variance of each metric, not just point estimates.

4. Data leakage:     If the test set was used during model selection,
                     your comparison is biased. Hold out a final test set.

El procedimiento:

1. Define your metric and significance level (alpha = 0.05)
2. Run both models on the same k-fold cross-validation splits
3. Collect paired scores: [(a1, b1), (a2, b2), ..., (ak, bk)]
4. Compute differences: d_i = b_i - a_i
5. Run a paired t-test on the differences
6. Check: is the mean difference significantly different from 0?
7. Compute a confidence interval for the mean difference
8. Compute effect size (Cohen's d) to judge practical significance

Significancia Estadística vs Significancia Práctica

Un resultado puede ser estadísticamente significativo pero prácticamente sin sentido. Con datos suficientes, hasta una diferencia trivial se vuelve estadísticamente significativa.

Example:
  Model A accuracy: 0.9234
  Model B accuracy: 0.9237
  n = 1,000,000 test samples
  p-value = 0.001

Statistically significant? Yes.
Practically significant? A 0.03% improvement is not worth the
engineering cost of deploying a new model.

El tamaño de efecto cuantifica qué tan grande es la diferencia, independientemente del tamaño de la muestra:

Cohen's d = (mean_1 - mean_2) / pooled_std

d = 0.2:  small effect
d = 0.5:  medium effect
d = 0.8:  large effect

Siempre reporta tanto el p-valor como el tamaño de efecto. El p-valor te dice si la diferencia es real. El tamaño de efecto te dice si importa.

Problema de las Comparaciones Múltiples

Cuando pruebas muchas hipótesis, algunas serán "significativas" por azar. Si pruebas 20 cosas en alpha = 0.05, esperas 1 falso positivo aunque nada sea real.

P(at least one false positive) = 1 - (1 - alpha)^m

m = 20 tests, alpha = 0.05:
P(false positive) = 1 - 0.95^20 = 0.64

You have a 64% chance of at least one false positive.

Corrección de Bonferroni: divide alpha por el número de pruebas.

Adjusted alpha = alpha / m = 0.05 / 20 = 0.0025

Only reject H0 if p-value < 0.0025.
Conservative but simple. Works when tests are independent.

En ML, esto importa cuando comparas un modelo en múltiples métricas, pruebas muchas configuraciones de hiperparámetros o evalúas en múltiples conjuntos de datos.

Métodos de Bootstrap

El bootstrap estima la distribución muestral de un estadístico remuestreando tus datos con reemplazo. No se requiere ningún supuesto sobre la distribución subyacente.

El algoritmo:

1. You have n data points
2. Draw n samples WITH replacement (some points appear multiple times,
   some not at all)
3. Compute your statistic on this bootstrap sample
4. Repeat B times (typically B = 1000 to 10000)
5. The distribution of bootstrap statistics approximates the
   sampling distribution

Intervalo de confianza por bootstrap (método del percentil):

Sort the B bootstrap statistics
95% CI = [2.5th percentile, 97.5th percentile]

Por qué el bootstrap importa para ML:

- Test set accuracy is a point estimate. Bootstrap gives you
  confidence intervals.
- You cannot assume metric distributions are normal (especially
  for AUC, F1, precision at k).
- Bootstrap works for ANY statistic: median, ratio of two means,
  difference in AUC between two models.
- No closed-form formula needed.

Bootstrap para comparación de modelos:

1. You have predictions from Model A and Model B on the same test set
2. For each bootstrap iteration:
   a. Resample test indices with replacement
   b. Compute metric_A and metric_B on the resampled set
   c. Store diff = metric_B - metric_A
3. 95% CI for the difference:
   [2.5th percentile of diffs, 97.5th percentile of diffs]
4. If the CI does not contain 0, the difference is significant

Esto es más robusto que la prueba t pareada porque no hace supuestos distribucionales.

Pruebas Paramétricas vs No Paramétricas

Las pruebas paramétricas asumen una distribución específica (generalmente normal):

t-test:         assumes normally distributed data (or large n by CLT)
ANOVA:          assumes normality and equal variances
Pearson r:      assumes bivariate normality

Las pruebas no paramétricas no hacen supuestos distribucionales:

Mann-Whitney U:     compares two groups (replaces independent t-test)
Wilcoxon signed-rank: compares paired data (replaces paired t-test)
Spearman rho:       correlation on ranks (replaces Pearson)
Kruskal-Wallis:     compares multiple groups (replaces ANOVA)

Cuándo usar no paramétrica:

- Small sample size (n < 30) and data is clearly non-normal
- Ordinal data (ratings, rankings)
- Heavy outliers you cannot remove
- Skewed distributions

Cuándo usar paramétrica:

- Large sample size (CLT makes the test statistic approximately normal)
- Data is roughly symmetric without extreme outliers
- More statistical power (better at detecting real differences)

En los experimentos de ML, típicamente tienes n pequeño (5 o 10 folds de validación cruzada), así que las pruebas no paramétricas como la de Wilcoxon de rangos con signo a menudo son más apropiadas que las pruebas t.

Teorema Central del Límite: Implicaciones Prácticas

El TCL dice que la distribución de las medias muestrales se aproxima a una distribución normal a medida que n crece, sin importar la distribución subyacente de la población.

If X_1, X_2, ..., X_n are iid with mean mu and variance sigma^2:

    X_bar ~ Normal(mu, sigma^2 / n)    as n -> infinity

Works for n >= 30 in most cases.
For highly skewed distributions, you might need n >= 100.

Por qué esto importa para ML:

1. Justifies confidence intervals and t-tests on aggregated metrics
2. Explains why averaging over cross-validation folds gives stable
   estimates even when individual folds vary wildly
3. Mini-batch gradient descent works because the average gradient
   over a batch approximates the true gradient (CLT in action)
4. Ensemble methods: averaging predictions from many models gives
   more stable output than any single model

Lo que el TCL NO hace:

- Does NOT make your data normal. It makes the MEAN of samples normal.
- Does NOT work for heavy-tailed distributions with infinite variance
  (Cauchy distribution).
- Does NOT apply to dependent data (time series without correction).

Errores Estadísticos Comunes en Papers de ML

  1. Probar en el conjunto de entrenamiento. Garantiza overfitting. Siempre separa datos que el modelo nunca ve durante el entrenamiento.

  2. Sin intervalos de confianza. Reportar un solo número de exactitud sin incertidumbre hace que los resultados sean no reproducibles y no verificables.

  3. Ignorar las comparaciones múltiples. Probar 50 configuraciones y reportar la mejor sin corrección infla las tasas de falsos positivos.

  4. Confundir la significancia estadística y la práctica. Un p-valor de 0.001 en una mejora de exactitud de 0.01% no es significativo.

  5. Usar exactitud en datos desbalanceados. 99% de exactitud en un conjunto de datos con 99% de clase negativa significa que el modelo no aprendió nada. Usa precisión, recall, F1 o AUC.

  6. Elegir métricas a dedo (cherry-picking). Reportar solo la métrica en la que tu modelo gana. La evaluación honesta reporta todas las métricas relevantes.

  7. Filtrar información entre los splits de entrenamiento/prueba. Normalizar antes de dividir, o usar datos del futuro para predecir el pasado.

  8. Conjuntos de prueba pequeños sin estimaciones de varianza. Evaluar en 100 muestras y afirmar 2% de mejora es ruido, no señal.

  9. Asumir independencia cuando los datos no son independientes. Imágenes médicas del mismo paciente, múltiples oraciones del mismo documento. Las observaciones dentro de un grupo están correlacionadas.

  10. P-hacking. Probar pruebas, subconjuntos o criterios de exclusión diferentes hasta obtener p < 0.05. El resultado es un artefacto de la búsqueda.

Construyéndolo

Vas a implementar:

  1. Estadísticas descriptivas desde cero (media, mediana, moda, desviación estándar, percentiles, IQR)
  2. Funciones de correlación (Pearson y Spearman, con la matriz de covarianza)
  3. Pruebas de hipótesis (prueba t de una muestra, prueba t de dos muestras, prueba chi-cuadrado)
  4. Intervalos de confianza por bootstrap (para cualquier estadístico, sin supuestos necesarios)
  5. Simulador de prueba A/B (generar datos, probar, verificar errores de Tipo I y Tipo II)
  6. Demo de significancia estadística vs práctica (mostrando que un n grande vuelve todo "significativo")

Todo desde cero, usando solo math y random. Sin numpy, sin scipy.

Términos Clave

Término Definición
Media Suma de los valores dividida por la cantidad. Sensible a outliers.
Mediana Valor del medio de los datos ordenados. Robusta frente a outliers.
Desviación estándar Raíz cuadrada de la varianza. Mide la dispersión en las unidades originales.
Percentil Valor por debajo del cual cae un porcentaje dado de los datos.
IQR Rango intercuartil. Q3 menos Q1. La dispersión del 50% central.
Correlación de Pearson Mide la asociación lineal entre dos variables. Rango [-1, 1].
Correlación de Spearman Mide la asociación monotónica usando rangos.
Matriz de covarianza Matriz de covarianzas por pares entre todas las features.
Hipótesis nula Supuesto por defecto de ningún efecto o ninguna diferencia.
p-valor Probabilidad de datos tan extremos como estos dada la hipótesis nula verdadera.
Intervalo de confianza Rango de valores plausibles para un parámetro en un nivel de confianza dado.
Prueba t Prueba si las medias difieren significativamente. Usa la distribución t.
Prueba chi-cuadrado Prueba si las frecuencias observadas difieren de las frecuencias esperadas.
Tamaño de efecto Magnitud de una diferencia, independiente del tamaño de la muestra. El d de Cohen es común.
Corrección de Bonferroni Divide el umbral de significancia por el número de pruebas para controlar los falsos positivos.
Bootstrap Remuestreo con reemplazo para estimar distribuciones muestrales.
Error de Tipo I Falso positivo. Rechazar H0 cuando es verdadera.
Error de Tipo II Falso negativo. No rechazar H0 cuando es falsa.
Potencia estadística Probabilidad de rechazar correctamente una H0 falsa. Potencia = 1 menos la tasa de error de Tipo II.
Teorema central del límite Las medias muestrales convergen a una distribución normal a medida que crece el tamaño de la muestra.
Prueba paramétrica Asume una distribución específica para los datos (generalmente normal).
Prueba no paramétrica No hace supuestos distribucionales. Funciona con rangos o signos.
0 lifetime access. Curriculum based on AI Engineering from Scratch by Rohit Ghumare (MIT, used under attribution).