Saltar al contenido

lección 1

Media, mediana, moda: y cuándo cada una miente

La media no es el resumen. Cuándo usar cada medida de centralidad y por qué la media del CEO engaña a toda la oficina.

50 min

Bill Gates entra en un bar de barrio donde hay cuarenta personas con un patrimonio medio de 35.000 euros. En el instante en que se sienta, el patrimonio medio del bar pasa de 35.000 euros a más de mil millones. Nadie ha ganado un céntimo más, nadie se siente más rico, y sin embargo un estadístico despistado diría que todo el mundo en ese bar es multimillonario. La broma es vieja pero el problema es real: en cualquier empresa con un puñado de sueldos altos — el CEO, los cofundadores — la media aritmética deja de representar al grupo. De una plantilla de 45 personas, 38 pueden cobrar menos que la media publicada, y la diapositiva de "salario medio: 62.000 euros" provoca incredulidad en quien cobra 24.000. El número es correcto. La historia que cuenta, no.

Este es el primer problema que vamos a resolver hoy: entender que la media aritmética es solo UNA de las formas de resumir un conjunto de datos, y que hay situaciones concretas y frecuentes donde esa forma engaña. No es un error matemático — es un error de comunicación. Y como analista, tu trabajo no es solo calcular: es elegir la medida que cuenta la historia verdadera.

### Las tres medidas de centralidad

Cuando tienes un montón de números y alguien te pide "resúmemelos en uno", estás buscando una medida de tendencia central: un número que represente al grupo. Hay tres candidatas clásicas, y cada una responde a una pregunta distinta:

  • Media aritmética — suma todos los valores y divide entre cuántos hay. Responde a: "si repartiéramos el total en partes iguales, ¿cuánto tocaría a cada uno?".
  • Mediana — ordena todos los valores de menor a mayor y coge el del medio. Responde a: "¿cuál es el valor que deja a la mitad por debajo y a la mitad por encima?".
  • Moda — el valor que más se repite. Responde a: "¿cuál es el caso más frecuente?".

La analogía que me hizo entender esto de verdad: imagina que entras en un bar y preguntas "¿qué se bebe aquí normalmente?". La media te diría "de media se gastan 8,40 euros por consumición" — pero eso incluye al señor del reservado que pidió una botella de 200 euros. La mediana te diría "la mitad de la gente gasta menos de 4 euros, la otra mitad más" — un retrato más justo. Y la moda te diría "lo que más se pide es una caña de 2,80" — el caso típico. Las tres son correctas; cada una cuenta una historia diferente.

### La media: cuándo funciona y cuándo miente

La media funciona bien cuando los datos se distribuyen de forma más o menos simétrica alrededor del centro, sin valores extremos que tiren del cálculo hacia un lado. La estatura de las personas adultas en España es un buen ejemplo: se concentra alrededor de 170 cm, hay gente un poco más alta y un poco más baja, y casi nadie mide 2,10 ni 1,30. En ese escenario, la media (unos 170 cm) y la mediana (también unos 170 cm) coinciden, y las dos representan bien al grupo.

La media MIENTE — o más precisamente, deja de representar al grupo — cuando la distribución es asimétrica (es decir, cuando los valores no se reparten de forma equilibrada a ambos lados del centro). Los sueldos, los precios de las viviendas, el tiempo de carga de una página web, los ingresos por cliente: todos estos conjuntos tienen una cola larga hacia la derecha. Muchos valores concentrados abajo y unos pocos valores muy altos que estiran la media hacia arriba. En todos estos casos, la media es mayor que la mediana, y la media NO describe la experiencia del individuo típico.

En distribuciones asimétricas, la media se aleja del centro real del grupo

Consejo de senior: cuando presentes un dato de salarios, tiempos de respuesta, ingresos por cliente o cualquier métrica con cola larga, usa SIEMPRE la mediana como cifra principal. Puedes dar la media como complemento, pero la historia la cuenta la mediana. Si la media y la mediana están muy separadas, menciónalo explícitamente: "la mediana de ingreso por cliente es 45 euros; la media es 120 euros, arrastrada por un 5% de cuentas enterprise". Eso es transparencia.

### La mediana: robusta pero no perfecta

La mediana tiene una propiedad que la hace especialmente útil en análisis de negocio: es robusta frente a valores extremos. Si el CEO de la empresa del ejemplo cobrara 480.000 o 4.800.000, la mediana no se movería ni un céntimo — porque la mediana solo mira el valor del medio, no cuánto se alejan los extremos. Por eso los institutos de estadística publican el "salario mediano" cuando quieren describir lo que cobra un trabajador típico.

