Disponemos de una recopilación de datos (Montgomery & Peck, 1982) relativos al tiempo de entrega (delTime) de máquinas expendedoras (desde que se gestiona la compra), junto con lo que vamos a entender como el número de productos demandados (n.prod) y la distancia entre el proveedor y el comprador (distance).
data(delivery, package="robustbase")
delivery
## n.prod distance delTime
## 1 7 560 16.68
## 2 3 220 11.50
## 3 3 340 12.03
## 4 4 80 14.88
## 5 6 150 13.75
## 6 7 330 18.11
## 7 2 110 8.00
## 8 7 210 17.83
## 9 30 1460 79.24
## 10 5 605 21.50
## 11 16 688 40.33
## 12 10 215 21.00
## 13 4 255 13.50
## 14 6 462 19.75
## 15 9 448 24.00
## 16 10 776 29.00
## 17 6 200 15.35
## 18 7 132 19.00
## 19 3 36 9.50
## 20 17 770 35.10
## 21 10 140 17.90
## 22 26 810 52.32
## 23 9 450 18.75
## 24 8 635 19.83
## 25 4 150 10.75
Ponte en el lugar del cliente que solicita un pedido a la empresa: ¿cuáles serían tus expectativas de calidad relativas a los tiempos de entrega?
summary(delivery$delTime)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 8.00 13.75 18.11 22.38 21.50 79.24
Como cliente esperaría que mi pedido estuviera en un plazo de unos 20 días y que como mucho no sobrepase un plazo de un mes.
Conociendo que en los 25 pedidos registrados, el tiempo mínimo de entrega ha sido de 8 días y el tiempo máximo de 80 días, la media de tiempo durante este período ha sido unos 23 días. Por lo que, un cliente podría estar satisfecho si recibe su pedido en un tiempo inferior a 23 días.(Pero claro, esta información no la conoce el cliente.)
Es posible que la empresa tenga problemas para cumplir con los intereses de sus clientes. Investiga esta cuestión desde un punto de vista meramente descriptivo,a través de las cuestiones a continuación, y expresa tus conclusiones exclusivamente respondiendo a la pregunta ¿qué problemas parece tener la empresa para cumplir con las expectativas de sus clientes?
Parece que los tiempos de entrega de los pedidos son demasiados elevados para los clientes que están a mayor distancia, por ese motivo parece que se producen menor cantidad de pedidos en esos casos.
pedidos=delivery$n.prod;pedidos
## [1] 7 3 3 4 6 7 2 7 30 5 16 10 4 6 9 10 6 7 3 17 10 26 9 8 4
min(delivery$n.prod)
## [1] 2
media=mean(delivery$n.prod);media
## [1] 8.76
max(delivery$n.prod)
## [1] 30
El número de máquinas demandadas suele estar entorno a 9 máquinas. Como mínimo se ha demandado 2 máquinas y como máximo 30.
distancia=delivery$distance;distancia
## [1] 560 220 340 80 150 330 110 210 1460 605 688 215 255 462 448
## [16] 776 200 132 36 770 140 810 450 635 150
min(delivery$distance)
## [1] 36
mean(delivery$distance)
## [1] 409.28
max(delivery$distance)
## [1] 1460
Los compradores registrados están en un promedio de 409,28 kilometros de distancia, el comprador más cercano está a 36 km y el más lejano a 1460 km.
dias=delivery$delTime;dias
## [1] 16.68 11.50 12.03 14.88 13.75 18.11 8.00 17.83 79.24 21.50 40.33 21.00
## [13] 13.50 19.75 24.00 29.00 15.35 19.00 9.50 35.10 17.90 52.32 18.75 19.83
## [25] 10.75
min(delivery$delTime)
## [1] 8
mean(delivery$delTime)
## [1] 22.384
max(delivery$delTime)
## [1] 79.24
El tiempo mínimo de entrega ha sido de 8 días y el tiempo máximo de 80 días. En promedio suele tardar unos 23 días en llegar un pedido.
cor(delivery$delTime,delivery$n.prod)
## [1] 0.9646146
#plot(delivery$delTime,delivery$n.prod)
#abline(lm(delivery$n.prod ~ delivery$delTime))
library(ggplot2)
ggplot(data=delivery, aes(x=delTime, y=n.prod)) + xlab("Tiempos de entrega") + ylab("Volumen de pedidos") + geom_point() + geom_smooth(method = "lm", se = FALSE)
## `geom_smooth()` using formula 'y ~ x'
Existe muy buena relación (fuerte directa) entre los tiempos de entrega y el volumen de pedidos, lo que implica que cuanto más grade sea el pedido, más tiempo se tardará en realizar la entrega.
cor(delivery$delTime,delivery$distance)
## [1] 0.8916701
#plot(delivery$delTime,delivery$distance)
#abline(lm(delivery$distance ~ delivery$delTime))
ggplot(data=delivery, aes(x=delTime, y=distance)) + xlab("Tiempos de entrega") + ylab("Distancia al proveedor") + geom_point() + geom_smooth(method = "lm", se = FALSE)
## `geom_smooth()` using formula 'y ~ x'
Existe muy buena relación (fuerte directa) entre los tiempos de entrega de los pedidos y la distancia al proveedor, lo que implica que cuanto mayor distancia haya al proveedor, más tiempo se tardará en entregar el pedido.
cor(delivery$n.prod,delivery$distance)
## [1] 0.824215
#plot(delivery$n.prod,delivery$distance)
#abline(lm(delivery$distance ~ delivery$n.prod))
ggplot(data=delivery, aes(x=n.prod, y=distance)) + xlab("Volumen de los pedidos") + ylab("Distancia al proveedor") + geom_point() + geom_smooth(method = "lm", se = FALSE)
## `geom_smooth()` using formula 'y ~ x'
Existe muy buena relación (fuerte directa) entre el volumen de los pedidos y la distancia al proveedor, lo que indica que los compradores que están más cerca realizan mayor cantidad de pedidos y los compradores que están más lejos realizan menos cantidad de pedidos pero con un mayor número de productos.
En conclusión, la empresa debería mejorar los tiempos de entrega en las distancias más largas y en los pedidos de gran volumen, para así mejorar las expectativas de sus clientes.
La empresa quiere mejorar su servicio a los clientes. En concreto, quiere dar a sus clientes una estimación/rango de estimación “fiable” con el número de días que tardará en recibir su pedido. Investiga este objetivo a través de las cuestiones a continuación y expresa tus conclusiones exclusivamente respondiendo a la pregunta ¿cómo vas a estimar el tiempo de entrega en el próximo pedido que reciba la empresa?
- ¿Qué información del cliente podrías aprovechar para afinar la estimación del tiempo de entrega de su pedido? Conociendo a que distancia está el cliente del proveedor y que volumen de pedido va ha realizar se podrá estimar el tiempo de entrega del pedido.
- ¿En qué tipo de ventas la empresa tiene más información para proporcionar una estimación fiable del tiempo de entrega? En las ventas que se asemejen a las que ya ha realizado, como ha recibido una mayor cantidad de pedidos de clientes de corta distancia, le será más fácil proporcionar una estimación de tiempo de entrega a los clientes que presenten poca distancia del proveedor.
Para estimar el tiempo de entrega en el próximo pedido que que reciba la empresa utilizaré el siguiente modelo:
m<-lm(delTime ~ n.prod + distance, data=delivery);m
##
## Call:
## lm(formula = delTime ~ n.prod + distance, data = delivery)
##
## Coefficients:
## (Intercept) n.prod distance
## 2.34123 1.61591 0.01438
\(y = 2.34123 + 1.61591x_1 + 0.01438x_2\)
Es decir, sabiendo el número de productos por pedido y la distancia a la que está el cliente se podrá estimar el tiempo de entrega del pedido.
Si la empresa recibiera hoy un pedido de 5 máquinas expendedoras, utilizando el guión de preguntas/tareas a continuación, expresa tus conclusiones respondiendo exclusivamente a la pregunta ¿cuánto tiempo tardaría en llegar el pedido de 5 máquinas?
Utilizando el modelo anterior \(Tiempo = 2.34123 + 1.61591nºproductos + 0.01438Distancia\), el tiempo que tardaría en llegar un pedido de 5 máquinas sería: \(2.34123 + 1.61591*(5) + 0.01438*(409.28) = 16.30623\), es decir, tardará aproximadamente unos 17 días.
(Al no conocer la Distancia que existe entre el cliente y el proveedor, se ha utilizado la media de los pedidos ya registrados. Para hacer una mejor estimación sería aconsejable conocer la distancia del comprador.)
- Utiliza un nivel de confianza del 99.9997%. ¿Cómo explicas al cliente y a la empresa el significado de ese intervalo de predicción, en términos de “calidad”?
El intervalo de predicción con un nivel de confianza del 99.9997% es el que nos permite estimar entre qué valores está el valor que se desea conocer, con una probabilidad de equivocarnos del 0.0003%. Cuanto más grande sea el nivel de confianza, menor será el error de predicción pero también más amplio será el intervalo.
- ¿Puedes garantizar a todos los clientes, independientemente de dónde vivan, el mismo rango de variación en los días de entrega de su pedido? ¿Por qué?
Para realizar un intervalo de predicción sin conocer la distancia a la que está el cliente se debería cambiar de modelo:
m2=lm(delTime~n.prod, data=delivery);m2
##
## Call:
## lm(formula = delTime ~ n.prod, data = delivery)
##
## Coefficients:
## (Intercept) n.prod
## 3.321 2.176
predict(m2, data.frame(n.prod=5), interval="confidence", level=0.999997)
## fit lwr upr
## 1 14.20161 8.33555 20.06768
\(Tiempo = 3.321 + 2.176nºproductos\)
con el que obtendremos un intervalo de confianza entre 8 y 20 días y se estima un tiempo de llegada de 14 días. De esta forma se garantiza un rango de 6 días de variación a todos los clientes.
- ¿Consigues alguna predicción en la que el rango de variación que das al cliente sobre el tiempo que tardará en recibir el pedido, no supere los 5 días? ¿Y los 10 días?
predict(m2, data.frame(n.prod=1), interval="confidence", level=0.99)
## fit lwr upr
## 1 5.496947 1.9175 9.076394
Se puede conseguir que la predicción en la que el rango de variación no supere los 10 días disminuyendo a 1 producto el volumen de pedido y reduciendo el nivel de confianza a 99%. Pero no es posible conseguir que no supere los 5 días.
En conclusión, en respuesta a la pregunta ¿cuánto tiempo tardaría en llegar el pedido de 5 máquinas?, sin conocer la distancia del cliente en cuestión se podría reaizar de varias formas.
La primera sería aplicando el modelo \(Tiempo = 2.34123 + 1.61591nºproductos + 0.01438Distancia\) y sustituir la variable Distancia por la media de los datos ya registrados,
predict(m, data.frame(n.prod=5, distance=409.28), interval="confidence", level=0.999997)
## fit lwr upr
## 1 16.30819 10.62729 21.98909
con lo que se obendría una estimación de unos 16 días y un rango de variación de entre 10 y 22 días de tiempo que tardaría el cliente en recibir el pedido.
La segunda forma sería aplicando el modelo \(Tiempo = 3.321 + 2.176nºproductos\)
predict(m2, data.frame(n.prod=5), interval="confidence", level=0.999997)
## fit lwr upr
## 1 14.20161 8.33555 20.06768
con el que se obtendría una estimación de unos 14 días y un rango entre 8 y 20 días de tiempo que tardaría el cliente en recibir el pedido.
Para el cliente es mejor la segunda opción ya que se le proporciona un tiempo inferior de espera.
Concluye, en base a todo el análisis que has realizado, respondiendo la pregunta: ¿cuáles son los problemas más relevantes que has detectado y que afectan a la satisfacción de los clientes y en consecuencia a la imagen y fiabilidad de la empresa?
El tiempo de entrega de los pedidos es demasiado grande, sobre todo en los pedidos de mayor volumen y en los que a más distancia está de los clientes.
En base a los problemas que has detectado en tu análisis y a principios básicos de optimización, qué soluciones/medidas de mejora le propondrías a la empresa para aliviarlos o eliminarlos.
Para solucionar los problemas derivados de los tiempos de espera de los clientes propondría que la empresa desembolse una cantidad de dinero para invertir en un mejor transporte para los pedidos y crear un algoritmo para las rutas de envío, de forma que se optimice el tiempo de entrega de los pedidos. De esta modo, el cliente estará más satisfecho y realizará una mayor cantidad de pedidos.
Investiga librerías en R que te faciliten el análisis de la información y mejoren la forma de mostrar los resultados. Responde brevemente a la pregunta ¿qué librerías/funciones destacables has encontrado/utilizado, y cuáles son sus funcionalidades más relevantes?
He utilizado la librería “ggplot2” para realizar gráficos, pero también se podría utilizar la librería “tidyverse”, ya que es un conjunto de paquetes en R diseñados que ayuda en todo el proceso de importar transformar visualizar modelar y comunicar toda la información que normalmente utilizamos en procesos de ciencia de datos.
También pude ser útil las librerías “kable” y “kableextra” que permiten generar tablas en un documento, de forma que se puedan visualizar los datos de una forma más clara.