← 14 · La lección: señal frente a ruido F7
Entre doce meses siempre hay uno que queda primero, aunque ninguno venda más
¿Vende más agosto, o ha quedado primero por azar entre doce?
1 El problema
La página 11 busca el mes que más vende. Con los meses completos, el de media más alta es agosto, un 4,49 % por encima de la media. Es la clase de cifra con la que se decide cuándo lanzar una campaña o reforzar el almacén.
2 Por qué engaña
Comparar el ganador con la media es comparar al mejor de doce con un mes normal. Aunque los meses no tuvieran ninguna diferencia real, la variación normal haría que uno quedara el primero. Ese mes estaría siempre por encima de la media, porque precisamente por eso se le ha elegido.
Es el mismo error que premiar al comercial con mejor trimestre entre doce: alguno lo tiene, aunque todos vendan igual.
3 El principio
4 La solución
Es el test del máximo y es el que la página 11 ya aplica sin nombrarlo: en cada barajado se toma el mayor de los doce en lugar de un mes cualquiera.
5 Qué pasa con estos datos
El mejor mes que produce el azar vende de media 576.675 €, más que agosto. En el 86,6 % de los barajados el ganador del azar iguala o supera al real, así que agosto no se distingue de lo que produce el azar.
6 Para qué sirve
Siempre que se elige el mejor de varios: el mes, la provincia, el comercial, la campaña, la versión de una página web. La página de comparaciones múltiples hace lo mismo con muchas pruebas a la vez y enseña las dos formas de corregirlas.
El detalle técnico
Estadístico: la media más alta de facturación mensual entre los doce meses del año, sobre meses completos y sin anomalías. 2.000 permutaciones con semilla 42 sobre los 88 meses completos.
El test del máximo
# meses: una fila por mes completo, con su facturacion y su mes del anio (1 a 12)
real = meses.groupby("mes_del_anio")["factura"].mean().max() # el mejor de los doce
azar = []
for _ in range(2000):
etiquetas = rng.permutation(meses["mes_del_anio"]) # se barajan las etiquetas
azar.append(meses["factura"].groupby(etiquetas).mean().max())
p = (np.array(azar) >= real).mean() Fuentes: robustez.json, campo p1_estacionalidad y
eda.json, campo p1_mes_mayores_ventas.