¿Conteo o tasa? Cómo comparar grupos de distinto tamaño
Una pregunta, tres respuestas: compara sucursales por conteo y por tasa, y decide cuál responde lo que necesitas.
Curso gratis. Tu Maestro, una IA, .
Imagina que le preguntas a tu asistente "¿qué sucursal tiene más cancelaciones?". Con el archivo de la ferretería hay por lo menos tres respuestas honestas, y las tres salen de las mismas filas:
- Zapopan, con 8, si cuenta filas canceladas.
- Centro, con 4, si cuenta tickets cancelados.
- Tonalá, con 25%, si divide los tickets cancelados entre los tickets de cada sucursal.
La primera ya la sabes descartar: cuenta líneas de producto, y un ticket cancelado con cuatro productos cuenta cuatro veces. Las otras dos son correctas y responden preguntas distintas. "Más cancelaciones" puede querer decir más en total o más seguido.
Centro es la sucursal con más tickets del mes, 40. Es normal que ahí haya más de casi todo: más ventas, más devoluciones, más cancelaciones. Tonalá tiene 12 tickets y se le cancelaron 3: uno de cada cuatro. Si quieres saber dónde algo está fallando en el proceso, la tasa es la que te lo dice. Avanza por la gráfica:
Paso 1 de 4
Tres maneras de contar
Cada panel responde "¿qué sucursal tiene más cancelaciones?" con otra cuenta. Antes de seguir, busca la barra más larga de cada panel.
¿Conteo o tasa?
Depende de lo que vas a decidir con el número:
- El conteo sirve para decisiones de volumen: a qué sucursal le toca más trabajo de devoluciones, dónde se pierde más dinero en total.
- La tasa sirve para comparar grupos de distinto tamaño: dónde pasa algo más seguido, dónde un proceso falla más.
Cuando la IA te da un "más", pregúntate cuál de las dos necesitas. Si no lo dice, pregúntale cuál calculó: un "más" sin base puede ser cualquiera de las dos.
Una advertencia sobre las tasas con pocos casos. Tonalá tiene 12 tickets. Si se hubiera cancelado uno menos, su tasa sería 16.7%; uno más, 33.3%. Una tasa con una base chica brinca mucho, así que repórtala con sus números: "3 de 12 (25%)". Quien lea puede juzgar cuánto pesa. ¿Cómo sé si mi base es demasiado chica?
La tasa, en pandas
Para cada sucursal necesitas dos conteos al mismo nivel, tickets, y luego una división:
total = data.groupby("sucursal")["ticket"].nunique() # tickets por sucursal
cancelados = data[data["estado"] == "cancelado"] # solo las filas canceladas
cancelados = cancelados.groupby("sucursal")["ticket"].nunique() # tickets cancelados por sucursal
tasa = cancelados / total * 100 # porcentaje por sucursalTodo lo que ves ya lo conoces: groupby junta por sucursal, nunique cuenta tickets distintos y el filtro deja solo los cancelados. Lo nuevo es que pandas divide sucursal por sucursal: el 4 de Centro entre el 40 de Centro, el 3 de Tonalá entre el 12 de Tonalá.
Inténtalo
El código inicial imprime lo que daría una IA que cuenta: tickets cancelados por sucursal. Agrega el total de tickets por sucursal y la tasa. Terminas cuando ves a Tonalá arriba con 25.0.
Agrega el total de tickets por sucursal y calcula el porcentaje de tickets cancelados. Imprime la tasa redondeada a un decimal y ordenada de mayor a menor con .sortvalues(ascending=False). Terminas cuando Tonalá aparece primero, con 25.0.
Agrega el total de tickets por sucursal y calcula el porcentaje de tickets cancelados. Imprime la tasa redondeada a un decimal y ordenada de mayor a menor con .sort_values(ascending=False). Terminas cuando Tonalá aparece primero, con 25.0.
Ejecuta tu código para ver lo que imprime y el valor de su última expresión. Cada ejecución empieza de nuevo. Ctrl+Enter ejecuta tu código. Tab agrega sangría; para salir del editor, presiona Escape y luego Tab.
Listo para ejecutar tu código.
Ejecuta tu código para ver su salida aquí.
Datos: ventas-marzo, 312 filas
Enter guarda una celda y Escape la deja como estaba. Deja una celda vacía para un valor faltante.
| Fila | Quitar | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | |||||||||||
| 2 | |||||||||||
| 3 | |||||||||||
| 4 | |||||||||||
| 5 | |||||||||||
| 6 | |||||||||||
| 7 | |||||||||||
| 8 | |||||||||||
| 9 | |||||||||||
| 10 | |||||||||||
| 11 | |||||||||||
| 12 | |||||||||||
| 13 | |||||||||||
| 14 | |||||||||||
| 15 | |||||||||||
| 16 | |||||||||||
| 17 | |||||||||||
| 18 | |||||||||||
| 19 | |||||||||||
| 20 |