Pero la mediana tiene sus propias trampas. La más importante: ignora completamente la magnitud de los extremos. Si tienes un e-commerce donde la mediana de pedido son 35 euros, y de repente un cliente corporativo empieza a hacer pedidos de 50.000 euros cada semana, la mediana no se mueve. La media sí, y en ese caso la media te está contando algo importante: que tu mix de negocio ha cambiado. Otra trampa: con pocos datos, la mediana salta entre valores de forma brusca. Si tienes 7 pedidos y el del medio es 35, basta con que el siguiente sea 80 para que la mediana salte a 57,5 sin que nada "real" haya cambiado.

### La moda: el caso más frecuente

La moda es la medida que menos se usa en análisis numérico y la que más se usa sin saberlo en análisis categórico. Cuando dices "la talla más vendida es la M" o "el plan más contratado es el básico", estás usando la moda: el valor que más se repite. En datos numéricos continuos (como ingresos), la moda bruta a menudo no existe — cada valor puede aparecer una sola vez. Pero cuando los agrupas en tramos (0-20K, 20-40K, 40-60K...), el tramo con más gente es la clase modal, y eso sí es informativo.

Un caso donde la moda importa de verdad: precios. Si vendes un producto a 9,99, 14,99 y 24,99, y el 60% de los clientes eligen 9,99, la media de precio de venta será unos 14 euros, la mediana 9,99 y la moda 9,99. Aquí la moda te dice algo que ni la media ni la mediana comunican tan directamente: el grueso de tu negocio está en el precio bajo. Si quieres subir el ingreso medio, necesitas que la gente se mueva del 9,99 — y la moda te dice cuánta gente tienes ahí.

### La regla práctica: cuándo usar cada una

La mediana es la apuesta segura cuando no conoces la forma de los datos

### Los descriptivos básicos en SQL: tu kit de detective

Ahora que entiendes QUÉ mide cada cifra y CUÁNDO elegir una u otra, necesitas saber CÓMO calcularlas. SQL tiene funciones de agregación nativas para casi todas, y para la mediana y los percentiles se usa PERCENTILE_CONT, que no es cosa de DuckDB: la misma sintaxis funciona en PostgreSQL, Oracle y Snowflake, y en SQL Server solo hay que añadirle un OVER ( ) al final. Vamos a verlas todas juntas, porque en la práctica siempre las pides a la vez — nunca quieres solo la media, quieres el retrato completo.

1-- El kit completo de descriptivos en DuckDB
2-- Datos de ejemplo: tickets de soporte con tiempo de resolucion (horas)
3WITH tickets AS (
4 SELECT ticket_id, horas_resolucion::DOUBLE AS horas_resolucion FROM (VALUES
5 (1, 0.5), (2, 1.2), (3, 0.8), (4, 2.1), (5, 1.5),
6 (6, 0.9), (7, 48.0), (8, 1.1), (9, 0.7), (10, 1.8)
7 ) AS t(ticket_id, horas_resolucion)
8)
9SELECT
10 COUNT(*) AS total_tickets,
11 ROUND(AVG(horas_resolucion), 2) AS media_horas,
12 ROUND(PERCENTILE_CONT(0.5) WITHIN GROUP
13 (ORDER BY horas_resolucion), 2) AS mediana_horas,
14 ROUND(MIN(horas_resolucion), 2) AS minimo,
15 ROUND(MAX(horas_resolucion), 2) AS maximo
16FROM tickets;

Media vs mediana en tiempos de resolución: un ticket de 48h arrastra la media

### PERCENTILE_CONT: la mediana y más allá

La función PERCENTILE_CONT es la navaja suiza de los descriptivos en SQL. Con el argumento 0.5 te da la mediana. Pero puedes pedir cualquier percentil: 0.25 (el primer cuartil, donde está el 25% inferior), 0.75 (el tercer cuartil), 0.90, 0.95, 0.99... Esos números te cuentan la historia completa de la distribución sin necesitar un gráfico. En la siguiente lección profundizaremos en percentiles y boxplots; hoy lo importante es que sepas que PERCENTILE_CONT(0.5) es como pides la mediana en SQL.

Un detalle que sorprende la primera vez: el número que devuelve PERCENTILE_CONT normalmente NO está entre tus datos. La palabra "CONT" es de "continuo": la función coloca tus valores en una recta ordenada y calcula el punto exacto donde cae el porcentaje que has pedido, interpolando entre los dos valores vecinos si hace falta. Si pides el p25 de diez ventas, el resultado cae entre la tercera y la cuarta, y puede ser un importe que ningún cliente ha pagado nunca. Existe la versión hermana, PERCENTILE_DISC ("discreto"), que sí devuelve siempre uno de tus datos: el primero cuya posición alcanza el porcentaje pedido. Para resumir distribuciones se usa la continua; la discreta sirve cuando el valor tiene que ser real y existente — un precio de catálogo, la fecha de un pedido concreto.

