Describir los datos
En resumen: La estadística descriptiva dice dónde está el centro de los datos (media, mediana, valor más frecuente) y cuánto se dispersan (desviación estándar, percentiles, rango intercuartílico).
Problema
«El cliente promedio»
La jefa quiere una tarjeta de fidelidad. «El cliente promedio hace 8 pedidos al año. Regalemos algo con el octavo pedido: así lo recibe todo cliente normal.»
Suena razonable. Pero ¿cuántos clientes llegan a un octavo pedido? ¿Y cuántos pedidos hace un cliente normal? La media responde solo una de estas preguntas, y no siempre la que crees.
La idea
Media, mediana, moda
Un número que dice «los pedidos rondan esto» viene en tres tipos:
- la media: la suma dividida entre la cantidad;
- la mediana: el número del medio una vez ordenados; la mitad está por debajo y la mitad por encima;
- la moda: el valor que más se repite.
El valor de los pedidos del año, sin los pedidos cancelados:
La media es 10,63 € y la mediana 7,70 €. El pedido más frecuente es de 2,40 €. Tres números para los mismos datos, y el 64,4 % de los pedidos está por debajo de la media.
La razón es la cola: unos pocos pedidos grandes (hasta 78,70 €) suben la media. La mediana no los siente, porque solo mira lo que hay en el medio. La cola ya la viste en el histograma de los pedidos.
mode() devuelve una lista porque varios valores pueden compartir el máximo de repeticiones. Por eso values está redondeado al céntimo: si no, 2.4 y 2.4000000000000004 cuentan como valores distintos.
La idea
Dispersión: rango y desviación estándar
La media no dice cuánto se diferencian los pedidos entre sí. Dos tiendas con una media de 10 € pueden ser muy distintas: en una todos los pedidos rondan los 10 €, en la otra hay pedidos de 1 € y de 50 €. Eso se llama dispersión.
El rango es el mayor menos el menor: 77,90 €. Depende solo de los dos pedidos extremos, y un pedido raro lo cambia.
La desviación estándar (std) es lo lejos de la media que suele estar un pedido. Aquí es 9,43 €: un pedido de 10,63 € ± unos 9 € no tiene nada de raro.
Más precisamente, para curiosos
std es la raíz cuadrada de la media de las distancias al cuadrado respecto a la media. Elevar al cuadrado pesa mucho más las distancias grandes, así que con una cola larga std también crece.
pandas divide entre n − 1, NumPy (np.std) entre n. Con 10 459 pedidos la diferencia está en la cuarta cifra decimal. Con 5 números se nota: np.std(x, ddof=1) da lo mismo que pandas.
La idea
Percentiles y el rango intercuartílico
Un percentil dice por debajo de qué valor está una parte dada de los datos. El percentil 90 es el valor por debajo del cual está el 90 % de los pedidos. quantile los da con una proporción de 0 a 1:
El 10 % de los pedidos es de hasta 2,40 € y el 90 % de hasta 22,92 €. Las tres líneas discontinuas son los cuartiles: el percentil 25 (q1, 4,20 €), la mediana (7,70 €) y el 75 (q3, 14,00 €). Dividen los pedidos en cuatro partes iguales.
El 50 % central de los pedidos está entre q1 y q3. Su ancho es el IQR (rango intercuartílico, del inglés interquartile range): 14,00 − 4,20 = 9,80 €. A diferencia del rango, el IQR no se mueve por un solo pedido enorme.
Mira también el gráfico: de la mediana a q3 hay 6,30 €, pero de q1 a la mediana solo 3,50 €. La mitad derecha está estirada: esa es la cola, contada con números.
Pruébalo
El umbral del envío gratis
La tienda dará envío gratis al 10 % más grande de los pedidos. ¿A partir de qué importe? Guarda el umbral en threshold.
Solución
import pandas as pd
orders = pd.read_csv('year_orders.csv')
items = pd.read_csv('year_items.csv')
items['revenue'] = items['quantity'] * items['unit_price']
per_order = items.groupby('order_id')['revenue'].sum()
orders['value'] = orders['id'].map(per_order)
# Los pedidos cancelados no son ingresos: déjalos fuera.
values = orders[orders['status'] != 'cancelled']['value'].round(2)
threshold = values.quantile(0.9)
print(threshold)
print((values >= threshold).mean())values.quantile(0.9) es 22,92 €: justo el 10 % de los pedidos tiene ese importe o más. La media más una std da 20,06 €, y el 13,3 % de los pedidos está por encima. Con una cola larga, std no dice qué proporción queda por encima de una línea. Los percentiles sí.
La idea
describe(), leído hasta el final
describe() de tu primer vistazo a una tabla da todo lo anterior de una vez:
Ahora cada fila tiene sentido:
count: 10 459 pedidos;meanystd: 10,63 € de media, y suelen estar a unos 9,43 € de ella;minymax: de 0,80 € a 78,70 €;25%,50%,75%: los cuartiles.50%es la mediana.
Un vistazo rápido para detectar una cola: mean está bastante por encima de 50% (10,63 € frente a 7,70 €), y de 75% a max hay 64,70 €, frente a 3,40 € de min a 25%. La cola está a la derecha.
La idea
«El cliente promedio» no existe
Volvamos a la tarjeta de fidelidad. ¿Cuántos pedidos hace cada cliente en el año? Cuentan todos los pedidos, también los cancelados: el cliente sí pidió.
Hay 1390 clientes. De media hacen 8 pedidos, pero la mediana es 4 y el valor más frecuente 2. 224 clientes pidieron una sola vez, y el más fiel tiene 121 pedidos.
El histograma muestra por qué: la mayoría de los clientes está a la izquierda, con 1–5 pedidos, y una larga cola de clientes habituales llega hasta 121. La media (la línea continua) queda entre los dos mundos y no describe bien a nadie. El cliente «con 8 pedidos de media» es un número de un cálculo, no una persona con la que te vayas a cruzar a menudo.
Cuando los datos tienen una cola larga, la mediana te dice el caso normal, y la media sirve para otra cosa: por ejemplo, cuántos pedidos traerán en total 100 clientes nuevos.
La idea
Valores inusuales: la regla del IQR
¿Qué pedidos son inusualmente grandes? Una regla común: todo lo que está a más de 1,5 × IQR por debajo de q1 o por encima de q3 es inusual.
La valla superior es 14,00 + 1,5 × 9,80 = 28,70 €, y 609 pedidos la superan. La valla inferior es negativa, así que nada queda por debajo.
La regla solo señala. La decisión es tuya: estos 609 pedidos son reales y aportan cerca del 21 % de los ingresos. Quitas un valor solo cuando es un error comprobado, como un precio sin su coma decimal o un duplicado, como viste en la lección de limpieza.
Pruébalo
Los clientes habituales
¿Qué clientes piden con una frecuencia inusual? Calcula la valla superior de la regla del IQR para los pedidos por cliente (en limit) y guarda en regulars a los clientes que la superan.
Solución
import pandas as pd
orders = pd.read_csv('year_orders.csv')
per_customer = orders.groupby('customer_id').size()
q1 = per_customer.quantile(0.25)
q3 = per_customer.quantile(0.75)
limit = q3 + 1.5 * (q3 - q1)
regulars = per_customer[per_customer > limit]
print(limit, len(regulars))q1 son 2 pedidos, q3 es 7, el IQR es 5 y la valla es 7 + 1,5 × 5 = 14,5. 171 clientes la superan, y hacen el 54,6 % de todos los pedidos. Si la valla es el propio q3 (7), salen 340 clientes: es una cuarta parte de todos, no los inusuales. Si partes de la media, la regla ya no trata de cuartiles.
Ejercicio
¿Un regalo con el octavo pedido?
¿Cuántos pedidos hace el cliente normal? Guárdalo en typical. ¿Y qué proporción de los clientes llega a un octavo pedido? Guarda la proporción (de 0 a 1) en reach.
Solución
import pandas as pd
orders = pd.read_csv('year_orders.csv')
per_customer = orders.groupby('customer_id').size()
typical = per_customer.median()
reach = (per_customer >= 8).mean()
print(typical, round(reach * 100, 1))La mediana es 4 pedidos: la mitad de los clientes hace 4 o menos. La media (8) no es «el cliente normal». 340 de los 1390 clientes llegan a un octavo pedido, es decir, el 24,5 %. Un regalo con el octavo pedido llegaría a una cuarta parte de los clientes, los más fieles, no a «todo cliente normal». Con > 8 sale el 21,6 %: dejas fuera a los que tienen exactamente 8 pedidos.
Test
Ponte a prueba
Lecciones relacionadas
Sección «Lecciones relacionadas»- Se basa en: Columnas nuevas · Grupos: groupby · El primer gráfico · Distribuciones
- Continúa en: Muestra y población · Intervalos de confianza · Contrastar una hipótesis · Fuga de datos
- Ejercicios sobre el tema: Estadística para decidir