Nivel 3 · Estadística para IA
Cómo resumir unos datos con pocos números, cuánto fiarte de una muestra y cómo no dejarte engañar por una correlación. Es la estadística que necesitas para entender tus datos antes de entrenar un modelo, y sus resultados después.
01Cómo usar esta lección
Un modelo de IA aprende de datos, y los datos siempre traen trampas: valores extremos, muestras pequeñas, casualidades que parecen patrones. La estadística es la caja de herramientas para verlas. Siete preguntas guían la lección:
| Concepto | Pregunta que responde | En un proyecto de IA |
|---|---|---|
| Media y mediana | ¿Cuál es el valor típico? | Resumir cada columna; rellenar nulos |
| Desviación típica y cuartiles | ¿Cuánto varían los datos? | Normalizar variables; detectar outliers |
| Distribución normal | ¿Qué forma tienen los datos? | Inicializar pesos; detectar anomalías |
| Teorema central del límite | ¿Por qué las medias son tan fiables? | Por qué funciona entrenar con lotes |
| Intervalo de confianza | ¿Cuánto me fío de un resultado? | «92 % ± 2 % de acierto» |
| Correlación | ¿Van juntas dos variables? | Elegir variables; no confundir con causa |
| Contraste de hipótesis y Bayes | ¿Es real o es suerte? ¿Cómo actualizo lo que creo? | Tests A/B; filtros de spam |
Mismo método que en los niveles anteriores: la idea en una frase, un ejemplo pequeño, dónde aparece en IA y código para comprobarlo. Muchos conceptos se entienden mejor simulando que con fórmulas, y con NumPy simular es muy fácil: aprovéchalo.
021 · Media, mediana y moda
La idea en una fraseLa media reparte el total a partes iguales; la mediana es el valor del medio. Si hay valores extremos, fíate de la mediana.
Cinco personas cobran 1.800, 2.000, 2.100, 2.300 y 2.500 € al mes. La media es la suma entre cinco: 2.140 €. La mediana es el valor que queda en el centro al ordenarlos: 2.100 €. Se parecen.
Ahora entra en el grupo alguien que gana 50.000 €:
| Media | Mediana | |
|---|---|---|
| 5 personas | 2.140 € | 2.100 € |
| + 1 millonario | 10.117 € | 2.200 € |
La media se ha multiplicado por cinco y ya no describe a nadie del grupo. La mediana apenas se mueve: es robusta frente a valores extremos. Por eso las estadísticas de salarios o de precios de viviendas usan la mediana.
La moda es el valor que más se repite. Es la única de las tres que sirve para datos que no son números: la talla más vendida o el color más elegido.
import numpy as np
sueldos = np.array([1800, 2000, 2100, 2300, 2500])
sueldos.mean(), np.median(sueldos) # (2140.0, 2100.0)
con_millonario = np.append(sueldos, 50_000)
con_millonario.mean() # 10116.7 ← se dispara
np.median(con_millonario) # 2200.0 ← casi no cambia¿Dónde aparece en IA? en el nivel 2 rellenaste nulos con la mediana precisamente por esto: si la columna tiene valores extremos, la media daría un relleno poco realista.
032 · Dispersión: desviación típica y cuartiles
La idea en una fraseLa desviación típica dice cuánto se alejan los datos de la media, en las mismas unidades que los datos.
Dos clases sacan de media un 5 en un examen. En la A, todos sacan exactamente un 5. En la B, las notas son 0, 2, 5, 5, 8 y 10. La media es igual, pero son clases muy distintas: a la media le falta información sobre la dispersión.
Cómo se calcula, paso a paso
Con los datos 2, 4, 4, 4, 5, 5, 7, 9 (media 5):
- Resta la media a cada dato: −3, −1, −1, −1, 0, 0, 2, 4.
- Eleva al cuadrado (para que los negativos no anulen a los positivos) y haz la media: (9 + 1 + 1 + 1 + 0 + 0 + 4 + 16) / 8 = 4. Esa es la varianza.
- Haz la raíz cuadrada para volver a las unidades originales: √4 = 2. Esa es la desviación típica.
clase_a = np.array([5, 5, 5, 5, 5, 5])
clase_b = np.array([0, 2, 5, 5, 8, 10])
clase_a.mean(), clase_a.std() # (5.0, 0.0)
clase_b.mean(), clase_b.std() # (5.0, 3.37) misma media, mucha más dispersiónLos cuartiles: la versión robusta
Ordena los datos y pártelos en cuatro trozos iguales. Q1 deja por debajo el 25 %, la mediana el 50 % y Q3 el 75 %. La distancia Q3 − Q1 se llama rango intercuartílico (IQR) y mide la anchura de la mitad central de los datos. Igual que la mediana, no le afectan los valores extremos.
El dibujo es un diagrama de caja, y con él se aplica la regla más usada para detectar valores atípicos (outliers): es sospechoso todo lo que queda más allá de 1,5 × IQR por encima de Q3 o por debajo de Q1.
Error típico: un outlier no siempre es un error. Puede ser un fallo de medida (una persona de 3 metros) o un caso real y valioso (el barrio más rico). Antes de borrarlo, averigua qué es.
¿Dónde aparece en IA? muchos modelos (las redes neuronales, la regresión con regularización, K-means) funcionan mal si una columna va de 0 a 1 y otra de 0 a 100.000. Por eso se estandarizan: a cada valor se le resta la media y se divide por la desviación típica. Es lo que hace StandardScaler de scikit-learn.
043 · La distribución normal
La idea en una fraseMuchas medidas se reparten en forma de campana: casi todo cerca de la media y cada vez menos hacia los extremos.
La distribución de unos datos es cómo se reparten sus valores, lo que dibuja un histograma. La más famosa es la normal (o campana de Gauss). Solo necesitas dos números para describirla, la media y la desviación típica, y cumple una regla muy práctica:
Regla 68-95-99,7: el 68 % de los datos queda a menos de una desviación típica de la media; el 95 %, a menos de dos, y el 99,7 %, a menos de tres. Así, alguien de 194 cm está a 3 desviaciones de la media: es muy raro, más o menos 1 de cada 740 personas por arriba.
No todo es normal. Los ingresos, los precios o los tiempos de espera tienen una cola larga hacia un lado (distribución asimétrica): muchos valores pequeños y unos pocos enormes. En esos casos la media queda por encima de la mediana. Lo verás en el proyecto.
¿Dónde aparece en IA? los pesos de una red neuronal se inicializan con números aleatorios de una normal, y un sistema de detección de anomalías puede marcar como sospechoso todo lo que esté a más de 3 desviaciones típicas de lo habitual.
054 · Muestras y teorema central del límite
La idea en una fraseAunque los datos tengan una forma rara, la media de muchos de ellos se comporta como una campana, y es más precisa cuantos más datos promedias.
Casi nunca tenemos todos los datos (la población), sino una parte (una muestra). La pregunta clave es: ¿cuánto se parece la media de la muestra a la media real? El teorema central del límite da la respuesta, y se ve mejor simulando.
En una ventanilla, el tiempo de espera de cada cliente sigue una distribución muy asimétrica (exponencial) con media 10 minutos. Tomamos 1, 5 o 30 clientes, calculamos su espera media y repetimos 100.000 veces:
1 cliente
Media de 5 clientes
Media de 30 clientes
| Clientes promediados (n) | Media de las medias | Dispersión de las medias | Teoría: 10 / √n |
|---|---|---|---|
| 1 | 9,97 | 9,96 | 10,00 |
| 5 | 9,98 | 4,46 | 4,47 |
| 30 | 9,99 | 1,82 | 1,83 |
Tres lecciones: (1) la media de las muestras acierta en promedio (10); (2) su forma se vuelve de campana aunque los datos no lo sean; y (3) su dispersión se reduce como 1/√n. Ojo: para ser el doble de preciso necesitas cuatro veces más datos, no el doble.
rng = np.random.default_rng(42)
espera = rng.exponential(scale=10, size=(100_000, 30)) # 100 000 repeticiones de 30 clientes
for n in (1, 5, 30):
medias = espera[:, :n].mean(axis=1)
print(n, medias.mean().round(2), medias.std().round(2))
# 1 9.97 9.96
# 5 9.98 4.46
# 30 9.99 1.82 ← la dispersión baja como 10 / √n¿Dónde aparece en IA? en el entrenamiento con mini-lotes (SGD), el gradiente de un lote de 32 ejemplos es una media, así que es una estimación razonable del gradiente de todos los datos. Por eso funciona entrenar con lotes en vez de con todo el dataset a la vez.
065 · Intervalos de confianza
La idea en una fraseUn resultado sacado de una muestra siempre debe ir con su margen de error.
Mides la altura de 50 personas y la media sale 168,7 cm. ¿La media de toda la población es exactamente 168,7? Seguro que no. Por el teorema central del límite sabemos lo que varía una media: su dispersión, llamada error estándar, es la desviación típica de la muestra dividida por √n. Aquí sale 1,17 cm.
El 1,96 sale de la regla de la normal (el 95 % queda a menos de unas 2 desviaciones). Cómo se interpreta: si repitiéramos el experimento muchas veces, el 95 % de los intervalos calculados así contendría la media real. En la simulación del cuaderno, con una media real de 170, lo hicieron 9.440 de 10.000 (94,4 %).
muestra = rng.normal(170, 8, 50) # alturas de 50 personas
media = muestra.mean() # 168.7
error = muestra.std(ddof=1) / np.sqrt(len(muestra)) # 1.17 error estándar
media - 1.96 * error, media + 1.96 * error # (166.4, 171.0)Error típico: un intervalo muy ancho no es un fallo del cálculo: te está avisando de que tienes pocos datos para la conclusión que quieres sacar.
¿Dónde aparece en IA? decir «mi modelo acierta el 92 %» sin más es incompleto. Si lo evaluaste con 100 ejemplos, el margen ronda ±5 puntos, y otro modelo con un 90 % podría ser igual de bueno. La validación cruzada de los niveles siguientes sirve, en parte, para medir esa variación.
076 · Correlación y causalidad
La idea en una fraseLa correlación mide si dos variables suben y bajan juntas, pero no dice por qué.
El coeficiente de correlación (r) va de −1 a 1. Si vale +1, los puntos forman una recta que sube; si vale −1, una recta que baja; cerca de 0, no hay relación en línea recta.
Positiva fuerte
r = 0,93
Casi nula
r = 0,01
Negativa fuerte
r = −0,90
Relación en curva
r = 0,02
Ejemplo: horas de estudio (1 a 6) frente a la nota de seis alumnos (3, 4, 6, 5, 8, 9): r = 0,946, una relación muy fuerte.
horas = np.array([1, 2, 3, 4, 5, 6]) # horas de estudio
nota = np.array([3, 4, 6, 5, 8, 9]) # nota del examen
np.corrcoef(horas, nota)[0, 1] # 0.946
# Con Pandas, todas las parejas de columnas a la vez:
df.corr()Correlación no es causalidad
En verano se venden más helados y hay más ahogamientos: su correlación es alta. ¿Los helados provocan ahogamientos? No. Hay una tercera variable oculta, el calor, que hace subir las dos. Antes de decir que A causa B, pregúntate:
- ¿Hay una tercera variable que mueva a las dos?
- ¿Podría ser al revés, que B cause A?
- ¿Podría ser casualidad? Con muchas variables, algunas correlaciones salen por puro azar.
La única forma segura de demostrar una causa es un experimento: cambiar A a propósito, al azar, y medir B. Es lo que hace un test A/B.
¿Dónde aparece en IA? un modelo aprende correlaciones, no causas. Si en los datos de entrenamiento las fotos de lobos tienen nieve de fondo, el modelo puede aprender a detectar la nieve. Entender las correlaciones de tus datos es la primera defensa contra ese tipo de errores.
087 · ¿Es real o es suerte? Contraste de hipótesis
La idea en una fraseUn p-valor responde a esta pregunta: si todo fuera pura casualidad, ¿cuán raro sería lo que he visto?
Lanzas una moneda 100 veces y salen 60 caras. ¿Está trucada? El razonamiento tiene tres pasos:
- Suponemos lo aburrido (la hipótesis nula): la moneda es justa.
- Calculamos lo raro que sería el resultado si eso fuera cierto: la probabilidad de un resultado igual de alejado de 50 o más. Ese número es el p-valor.
- Decidimos: si el p-valor es muy pequeño (por convenio, menos de 0,05), la explicación «es casualidad» deja de ser creíble.
| Caras de 100 | p-valor | Conclusión |
|---|---|---|
| 60 | 0,057 | Podría ser suerte: pasa en 1 de cada 18 monedas justas |
| 70 | 0,00008 | Casi imposible con una moneda justa: está trucada |
from scipy import stats
stats.binomtest(60, 100, p=0.5).pvalue # 0.057 → podría ser suerte
stats.binomtest(70, 100, p=0.5).pvalue # 0.00008 → casi seguro que está trucadaError típico: un p-valor mayor que 0,05 no demuestra que la moneda sea justa: solo dice que con estos datos no se puede descartar. Y un p-valor pequeño no dice que el efecto sea grande ni importante.
¿Dónde aparece en IA? un test A/B compara dos versiones de un modelo (o de una web) con usuarios reales. Si la nueva mejora del 10 % al 11 %, el contraste de hipótesis dice si esa mejora es real o si podría ser ruido.
098 · Bayes: actualizar lo que crees
La idea en una fraseBayes es la regla para cambiar de opinión con pruebas: combina lo que creías antes con lo que acabas de ver.
El 30 % de tus correos es spam. La palabra «gratis» aparece en el 40 % de los correos de spam, pero solo en el 5 % de los normales. Te llega un correo con «gratis». ¿Qué probabilidad hay de que sea spam? Como en el nivel 1, lo más claro es contar con 1.000 correos:
| Correos | Con «gratis» | |
|---|---|---|
| Spam (30 %) | 300 | 120 (el 40 %) |
| Normales (70 %) | 700 | 35 (el 5 %) |
| Total | 1.000 | 155 |
De los 155 correos con «gratis», 120 son spam: 120 / 155 ≈ 77 %. Antes de leer el correo creías un 30 % (la probabilidad previa); después de ver la palabra, un 77 % (la posterior). Cada palabra nueva es otra prueba que vuelve a actualizar la probabilidad.
¿Dónde aparece en IA? así funcionan los filtros de spam clásicos (Naive Bayes), y es la misma idea que en el nivel 1 con los falsos positivos. En general, un modelo que devuelve probabilidades está diciendo «con lo que he visto, esto es lo que creo».
10Ejercicios
Primero en papel, luego compruébalos en Colab con NumPy.
Ejercicio 1Las notas de un grupo son 4, 6, 6, 7, 9 y 10. Calcula la media, la mediana y la moda. Si la última nota fuera 100 (un error al teclear), ¿cuál de las tres cambia?
Pista: con un número par de datos, la mediana es la media de los dos centrales.
Media 42 / 6 = 7; mediana (6 + 7) / 2 = 6,5; moda 6. Con el 100, la media sube a 132 / 6 = 22; la mediana y la moda no cambian.
Ejercicio 2Calcula la desviación típica de 2, 4, 4, 4, 5, 5, 7, 9 sin mirar la lección.
Media 5. Diferencias: −3, −1, −1, −1, 0, 0, 2, 4. Cuadrados: 9, 1, 1, 1, 0, 0, 4, 16; su media es 32 / 8 = 4 (la varianza). Raíz: 2.
Ejercicio 3Las alturas siguen una normal de media 170 cm y desviación típica 8 cm. ¿Entre qué dos valores está el 95 % de la gente? ¿Es raro medir 150 cm?
Media ± 2 desviaciones: entre 154 y 186 cm. 150 cm está a 2,5 desviaciones por debajo: poco frecuente (menos del 1 % de la gente mide eso o menos), pero no imposible.
Ejercicio 4El ejercicio del nivel. Simula el teorema central del límite: toma 10.000 muestras de tamaño 1, 5 y 30 de una exponencial de media 10, calcula sus medias y dibuja los histogramas. ¿Qué forma tienen? ¿Cuánto vale su desviación típica?
rng = np.random.default_rng(0)
for n in (1, 5, 30):
medias = rng.exponential(10, (10_000, n)).mean(axis=1)
plt.hist(medias, bins=50, alpha=0.5, label=f"n = {n}")
print(n, medias.std().round(2))
plt.legend(); plt.show()La forma pasa de muy torcida a campana, y la desviación típica se acerca a 10/√n: unos 10, 4,5 y 1,8.
Ejercicio 5Una encuesta a 400 personas da una media de 6,2 horas de sueño con desviación típica 1,2. Calcula el intervalo de confianza del 95 %.
Error estándar = 1,2 / √400 = 1,2 / 20 = 0,06. Intervalo: 6,2 ± 1,96 × 0,06 = 6,2 ± 0,12 → [6,08, 6,32] horas.
Ejercicio 6Un estudio encuentra que los niños que duermen con la luz encendida tienen más miopía. ¿Significa que la luz causa miopía? Propón una explicación alternativa.
No necesariamente. Una variable oculta posible: los padres miopes (la miopía es en parte hereditaria) quizá dejan más la luz encendida porque ven peor. Un estudio posterior encontró precisamente esa explicación.
Ejercicio 7Una nueva versión de una web consigue un 5,4 % de compras frente al 5,0 % de la antigua, y el test da un p-valor de 0,30. ¿Qué concluyes?
Que no hay pruebas suficientes de que la nueva sea mejor: una diferencia así sale por azar con bastante frecuencia (un 30 % de las veces). Tampoco demuestra que sean iguales; harían falta más datos.
11Proyecto: correlaciones y outliers en California Housing
California Housing recoge 20.640 barrios de California del censo de 1990: ingresos medianos, edad de las casas, habitaciones, población, situación y el valor mediano de la vivienda. Tu misión: describir los datos como haría un estadístico antes de que nadie entrene un modelo con ellos.
import pandas as pd
URL = "https://raw.githubusercontent.com/vtarazona/mle-ai/main/notebooks/data/california_housing.csv"
casas = pd.read_csv(URL) # 20 640 barrios de California (censo de 1990)
# 1. Centro, dispersión y forma
v = casas["median_house_value"]
v.mean(), v.median(), v.skew() # 206 856 · 179 700 · 0.98 (cola a la derecha)
(v == v.max()).sum() # 965 barrios con el valor exacto 500 001: ¡un tope!
# 2. Correlaciones con el valor de la vivienda
casas["habitaciones_por_hogar"] = casas["total_rooms"] / casas["households"]
casas.drop(columns="ocean_proximity").corr()["median_house_value"].sort_values()
# 3. Outliers con la regla del rango intercuartílico
col = casas["habitaciones_por_hogar"]
q1, q3 = col.quantile([0.25, 0.75]); iqr = q3 - q1
fuera = (col < q1 - 1.5 * iqr) | (col > q3 + 1.5 * iqr)
fuera.sum(), col.max() # 511 barrios · máximo 141.9 habitaciones por hogar
# 4. Una variable de texto: la cercanía al océano
casas.groupby("ocean_proximity")["median_house_value"].median().sort_values()Lo que deberías encontrar
1. Una distribución con cola a la derecha. El valor medio es 206.856 $ y la mediana, 179.700 $: la media queda por encima, como pasa siempre que hay unos pocos valores muy altos.
2. Dos «muros» artificiales. 965 barrios tienen un valor exacto de 500.001 $ y 1.273 tienen una edad de 52 años, el máximo. No son casas reales con ese valor exacto: al recoger los datos se recortó todo lo que pasaba de ese tope. Un modelo entrenado con ellos nunca predecirá más de 500.001 $, aunque la casa valga un millón.
3. Los ingresos lo dominan todo.
4. Outliers que son errores… o no. Con la regla de 1,5 × IQR salen 511 barrios con demasiadas habitaciones por hogar; el máximo es 141,9, lo que no es una casa normal. Seguramente son zonas de segundas residencias o de hoteles, con muchas habitaciones y pocos residentes fijos. En los ingresos, los 681 outliers (por encima de 8,01) son barrios ricos reales: no se deben borrar.
5. Una variable de texto que importa mucho. La mediana del valor es 108.500 $ en el interior (INLAND) frente a unos 215.000–234.000 $ cerca del océano o de la bahía.
Para ir más allá: (1) repite la correlación entre ingresos y valor sin los barrios del tope: baja de 0,688 a 0,643, porque el recorte distorsiona la relación; (2) dibuja un mapa con plt.scatter(casas.longitude, casas.latitude, c=casas.median_house_value, s=2) y comprueba dónde están las casas caras; (3) cuenta cuántos nulos hay (207, todos en total_bedrooms) y decide cómo rellenarlos.
12Test de autoevaluación
-
En un barrio, la mayoría gana unos 25.000 € al año y unos pocos, millones. ¿Qué describe mejor al vecino típico?
Los pocos valores enormes arrastran la media hacia arriba; la mediana no se ve afectada.
-
Dos grupos tienen la misma media, pero uno tiene una desviación típica mucho mayor. Significa que…
La desviación típica mide cuánto se alejan los datos de la media.
-
En una normal de media 100 y desviación típica 15, ¿qué porcentaje de los datos queda entre 70 y 130?
70 y 130 están a 2 desviaciones típicas de la media: ahí cabe el 95 %.
-
Según la regla del IQR, un valor es sospechoso de ser outlier si…
Es la regla que dibuja los puntos sueltos de un diagrama de caja.
-
¿Qué dice el teorema central del límite?
Por eso las medias (y los gradientes de un lote) son estimaciones fiables.
-
Para reducir a la mitad el error estándar de una media, necesitas…
El error estándar baja como 1/√n: con 4n datos, se divide por √4 = 2.
-
¿Qué significa un intervalo de confianza del 95 %?
Si repites el experimento muchas veces, el 95 % de los intervalos así calculados contiene el valor real.
-
Dos variables tienen r = 0. ¿Qué puedes afirmar?
La correlación de Pearson solo mide relaciones lineales: y = x² puede dar r = 0.
-
Las ciudades con más bomberos tienen más incendios. ¿Cuál es la explicación más probable?
El tamaño de la ciudad es una variable oculta que aumenta a la vez bomberos e incendios.
-
Un test A/B da un p-valor de 0,40. ¿Qué concluyes?
Un p-valor alto solo dice que la diferencia observada podría ser azar; no demuestra que sean iguales.
13¿Has asimilado el nivel?
Marca cada punto solo si puedes hacerlo sin mirar la lección. El progreso se guarda solo en este navegador.
Para verlo explicado de otra forma
- StatQuest (J. Starmer). Vídeos cortos sobre desviación típica, teorema central del límite, p-valores e intervalos de confianza.
- D. Spiegelhalter (2019). The Art of Statistics. Pelican (traducido al español como El arte de la estadística). Estadística sin fórmulas, con ejemplos reales.
- P. Bruce, A. Bruce, P. Gedeck (2020). Practical Statistics for Data Scientists, 2.ª ed. O'Reilly. Capítulos 1 a 3.
- R. K. Pace, R. Barry (1997). Sparse spatial autoregressions. Statistics & Probability Letters, 33(3). Origen del dataset California Housing.
Ejecuta el código de la lección
Todos los ejemplos, las simulaciones y el proyecto, con los datos incluidos: