El diagrama de Pareto es una variación del histograma tradicional, puesto que en el Pareto se ordenan los datos por su frecuencia de mayor a menor. El principio de Pareto, también conocido como la regla 80 – 20, enunció en su momento que «el 20% de la población, poseía el 80% de la riqueza».
Su uso se aplica con relativo éxito en muchos ámbitos, soportando metodologías de priorización, por ejemplo. El diagrama de Pareto hace parte de lo que se denominan técnicas gráficas de calidad, como lo son las siete herramientas básicas, utilizadas para la solución de problemas referentes a la calidad, mencionadas por primera vez por Kaoru Ishikawa.
El objetivo de este artículo consiste en el desarrollo de un par de metodologías de elaboración de diagramas de Pareto, haciendo uso de dos herramientas: la tradicional hoja de cálculo de Excel, y el popularizado lenguaje de programación Python.
Supongamos que un proceso que produce refrigeradores desea establecer controles sobre los defectos que aparecen en las unidades que salen como producto terminado en la línea de producción. Para ello se hace necesario determinar cuáles son los defectos más frecuentes. En primer lugar se clasificaron todos los defectos posibles:
Después de inspeccionar 88 refrigeradores defectuosos, se obtuvo la siguiente tabla de frecuencias:
Tipo de defecto | Frecuencia |
Burlete defectuoso | 9 |
Pintura defectuosa | 5 |
Gavetas defectuosas | 1 |
Mala nivelación | 1 |
Motor no arranca | 1 |
Motor no se detiene | 36 |
No enfría | 27 |
No funciona | 2 |
Otros | 0 |
Puerta defectuosa | 0 |
Puerta no cierra | 2 |
Rayas | 4 |
Total | 88 |
Ordenamos los datos de mayor a menor y anexamos una columna de frecuencia relativa (porcentual) y otra de frecuencia relativa acumulada (porcentual). Para obtener las frecuencias relativas utilizamos la siguientes fórmulas:
Veamos por ejemplo la frecuencia relativa del defecto «motor no se detiene«:
Podemos calcular la frecuencia relativa porcentual de la siguiente manera:
Veamos cómo hacerlo en Excel:
Recuerde que previamente debe ordenar las frecuencias de mayor a menor. Utilizando esta formulación, obtenemos el siguiente resultado:
Aquí podemos observar como la causa 1: motor no se detiene se ha presentado con una frecuencia de 36 defectos (de un total de 88 defectos totales), lo que representa un 40,91% del total de defectos. También podemos, con base en nuestra data de estudio, que las causas 1, 2 y 3, representan más del 80% de los defectos totales (81,82% exactamente). Si consideramos que estas son 3 causas de 12 causas totales, esto se aproxima a la regla empírica de Pareto (3/12 = 0,25). En este caso, el 81,82% de los defectos se debe al 25% de las causas.
Veamos ahora cómo graficar el Diagrama de Pareto tradicional:
Seleccionamos los datos de las columnas ‘Tipo de defecto’, ‘Frecuencia’ y ‘Frecuencia relativa acumulada’. A continuación damos clic en el Menú “Insertar”; seleccionamos «Gráficos recomendados”; luego en “Pareto”.
A diferencia de otras versiones, desde Microsoft Excel 2016 podemos acceder a este tipo de representación gráfica con suma facilidad:
Quienes prefieran utilizar algún lenguaje de programación, ya sea porque el diagrama que requieren acompañará un desarrollo o un modelo más robusto, integrará datos desde fuentes externas, o simplemente así lo prefieren; pueden utilizar Python para graficar su Pareto son suma facilidad. Explicaremos el código paso a paso, sin embargo, al finalizar, dejaremos el código completo para su disposición.
En este caso, requerimos del uso de dos librerías
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame({'frecuencia': [9, 5, 1, 1, 1, 36, 27, 2, 0, 0, 2, 4]}) df.index = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'] df = df.sort_values(by='frecuencia',ascending=False)
En la variable df quedará contenida la data de entrada en un Dataframe. Inicialmente agregaremos las frecuencias de acuerdo a nuestro ejemplo.
Posteriormente, por medio de df.index nombraremos las causas de acuerdo al orden de las frecuencias ya asignadas. Preferimos en este caso numerarlas en lugar de colocar el nombre de cada defecto. Por ejemplo:
Burlete defectuoso = Causa 1 (Frecuencia 9)
Pintura defectuosa = Causa 2 (Frecuencia 5)
La siguiente línea de código utiliza el método .sort_values para ordenar las frecuencias contenidas en df de forma descendente. El resultado parcial de df será:
frecuencia_relativa = df["frecuencia"].cumsum()
total_defectos = df["frecuencia"].sum()
df["relativa_acum_porcentual"] = frecuencia_relativa/total_defectos*100
La frecuencia relativa se calcula con la función .cumsum. Por eso seleccionamos dentro del DataFrame df la columna frecuencia. El número total de defectos se calcula con la función .sum sobre la columna frecuencia.
Para calcular la frecuencia relativa porcentual, dividimos la columna frecuencia relativa entre el total de defectos y se multiplica por 100. Tal como se puede observar en la última línea del código. El resultado parcial de df será:
El último paso corresponde a graficar:
fig, ax = plt.subplots()
ax.bar(df.index, df["frecuencia"], color="C0")
ax2 = ax.twinx()
ax2.plot(df.index, df["cumpercentage"], color="C1", marker="o", ms=5)
plt.show()
El resultado será:
Alternativa 1, ejecución en nuestro equipo:
Lo primero que debemos considerar, en el caso de que queramos ejecutar este código en nuestro equipo, es que es preciso contar con la instalación de Python.
Ahora, lo recomendable es trabajar con algún editor de código práctico (IDE), por ejemplo: Sublime Text, o Spyder (Una herramienta más completa y por ende más robusta y pesada).
Alternativa 2, ejecución en un entorno virtual (Recomendado):
Podemos utilizar del mismo modo, un entorno virtual. En este caso recomendamos el uso de Colaboratory de Google, un entorno que cuenta con todas las herramientas necesarias para nuestros desarrollos. No tendremos que instalar nada en nuestro equipo, y aprovecharemos la potencia de las máquinas de Google.
Puedes ver y ejecutar el cuaderno de este módulo en nuestro Colaboratory: Diagrama de Pareto en Python
Código completo:
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame({'frecuencia': [9, 5, 1, 1, 1, 36, 27, 2, 0, 0, 2, 4]})
df.index = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12']
df = df.sort_values(by='frecuencia',ascending=False)
frecuencia_relativa = df["frecuencia"].cumsum()
total_defectos = df["frecuencia"].sum()
df["cumpercentage"] = frecuencia_relativa/total_defectos*100
fig, ax = plt.subplots()
ax.bar(df.index, df["frecuencia"], color="C0")
ax2 = ax.twinx()
ax2.plot(df.index, df["cumpercentage"], color="C1", marker="o", ms=5)
plt.show()
En una pequeña comunidad agrícola en Michoacán, México, un niño llamado José Hernández soñaba con…
Sábado por la mañana, Robert acaba de acompañar a su mujer a su clase de…