Y un detalle que muerde: si escribes los datos con un decimal, obtienes percentiles con un decimal. PERCENTILE_CONT respeta el tipo de la columna, y una columna de números escritos como 0.3 o 72.0 es una columna de un decimal, así que el resultado interpolado sale redondeado a un decimal — y ponerle un ROUND(..., 2) por fuera no recupera nada, porque la precisión ya se perdió dentro. Si el percentil te sale más redondo de lo que esperas, convierte la columna al leerla: SELECT horas::DOUBLE AS horas FROM ... En PostgreSQL esto no pasa porque su PERCENTILE_CONT no acepta decimales: solo double precision (o intervalos de tiempo), así que promociona la columna antes de calcular. DuckDB es más permisivo y por eso te deja cometer el error.

1-- Mediana y cuartiles de un tiron
2WITH ventas AS (
3 SELECT importe::DOUBLE AS importe FROM (VALUES
4 (12.50), (15.00), (18.90), (22.00), (25.00),
5 (28.50), (35.00), (42.00), (89.00), (350.00)
6 ) AS t(importe)
7)
8SELECT
9 ROUND(PERCENTILE_CONT(0.25) WITHIN GROUP (ORDER BY importe), 2) AS p25,
10 ROUND(PERCENTILE_CONT(0.50) WITHIN GROUP (ORDER BY importe), 2) AS mediana,
11 ROUND(PERCENTILE_CONT(0.75) WITHIN GROUP (ORDER BY importe), 2) AS p75,
12 ROUND(PERCENTILE_CONT(0.95) WITHIN GROUP (ORDER BY importe), 2) AS p95
13FROM ventas;

Cuartiles y p95 para entender la forma de la distribución sin gráficos

Un dashboard que solo muestra la media de tiempos de respuesta, ticket medio o cualquier métrica con cola larga te está engañando activamente. No por maldad — por pereza o desconocimiento. Cada vez que veas un AVG solitario en un dashboard de producción, pregunta: "¿y la mediana?". Si la respuesta es "no la tenemos", ya has encontrado el primer hueco del informe. Y si la media y la mediana difieren más de un 30%, el dashboard necesita urgentemente una segunda línea.

### Caso real: el ticket medio vs el ticket mediano

En 2019 trabajé con un e-commerce de moda que reportaba un "ticket medio de 78 euros". El equipo comercial usaba esa cifra para dimensionar campañas de descuento: "si el ticket medio es 78, un cupón de 10 euros sobre 80 debería mover a la mayoría". Pero cuando calculamos la mediana, salió 42 euros. El 68% de los clientes gastaba menos de 78 euros. El cupón "sobre 80" solo alcanzaba al 32% de la base. La campaña convirtió un 4% en lugar del 15% esperado, y se quemaron 200.000 euros en descuentos que casi nadie podía usar.

Lo que había pasado: un segmento de clientes B2B (corporativos) hacía pedidos de 400-900 euros cada semana. Eran el 5% de los clientes pero generaban el 35% de la facturación. Esos pedidos grandes tiraban de la media hacia arriba, hasta un número que no representaba al comprador típico (una mujer de 30-45 años que compra una prenda de 40 euros). La media era correcta para facturación total (es aditiva: media * n_clientes = facturación), pero INCORRECTA para decidir dónde poner el umbral de un cupón.

### Cómo calcular la moda en SQL

SQL no tiene una función MODE nativa estándar (DuckDB sí la ofrece como MODE(), pero no todos los motores). El patrón general para calcular la moda — el valor más frecuente — es agrupar, contar y quedarte con el primero. Es un GROUP BY con ORDER BY DESC LIMIT 1:

1-- Moda: el plan de suscripcion mas contratado
2WITH suscripciones AS (
3 SELECT * FROM (VALUES
4 ('gratuito'), ('gratuito'), ('gratuito'), ('gratuito'), ('gratuito'),
5 ('gratuito'), ('gratuito'), ('pro'), ('pro'), ('pro'),
6 ('pro'), ('enterprise'), ('enterprise')
7 ) AS t(plan)
8)
9SELECT
10 plan AS plan_mas_frecuente,
11 COUNT(*) AS conteo
12FROM suscripciones
13GROUP BY plan
14ORDER BY conteo DESC
15LIMIT 1;

La moda en SQL: GROUP BY + ORDER BY + LIMIT 1

### Detectar la asimetría: media vs mediana como señal

