lección 3
Dispersión: desviación, percentiles y el boxplot
La media dice dónde está el centro; la dispersión dice cuánto se fían de ese centro los datos reales. Rango, varianza, desviación típica, percentiles, IQR y el boxplot como resumen visual.
⏱ 55 min
Dos ciudades tienen la misma temperatura media anual: 20 grados. En la primera, el termómetro oscila entre 18 y 22 durante todo el año — primaveras eternas, ropa de entretiempo permanente. En la segunda, baja a 5 en enero y sube a 35 en agosto — necesitas abrigo, aire acondicionado y dos armarios. La media es idéntica; la experiencia de vivir en cada una, opuesta. Si solo miras la media, no puedes distinguirlas. Te falta saber cuánto se separan los valores reales de ese centro. Eso — cuánto se alejan los datos del resumen que les has puesto — es la dispersión, y es exactamente lo que le faltaba al director que dijo "el tiempo medio de respuesta es 180 milisegundos, estamos bien" sin saber que el 1% de las peticiones tardaba más de 4 segundos.
En la lección anterior aprendiste a calcular medias y medianas — medidas de centralidad. Hoy vamos a completar el retrato: las medidas de dispersión te dicen cuánto se separan los datos de ese centro, y los percentiles te dicen exactamente dónde está cada porción del reparto. Juntos, centralidad y dispersión, son el resumen mínimo de cualquier distribución. Y el boxplot es la forma de visualizar ambas cosas en un solo gráfico que cabe en una diapositiva.
### Por qué el centro no basta: dos equipos con la misma media
Imagina dos equipos de ventas con la misma media mensual: 50.000 euros cada uno. El equipo A tiene vendedores que cierran entre 45.000 y 55.000 cada mes — son consistentes, predecibles. El equipo B tiene un vendedor que cierra 120.000 un mes y 5.000 el siguiente, otro que alterna entre 80.000 y 20.000, y así. La media es la misma, pero la realidad es completamente distinta. El equipo A te permite planificar; con el equipo B, la previsión de ingresos del trimestre es una lotería. Esa diferencia es la dispersión: cuánto se alejan los valores individuales del centro.
### Rango: la medida más simple (y más frágil)
El rango es la diferencia entre el valor máximo y el mínimo: rango = MAX - MIN. Si los sueldos de una empresa van de 22.000 a 480.000, el rango es 458.000. Es la medida de dispersión más intuitiva y la primera que se le ocurre a todo el mundo: "¿cuánto hay entre el más bajo y el más alto?". Pero tiene un problema grave: depende SOLO de los dos valores más extremos. Si contratas a un becario por 18.000, el rango salta a 462.000, pero la realidad del 95% de la plantilla no ha cambiado en absoluto. Un solo dato atípico — lo que llamamos un outlier, un valor extremo — destroza el rango como medida útil.
El rango es útil para una única cosa: como primera alarma. Si te dicen "los tiempos de respuesta de la API van de 12 ms a 47.000 ms", ese rango de 47 segundos ya te dice que hay un problema en la cola. Pero no te dice cuánto de grave es: puede ser que una petición de cada millón tarde eso, o que el 10% estén por encima de los 5 segundos. Para responder a esas preguntas necesitas herramientas más finas.
### Varianza y desviación típica: cuánto se alejan los datos del centro
La varianza responde a una pregunta precisa: "de media, ¿cuánto se desvían los datos de su media?". La idea es simple: coges cada dato, calculas cuánto se aleja de la media, elevas al cuadrado esa distancia (para que las negativas no se cancelen con las positivas), y promedias todas esas distancias al cuadrado. El resultado es la varianza. Pero tiene un problema práctico: está en unidades al cuadrado. Si los datos son euros, la varianza está en "euros al cuadrado", que no significa nada para un humano. Por eso se usa la desviación típica, que es simplemente la raíz cuadrada de la varianza: vuelve a las mismas unidades que tus datos originales.
La analogía que mejor funciona: imagina que la media es el centro de una diana. La desviación típica es "de media, a cuánta distancia del centro caen los dardos". Una desviación típica baja significa que los dardos están todos juntos en el centro — poca variabilidad. Una desviación típica alta significa que los dardos están repartidos por toda la diana — mucha variabilidad. La desviación típica no te dice nada sobre un dato individual: te dice cuánto "ruido" hay en el conjunto.
1-- Varianza y desviacion tipica en SQL (DuckDB)2CREATE OR REPLACE TABLE ventas_equipo AS3SELECT * FROM (VALUES4 ('Ana', 48000), ('Luis', 52000), ('Marta', 49000),5 ('Pedro', 51000), ('Sara', 50000)6) AS t(vendedor, venta_mensual);78SELECT9 ROUND(AVG(venta_mensual), 0) AS media,10 ROUND(VARIANCE(venta_mensual), 0) AS varianza,11 ROUND(STDDEV(venta_mensual), 0) AS desviacion_tipica,12 MAX(venta_mensual) - MIN(venta_mensual) AS rango13FROM ventas_equipo;
La desviación típica está en las mismas unidades que los datos originales (euros)
Consejo de senior: cuando presentes la desviación típica a un stakeholder no técnico, NO digas "la desviación típica es 1.581 euros". Di: "de media, cada vendedor se separa unos 1.600 euros de la media del equipo". Es la misma cifra, pero la segunda frase la entiende cualquiera. La desviación típica es una distancia media al centro — explícala siempre así.
### El problema de la desviación típica con outliers
La desviación típica tiene el mismo talón de Aquiles que la media: es sensible a valores extremos. Si al equipo de ventas le añadimos un vendedor estrella que cierra 300.000 en un mes, la desviación típica se dispara de 1.581 a más de 100.000, aunque los otros cinco vendedores no han cambiado nada. Un solo valor extremo contamina toda la medida. Esto es un problema real: en datos de negocio siempre hay valores extremos — el cliente que compra 50 veces más que el resto, la petición que tarda 100 veces más, el día de Black Friday que triplica las ventas normales.
Necesitamos una medida de dispersión que sea robusta frente a outliers, igual que la mediana es robusta frente a outliers como medida de centro. Esa medida existe, y se llama rango intercuartílico — pero para entenderla, primero necesitamos hablar de percentiles.
### Percentiles: en qué posición del reparto estás
Un percentil responde a una pregunta muy concreta: "¿qué valor deja por debajo al X% de los datos?". El percentil 50 (P50) es el valor que deja por debajo al 50% de los datos — es decir, la mediana. El percentil 25 (P25) deja por debajo al 25% y por encima al 75%. El percentil 90 (P90) deja por debajo al 90% de los datos — solo un 10% está por encima. Y el percentil 99 (P99) deja por debajo al 99%: solo el 1% más extremo está por encima de ese valor.
La analogía que me funciona: piensa en la cola del supermercado un sábado por la mañana. Si te dicen "el P50 de espera es 4 minutos", significa que la mitad de la gente espera menos de 4 minutos y la otra mitad más. Si te dicen "el P90 es 12 minutos", sabes que el 90% de la gente espera menos de 12 minutos, pero hay un 10% desafortunado que espera más. Y si te dicen "el P99 es 25 minutos", sabes que casi todo el mundo sale en menos de 25 minutos, pero hay un 1% que se queda esperando casi media hora — probablemente los que llegaron justo detrás de alguien con un carro de 200 artículos.
Los percentiles más usados en análisis de negocio tienen nombres propios: P25, P50 y P75 se llaman cuartiles (porque dividen los datos en cuatro partes iguales). El P25 es el primer cuartil (Q1), el P50 es el segundo cuartil (Q2, la mediana) y el P75 es el tercer cuartil (Q3). El espacio entre Q1 y Q3 — donde vive el 50% central de los datos — es el rango intercuartílico o IQR (Interquartile Range).
### El rango intercuartílico (IQR): dispersión robusta
El IQR es simplemente Q3 menos Q1: el ancho de la caja donde vive el 50% central de los datos. Si los sueldos de una empresa tienen un Q1 de 28.000 y un Q3 de 52.000, el IQR es 24.000 euros. Eso te dice que la mitad central de la plantilla cobra dentro de un rango de 24.000 euros. Y lo más importante: aunque el CEO cobre 5 millones, el IQR no se mueve ni un céntimo, porque el CEO está en el extremo superior y el IQR solo mira al 50% del medio.
Esta es la razón por la que el IQR es más robusto que la desviación típica cuando tienes outliers. La desviación típica usa TODOS los datos, incluidos los extremos, y eleva las distancias al cuadrado — así que un valor extremo tiene un impacto desproporcionado. El IQR ignora por completo el 25% inferior y el 25% superior: solo le importa dónde están los límites del bloque central. Es la mediana de las medidas de dispersión, por así decirlo.
Cuidado con un error frecuente en entrevistas: el IQR NO es "el rango de los datos sin outliers". Es el rango del 50% CENTRAL. Un dato puede estar fuera del IQR (por encima de Q3 o por debajo de Q1) y no ser un outlier — simplemente está en el 25% superior o inferior. La regla clásica para identificar outliers con el IQR es que un valor es sospechoso si está por debajo de Q1 - 1.5*IQR o por encima de Q3 + 1.5*IQR. Pero eso es una convención, no una ley física.
### El boxplot: cinco números que resumen una distribución
El boxplot (diagrama de caja y bigotes) es una de las herramientas visuales más eficientes de la estadística. En un solo gráfico muestra Q1, la mediana y Q3 (la caja), hasta dónde llegan los datos que se consideran normales (los bigotes) y los outliers, dibujados como puntos aislados. Ojo con una confusión frecuente: el extremo del bigote no tiene por qué ser el mínimo ni el máximo — es el dato más extremo que todavía cae dentro de 1,5 veces el IQR, así que si hay outliers, el mínimo y el máximo quedan más allá, dibujados como puntos. Fue inventado por John Tukey en 1970, un estadístico que trabajaba en Bell Labs y que creía que antes de aplicar modelos sofisticados había que MIRAR los datos. Su filosofía era "el mayor valor de una imagen es cuando te fuerza a ver lo que nunca esperabas". El boxplot es exactamente eso: un vistazo rápido que te dice si los datos son simétricos, si tienen outliers, y cuánto se dispersan.
Cómo se lee un boxplot: la caja va de Q1 a Q3 (el IQR, el 50% central). La línea dentro de la caja es la mediana. Los "bigotes" se extienden hasta el dato más extremo que esté dentro de 1.5 veces el IQR desde el borde de la caja. Todo lo que quede fuera de los bigotes se marca como un punto individual — es un outlier potencial. Si la mediana está centrada en la caja, la distribución es simétrica. Si la mediana está pegada a un extremo de la caja, es asimétrica.
Consejo de senior: el boxplot es imbatible cuando necesitas comparar distribuciones entre segmentos. Un boxplot por región, un boxplot por canal, un boxplot por mes. En tres segundos ves dónde la mediana es más alta, dónde la dispersión es mayor, y dónde hay outliers. Ponlos siempre en paralelo, nunca aislados — su poder está en la comparación.
### Percentiles en SQL: PERCENTILE_CONT y NTILE
SQL tiene funciones nativas para calcular percentiles. La más importante es PERCENTILE_CONT (percentil continuo): le pasas un valor entre 0 y 1 y te devuelve el valor que deja ese porcentaje por debajo. PERCENTILE_CONT(0.5) es la mediana. PERCENTILE_CONT(0.95) es el P95. Se usa como función de agregación con la cláusula WITHIN GROUP (ORDER BY columna), que le dice a SQL en qué orden clasificar los datos antes de calcular el percentil.
NTILE es otra herramienta útil: en vez de calcular UN percentil, divide todos los datos en N grupos iguales y te dice a cuál pertenece cada fila. NTILE(4) te asigna un cuartil (1, 2, 3 o 4) a cada fila. NTILE(100) te asigna un percentil del 1 al 100. Es una window function, así que se ejecuta fila a fila sin colapsar el resultado.
1-- Percentiles con PERCENTILE_CONT en DuckDB2CREATE OR REPLACE TABLE tiempos_respuesta AS3SELECT * FROM (VALUES4 (101), (98), (112), (95), (145), (87), (203), (99),5 (110), (340), (91), (102), (88), (97), (4200), (105),6 (93), (108), (99), (115), (142), (96), (89), (107),7 (94), (100), (103), (111), (98), (92)8) AS t(ms);910SELECT11 ROUND(AVG(ms), 1) AS media,12 PERCENTILE_CONT(0.50) WITHIN GROUP (ORDER BY ms) AS p50,13 PERCENTILE_CONT(0.75) WITHIN GROUP (ORDER BY ms) AS p75,14 PERCENTILE_CONT(0.90) WITHIN GROUP (ORDER BY ms) AS p90,15 PERCENTILE_CONT(0.95) WITHIN GROUP (ORDER BY ms) AS p95,16 PERCENTILE_CONT(0.99) WITHIN GROUP (ORDER BY ms) AS p99,17 MAX(ms) AS maximo18FROM tiempos_respuesta;
La media dice 250,7 ms; el P50 dice 100,5 ms — la cola larga del P99 arrastra la media
### Caso de negocio: el SLA del P95
En el mundo de infraestructura y producto digital, los SLA (Service Level Agreements, acuerdos de nivel de servicio) se definen con percentiles, no con medias. Cuando una empresa dice "nuestro SLA es que el 95% de las peticiones responden en menos de 200 ms", está diciendo exactamente esto: el P95 de tiempos de respuesta debe ser menor o igual a 200 ms. Es decir, solo el 5% más lento puede superar ese umbral.
¿Por qué no se usa la media para SLAs? Porque la media esconde los problemas de la cola. Imagina una API donde el 99% de las peticiones tardan 50 ms y el 1% tarda 15.000 ms (15 segundos). La media sería 50 + 0.01*15000 = 200 ms. "La media es 200 ms" suena aceptable. Pero ese 1% de usuarios está esperando 15 segundos — una experiencia inaceptable que genera tickets de soporte, provoca bajas de clientes enterprise, y arruina la reputación del producto. El P95 o el P99 te dicen la verdad sobre esa cola.
Los percentiles más comunes para SLAs de rendimiento son P95 y P99. El P95 es el más usado en productos B2C (si el 95% de tus usuarios tienen buena experiencia, es aceptable). El P99 se usa en infraestructura crítica y en productos enterprise (donde un solo fallo visible puede costar un contrato). Y Amazon, por ejemplo, usa internamente el P99.9 para sus servicios más críticos: solo una de cada mil peticiones puede ser lenta.
Esto te lo van a preguntar en la entrevista: "tienes una API con tiempo medio de 120 ms y los clientes se quejan de lentitud, ¿qué investigas?". La respuesta: "Miro el P95 y el P99. Si el P99 es 5 segundos, el 1% de los usuarios tiene una experiencia terrible y la media no lo refleja. Segmento por endpoint para ver si es un servicio concreto el que está tardando, y por hora del día para ver si es un problema de carga en pico".
### NTILE: clasificar cada fila en su grupo
PERCENTILE_CONT calcula un único valor resumen. Pero a veces quieres clasificar CADA fila en su cuartil o decil para después agrupar y comparar. Para eso sirve NTILE: es una window function que divide las filas ordenadas en N grupos iguales y asigna a cada una su número de grupo.
1-- NTILE: asignar cuartil a cada peticion2CREATE OR REPLACE TABLE peticiones AS3SELECT * FROM (VALUES4 ('GET /api/users', 45), ('GET /api/users', 52),5 ('POST /api/orders', 120), ('GET /api/products', 38),6 ('POST /api/orders', 4500), ('GET /api/users', 48),7 ('GET /api/products', 41), ('POST /api/orders', 95),8 ('GET /api/users', 55), ('GET /api/products', 340),9 ('POST /api/orders', 110), ('GET /api/users', 50)10) AS t(endpoint, ms);1112SELECT13 endpoint,14 ms,15 NTILE(4) OVER (ORDER BY ms) AS cuartil16FROM peticiones17ORDER BY ms;
NTILE(4) divide las 12 peticiones en 4 grupos de 3, del más rápido al más lento
### Cuando la desviación típica engaña: distribuciones bimodales
Hay un caso donde la desviación típica no solo es imprecisa — es activamente engañosa. Es cuando tus datos tienen dos grupos mezclados, cada uno con su propio centro. Imagina que mides el tiempo de sesión de una aplicación y la desviación típica sale alta: 13 minutos, con una media de 15 minutos. Piensas "hay mucha variabilidad, los usuarios son impredecibles". Pero si separas los datos por tipo de usuario, descubres que los gratuitos tienen sesiones de 3 a 5 minutos (media 4, stddev 0.8) y los premium de 25 a 35 minutos (media 30, stddev 3.2). No hay variabilidad real dentro de cada grupo: la desviación típica de 13 minutos que veías era un artefacto de mezclar dos poblaciones completamente distintas.
Esto se llama distribución bimodal: tiene dos "jorobas", dos picos de concentración, en vez de uno solo. Cuando calculas la desviación típica sobre una mezcla bimodal, te dice que la dispersión es enorme, pero la verdad es que cada subgrupo es estrecho y predecible. La desviación típica alta no refleja ruido ni variabilidad — refleja que estás sumando peras con manzanas sin saberlo. Y no es un caso raro: en datos de negocio, las bimodales aparecen constantemente.
- Tiempos de carga de página — usuarios con fibra (200 ms) vs. usuarios en móvil 3G (3.000 ms). La media dice 1.600 ms y la desviación típica es gigante, pero no hay nadie en 1.600 ms.
- Valores de pedido en e-commerce — compras individuales (20-60 EUR) vs. compras corporativas a granel (500-2.000 EUR). Media de 180 EUR en la que nadie se reconoce.
- Salarios en una empresa con dos perfiles — comerciales (30.000-40.000) vs. ingenieros senior (80.000-100.000). Media de 60.000 que no es el sueldo de nadie.
- Duración de llamadas de soporte — problemas simples (2-5 min) vs. incidencias complejas (30-60 min). Media de 18 minutos que no sirve para dimensionar el equipo.
La señal de alarma de una bimodal: una desviación típica que es mayor que la mitad de la media, o una media que "no es el dato de nadie" (ninguna observación está cerca de la media). Cuando eso pasa, tu instinto de detective tiene que activarse: segmenta por las dimensiones que tengas (tipo de cliente, canal, dispositivo, región) y mira si las dos jorobas se explican por un corte obvio. Si es así, NO reportes un solo número: reporta dos. "Los gratuitos usan la app 4 minutos; los premium, 30. La media global de 15 no es el comportamiento de nadie."
Esto no es un problema teórico: es uno de los errores más caros en análisis de negocio. Si le dices a producto "la sesión media es 15 minutos" y diseñan la experiencia para ese usuario de 15 minutos, no están sirviendo ni al de 4 ni al de 30. Cada vez que una desviación típica te parezca "demasiado grande", segmenta. Si encuentras dos grupos, tienes dos historias que contar por separado — no una historia promediada que no existe.
### Cuándo usar cada medida de dispersión
- Rango — Solo como primera alarma. Si el rango es enorme, algo pasa en los extremos. No lo uses como medida principal.
- Desviación típica — Cuando los datos son razonablemente simétricos, unimodales (un solo pico) y sin outliers extremos. Funciona bien para métricas que se distribuyen de forma normal (notas, mediciones físicas, errores de producción). Es la medida estándar en contextos científicos.
- IQR — Cuando hay outliers o distribuciones asimétricas (que es CASI SIEMPRE en datos de negocio). Salarios, tiempos de respuesta, ingresos por cliente, duración de sesión: todo esto tiene cola larga y necesita IQR, no desviación típica.
- Percentiles (P90, P95, P99) — Para SLAs, rendimiento y cualquier métrica donde "qué pasa con el X% peor" es la pregunta importante. El P95 es el estándar del sector para rendimiento de APIs y tiempos de entrega.
- Segmentar y repetir — Cuando la desviación típica es sospechosamente alta o la media no se parece a ningún dato real. Divide por la variable que sospeches y recalcula dentro de cada grupo.
### Historia: por qué los percentiles conquistaron Silicon Valley
Hasta los años 2000, la mayoría de equipos de ingeniería medían el rendimiento con medias. Los dashboards de monitoring mostraban "average response time" y todo el mundo se iba a casa contento si el número era bajo. Amazon fue de las primeras casas en romper con eso, y lo dejó por escrito: en el artículo donde describe Dynamo, su almacén de datos distribuido, explica que sus acuerdos de nivel de servicio "se expresan y se miden en el percentil 99,9 de la distribución". El razonamiento es el que deberías llevarte de esta lección: si mides la media o la mediana, construyes un sistema donde la mayoría está bien; si mides el percentil 99,9, construyes uno donde lo está todo el mundo. Y no es casualidad que ese 1 por mil sean a menudo los clientes que más gastan: tienen más historial, más datos, consultas más pesadas. Desde entonces medir la cola con percentiles se ha vuelto estándar en la industria — aunque cuidado, porque no todos los SLA públicos son de latencia: los de las nubes grandes suelen ser de disponibilidad, expresados como porcentaje de minutos en el mes.
La lección para ti como analista: si alguien te dice "el tiempo medio de X es aceptable", la primera pregunta es "¿y el P95?". Si no lo saben, lo calculas tú. Ese es el valor que añades: ver lo que la media esconde.
### Resumen: el retrato completo de un conjunto de datos
Con lo que sabes ahora, puedes hacer un resumen completo de cualquier métrica con cinco líneas de SQL: media, mediana, desviación típica, IQR (Q3 - Q1) y los percentiles de la cola (P90, P95, P99). Esos números, más un boxplot para visualizarlos, te dan un retrato que no engaña. La media sola es peligrosa. La media con la mediana ya te dice si hay asimetría. Los percentiles te cuentan qué pasa en los extremos — donde viven los problemas que nadie ve hasta que alguien se queja. Y si la desviación típica parece absurdamente alta, segmentas: probablemente estás mirando dos historias mezcladas en una.
Regístrate para guardar tu progreso.
## comentarios
Reporta erratas, ayuda a otros o comparte tu opinión. Sé constructivo.
Inicia sesión para comentar y responder.
cargando comentarios...