library(dplyr)
library(ggplot2)
library(knitr)
library(kableExtra)
library(scales)Análisis ABC de Inventarios
Clasificación de Productos según su Valor Anual de Consumo
0.1 Resumen
El análisis ABC es una técnica de clasificación de inventarios basada en el principio de Pareto, que permite identificar los productos que generan el mayor impacto económico dentro de una organización.
El objetivo de este estudio es clasificar los artículos de inventario en categorías A, B y C para apoyar la toma de decisiones relacionadas con compras, almacenamiento y control de inventarios.
0.2 Introducción
Las organizaciones suelen administrar cientos o miles de artículos de inventario. Sin embargo, no todos tienen la misma importancia económica.
El análisis ABC permite priorizar aquellos productos que representan la mayor proporción del valor monetario total del inventario, facilitando la asignación eficiente de recursos.
0.3 Marco Teórico
0.3.1 Principio de Pareto
El análisis ABC se fundamenta en el principio de Pareto, que establece que aproximadamente:
- El 20% de los artículos representa el 80% del valor.
- El 30% de los artículos representa el 15% del valor.
- El 50% de los artículos representa el 5% del valor.
0.3.2 Clasificación ABC
| Categoría | Porcentaje acumulado del valor |
|---|---|
| A | 0% - 80% |
| B | 80% - 95% |
| C | 95% - 100% |
0.4 Metodología
0.4.1 Paquetes Utilizados
0.4.2 Base de Datos
Se dispone de información de demanda anual y costo unitario de 15 productos.
Producto = c(
"Motor", "Rodamiento", "Banda", "Sensor",
"Tornillo", "Engrane", "Válvula",
"Interruptor", "Cable", "Filtro",
"Empaque", "Fusible", "Lubricante",
"Resorte", "Tuerca"
)
Demanda = c(
50, 300, 200, 80,
5000, 120, 60,
150, 800, 400,
1000, 3000, 200,
1500, 4000
)
Costo = c(
1000, 50, 40, 250,
2, 150, 180,
30, 10, 25,
5, 1.5, 50,
3, 1
)
inventario <- data.frame(
Producto,
Demanda,
Costo
)
inventario Producto Demanda Costo
1 Motor 50 1000.0
2 Rodamiento 300 50.0
3 Banda 200 40.0
4 Sensor 80 250.0
5 Tornillo 5000 2.0
6 Engrane 120 150.0
7 Válvula 60 180.0
8 Interruptor 150 30.0
9 Cable 800 10.0
10 Filtro 400 25.0
11 Empaque 1000 5.0
12 Fusible 3000 1.5
13 Lubricante 200 50.0
14 Resorte 1500 3.0
15 Tuerca 4000 1.0
0.5 Cálculo del Valor Anual de Consumo
La fórmula utilizada es:
\[ Valor\ Anual = Demanda \times Costo\ Unitario \]
inventario <- inventario %>%
mutate(
Valor_Anual = Demanda * Costo
)
inventario Producto Demanda Costo Valor_Anual
1 Motor 50 1000.0 50000
2 Rodamiento 300 50.0 15000
3 Banda 200 40.0 8000
4 Sensor 80 250.0 20000
5 Tornillo 5000 2.0 10000
6 Engrane 120 150.0 18000
7 Válvula 60 180.0 10800
8 Interruptor 150 30.0 4500
9 Cable 800 10.0 8000
10 Filtro 400 25.0 10000
11 Empaque 1000 5.0 5000
12 Fusible 3000 1.5 4500
13 Lubricante 200 50.0 10000
14 Resorte 1500 3.0 4500
15 Tuerca 4000 1.0 4000
0.6 Ordenamiento de Productos
inventario_abc <- inventario %>%
arrange(desc(Valor_Anual))
inventario_abc Producto Demanda Costo Valor_Anual
1 Motor 50 1000.0 50000
2 Sensor 80 250.0 20000
3 Engrane 120 150.0 18000
4 Rodamiento 300 50.0 15000
5 Válvula 60 180.0 10800
6 Tornillo 5000 2.0 10000
7 Filtro 400 25.0 10000
8 Lubricante 200 50.0 10000
9 Banda 200 40.0 8000
10 Cable 800 10.0 8000
11 Empaque 1000 5.0 5000
12 Interruptor 150 30.0 4500
13 Fusible 3000 1.5 4500
14 Resorte 1500 3.0 4500
15 Tuerca 4000 1.0 4000
0.7 Porcentaje Acumulado
inventario_abc <- inventario_abc %>%
mutate(
Porcentaje = Valor_Anual /
sum(Valor_Anual) * 100,
Acumulado = cumsum(Porcentaje)
)
inventario_abc Producto Demanda Costo Valor_Anual Porcentaje Acumulado
1 Motor 50 1000.0 50000 27.427318 27.42732
2 Sensor 80 250.0 20000 10.970927 38.39824
3 Engrane 120 150.0 18000 9.873834 48.27208
4 Rodamiento 300 50.0 15000 8.228195 56.50027
5 Válvula 60 180.0 10800 5.924301 62.42457
6 Tornillo 5000 2.0 10000 5.485464 67.91004
7 Filtro 400 25.0 10000 5.485464 73.39550
8 Lubricante 200 50.0 10000 5.485464 78.88097
9 Banda 200 40.0 8000 4.388371 83.26934
10 Cable 800 10.0 8000 4.388371 87.65771
11 Empaque 1000 5.0 5000 2.742732 90.40044
12 Interruptor 150 30.0 4500 2.468459 92.86890
13 Fusible 3000 1.5 4500 2.468459 95.33736
14 Resorte 1500 3.0 4500 2.468459 97.80581
15 Tuerca 4000 1.0 4000 2.194185 100.00000
0.8 Clasificación ABC
inventario_abc <- inventario_abc %>%
mutate(
Clase = case_when(
Acumulado <= 80 ~ "A",
Acumulado <= 95 ~ "B",
TRUE ~ "C"
)
)
inventario_abc Producto Demanda Costo Valor_Anual Porcentaje Acumulado Clase
1 Motor 50 1000.0 50000 27.427318 27.42732 A
2 Sensor 80 250.0 20000 10.970927 38.39824 A
3 Engrane 120 150.0 18000 9.873834 48.27208 A
4 Rodamiento 300 50.0 15000 8.228195 56.50027 A
5 Válvula 60 180.0 10800 5.924301 62.42457 A
6 Tornillo 5000 2.0 10000 5.485464 67.91004 A
7 Filtro 400 25.0 10000 5.485464 73.39550 A
8 Lubricante 200 50.0 10000 5.485464 78.88097 A
9 Banda 200 40.0 8000 4.388371 83.26934 B
10 Cable 800 10.0 8000 4.388371 87.65771 B
11 Empaque 1000 5.0 5000 2.742732 90.40044 B
12 Interruptor 150 30.0 4500 2.468459 92.86890 B
13 Fusible 3000 1.5 4500 2.468459 95.33736 C
14 Resorte 1500 3.0 4500 2.468459 97.80581 C
15 Tuerca 4000 1.0 4000 2.194185 100.00000 C
0.9 Tabla Final
inventario_abc %>%
select(
Producto,
Demanda,
Costo,
Valor_Anual,
Porcentaje,
Acumulado,
Clase
) %>%
mutate(
Porcentaje = round(Porcentaje,2),
Acumulado = round(Acumulado,2)
) %>%
kable(
caption = "Clasificación ABC de los Inventarios"
) %>%
kable_styling(
bootstrap_options = c(
"striped",
"hover",
"condensed"
)
)| Producto | Demanda | Costo | Valor_Anual | Porcentaje | Acumulado | Clase |
|---|---|---|---|---|---|---|
| Motor | 50 | 1000.0 | 50000 | 27.43 | 27.43 | A |
| Sensor | 80 | 250.0 | 20000 | 10.97 | 38.40 | A |
| Engrane | 120 | 150.0 | 18000 | 9.87 | 48.27 | A |
| Rodamiento | 300 | 50.0 | 15000 | 8.23 | 56.50 | A |
| Válvula | 60 | 180.0 | 10800 | 5.92 | 62.42 | A |
| Tornillo | 5000 | 2.0 | 10000 | 5.49 | 67.91 | A |
| Filtro | 400 | 25.0 | 10000 | 5.49 | 73.40 | A |
| Lubricante | 200 | 50.0 | 10000 | 5.49 | 78.88 | A |
| Banda | 200 | 40.0 | 8000 | 4.39 | 83.27 | B |
| Cable | 800 | 10.0 | 8000 | 4.39 | 87.66 | B |
| Empaque | 1000 | 5.0 | 5000 | 2.74 | 90.40 | B |
| Interruptor | 150 | 30.0 | 4500 | 2.47 | 92.87 | B |
| Fusible | 3000 | 1.5 | 4500 | 2.47 | 95.34 | C |
| Resorte | 1500 | 3.0 | 4500 | 2.47 | 97.81 | C |
| Tuerca | 4000 | 1.0 | 4000 | 2.19 | 100.00 | C |
0.10 Resultados
0.10.1 Distribución por Categoría
table(inventario_abc$Clase)
A B C
8 4 3
0.10.2 Valor Total por Categoría
inventario_abc %>%
group_by(Clase) %>%
summarise(
Valor_Total = sum(Valor_Anual)
) %>%
kable(
caption = "Valor Económico por Categoría"
)| Clase | Valor_Total |
|---|---|
| A | 143800 |
| B | 25500 |
| C | 13000 |
0.11 Diagrama de Pareto
ggplot(
inventario_abc,
aes(
x = reorder(
Producto,
-Valor_Anual
),
y = Valor_Anual
)
) +
geom_col(
fill = "steelblue"
) +
labs(
title = "Valor Anual por Producto",
x = "Producto",
y = "Valor Anual ($)"
) +
theme_minimal() +
theme(
axis.text.x =
element_text(
angle = 45,
hjust = 1
)
)0.12 Curva ABC (Pareto)
ggplot(
inventario_abc,
aes(
x = reorder(
Producto,
-Valor_Anual
),
y = Acumulado,
group = 1
)
) +
geom_line(
color = "red",
linewidth = 1.2
) +
geom_point(
size = 3,
color = "blue"
) +
geom_hline(
yintercept = 80,
linetype = "dashed",
color = "darkgreen"
) +
geom_hline(
yintercept = 95,
linetype = "dashed",
color = "orange"
) +
labs(
title = "Curva ABC de Inventarios",
x = "Producto",
y = "Porcentaje Acumulado (%)"
) +
theme_minimal() +
theme(
axis.text.x =
element_text(
angle = 45,
hjust = 1
)
)1 Interpretación
Los productos clasificados como categoría A representan la mayor parte del valor económico invertido en inventario.
Estos artículos requieren:
-Control estricto. -Pronósticos precisos. -Revisiones frecuentes. -Políticas de reabastecimiento más rigurosas.
Los productos de categoría B requieren un control intermedio.
Los productos de categoría C representan una baja proporción del valor monetario total y pueden administrarse mediante sistemas de control más simples.
2 Conclusiones
1.El análisis ABC permitió identificar los artículos más importantes económicamente.
2.La categoría A concentra la mayor parte de la inversión.
3.La organización puede enfocar sus esfuerzos de gestión en un número reducido de productos críticos.
4.La metodología facilita la optimización de compras, almacenamiento y control de inventarios.