Hay un truco rápido que uso desde mi primer trabajo: compara media y mediana. Si son parecidas (diferencia menor del 10-15%), la distribución es razonablemente simétrica y la media funciona bien. Si la media es bastante mayor que la mediana, tienes una cola a la derecha (sueldos, tiempos, ingresos). Si la media es menor que la mediana, tienes una cola a la izquierda (menos común, pero pasa con tasas de cancelación en planes baratos vs caros). Cuanto mayor sea la diferencia entre media y mediana, menos representativa es la media.

La divergencia entre media y mediana es tu primera señal de alarma

### El retrato completo con Pandas: describe()

Cuando trabajas en local con un fichero CSV o un DataFrame, Pandas te da todos los descriptivos de un golpe con .describe(). Es lo primero que ejecuto cuando abro un dataset nuevo — antes de hacer nada más, quiero ver la forma de cada columna numérica:

1import pandas as pd
2
3# Simulamos los tickets del e-commerce
4df = pd.DataFrame({
5 'importe': [12.50, 15.00, 18.90, 22.00, 25.00,
6 28.50, 35.00, 42.00, 89.00, 350.00]
7})
8
9print(df['importe'].describe())
10# count 10.000000
11# mean 63.790000 <- la media (arrastrada por 89 y 350)
12# std 102.944467 <- desviacion estandar (alta = mucha dispersion)
13# min 12.500000
14# 25% 19.675000 <- primer cuartil
15# 50% 26.750000 <- MEDIANA
16# 75% 40.250000 <- tercer cuartil
17# max 350.000000

describe() te da el retrato completo en una línea

Esto te lo van a preguntar en la entrevista: "Tienes un dataset nuevo, ¿cuál es lo primero que haces?". La respuesta que esperan es "df.describe() para ver la forma de las columnas, buscar medias que no cuadran con la mediana, detectar mins o maxs imposibles, y contar nulos con df.isnull().sum()". No es la única respuesta buena, pero es la que demuestra criterio analítico antes de escribir ni una línea de análisis.

### Cómo mejorar un dashboard que solo muestra la media

Vamos a lo práctico. Heredas un dashboard que muestra "Ticket medio: 78 EUR" y "Tiempo medio de resolución: 5,8 horas". Sabes que esas medias probablemente mienten. ¿Cómo lo mejoras sin tirarlo a la basura? Tres pasos concretos:

  1. 01.Añade la mediana al lado de cada media. No la sustituyas: da las dos. La diferencia entre ambas es información en sí misma.
  2. 02.Añade el percentil 90 o 95 para métricas de experiencia de usuario (tiempos de carga, tiempos de respuesta de soporte). El p90 te dice "el 10% peor de los usuarios experimenta ESTO".
  3. 03.Si puedes, añade un mini-histograma o sparkline que muestre la distribución. No hace falta un gráfico entero: una barra de 5 tramos ya te dice si la distribución es simétrica o tiene cola.
Un dashboard honesto muestra la distribución, no solo un número

### Cómo comunicar esto a un stakeholder

No basta con saber que la mediana es mejor: tienes que saber DECIRLO sin que tu interlocutor piense que estás siendo pedante. En mi experiencia, la fórmula que funciona es dar las dos cifras y explicar la diferencia en una frase. No digas "la media es incorrecta" — demasiado agresivo si la ha puesto otro equipo. Di: "el cliente mediano gasta 45 euros; la media es 120 porque incluye un segmento enterprise de alto valor. Para decisiones sobre el cliente típico, yo usaría la mediana."

Otra fórmula útil cuando presentas a dirección: "el X% de los clientes está por debajo de la media". Si el 75% de tus clientes gasta menos que la media, la media no los representa — y decir ese porcentaje hace que el oyente entienda instantáneamente por qué necesita otro número. Esa frase — "el 80% de la plantilla cobra por debajo de la media" — es más poderosa que cualquier explicación estadística.

### Resumen y criterio para elegir

  1. 01.Calcula SIEMPRE media y mediana juntas. La diferencia entre ambas ya te dice algo.
  2. 02.Si son parecidas (menos de un 15% de diferencia): la media vale, úsala.
  3. 03.Si la media es mucho mayor que la mediana: usa la mediana como cifra principal, da la media como contexto.
  4. 04.Si los datos son categóricos o tienen opciones discretas: la moda es tu métrica natural.
  5. 05.Nunca presentes una media sin haber mirado la distribución debajo. Un histograma de 10 segundos te ahorra un error de un informe entero.
  6. 06.Para métricas de experiencia de usuario (tiempos), añade siempre el p90 o p95. La cola es donde están los clientes enfadados.

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...