Contexto: el problema

Disponemos de una recopilación de datos (Montgomery & Peck, 1982) relativos al tiempo de entrega (delTime; en días) 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; en kilómetros).

data(delivery, package="robustbase")
summary(delivery)
##      n.prod         distance         delTime     
##  Min.   : 2.00   Min.   :  36.0   Min.   : 8.00  
##  1st Qu.: 4.00   1st Qu.: 150.0   1st Qu.:13.75  
##  Median : 7.00   Median : 330.0   Median :18.11  
##  Mean   : 8.76   Mean   : 409.3   Mean   :22.38  
##  3rd Qu.:10.00   3rd Qu.: 605.0   3rd Qu.:21.50  
##  Max.   :30.00   Max.   :1460.0   Max.   :79.24

Actividades

(A) Expectativas

Ponte en el lugar del cliente que solicita un pedido a la empresa: ¿cuáles serán tus expectativas de calidad relativas a los tiempos de entrega?

Como cliente, al contratar el servicio de un proveedor se esperan garantías entres aspectos claves del negocio comercial: rapidez de entrega, seguimiento del servicio y garantía posventa de devoluciones.

Los aspectos del servicio de posventa y el seguimiento son variables cualitativas más complejas de valorar (tal vez con un cuestionario de satisfacción medido en Escala Likert). Es por ello que, de forma cuantitativa, únicamente podremos analizar la rapidez del tiempo de entrega como medidor de la calidad del servicio y tiempo de entrega.

(B) Problemas

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?

  • ¿Cuál suele ser el número de máquinas demandadas en cada pedido?
prod=table(as.vector(delivery$n.prod))
names(prod)[prod==max(prod)]
## [1] "7"

Las demandas se concentran en una orquilla o intervalo de valores comprendido entre dos y treinta productos demandados. El 50% de los pedidos son de 7 o menos unidades. Por su parte, Eçel pedido más frecuente es de 7 unidades. Además, solo uno de cada cuatro clientes realiza pedidos iguales o superiores a 10 máquinas expendedoras.

  • ¿A qué distancia están los compradores?

La mitad de nuestros compradores se encuentra a una distancia, a lo sumo, de 330 kilómetros. La distancia media con ellos es aproximadamente de 409 kms.

name=delivery$distance[delivery$distance>669]
nrow(data.frame(name))
## [1] 5

Considerando como 669 kilómetros la distancia entre Elche, lugar de la sede, y la frontera más próxima con Europa, La Jonquera, afirmamos que cinco empresas con sede internacional han hecho un pedido a la empresa.

  • ¿Cuántos días suele tardar en llegar un pedido?
name=delivery$delTime[delivery$delTime>40]
nrow(data.frame(name))
## [1] 3

El tiempo medio de recepción pedido, medido en días, se sitúa en torno a 22 días y medio. De los 25 envíos registrados, únicamente tres de ellos tardaron en llegar más de 40 días.

  • ¿Qué relación existe entre los tiempos de entrega y el volumen de los pedidos?
library(GGally)
ggpairs(delivery)

Tienen una relación de dependencia positiva casi perfecta; es decir, cuanto más aumenta el número de máquinas solicitadas, casi tanto aumentará el tiempo de entrega de manera proporcional.

Al considerarse el tiempo de entrega iniciado nada más confirmarse la compra del stock, a mayor cantidad pedida tiene sentido que se tarde más en entregar; sin embargo, no tiene por qué ser así. Profundizaremos en el tema en apartados posteriores.

  • ¿Qué relación existe entre los tiempos de entrega de los pedidos y la distancia al proveedor?

Observando los gráficos, vemos cómo la relación entre ambas variables es una correlación positiva; suponiendo que aumenta en una unidad la distancia con el proveedor, también se incrementará en un 89.2% de forma proporcioanl el tiempo de entrega de los pedidos.

La relación es coherente, pues a mayor distancia con el proveedor, mayor será el tiempo de entrega, siempre y cuando el medio de transporte sea el mismo para todos los pedidos.

Se pueden separar los clientes de corta y larga distancia en distintos grupos y analizar si influye de la misma forma el factor de la distancia para, de esta forma, confirmar si les afectan de forma igual los tiempos de entrega.

  • ¿Qué relación existe entre el volumen de los pedidos y la distancia al proveedor?

La fuerza de relación presente entre la cantidad de pedido y la lejanía del proveedor es la más débil entre todas las correlaciones; no obstante, es lo suficientemente fuerte para afirmar que a mayor distancia con el proveedor, más cantidad de máquinas expendedoras éste solicitará.

En conclusión, hemos visto en las tres últimas preguntas cómo los clientes que más pedían eran los que más tiempo esperaban a que llegara el pedido, y cómo estos también suelen ser los que más lejos se encuentran del proveedor.

Es natural pensar que si queremos corregir algún aspecto, debería ser el que mejore el tiempo de entrega, principal medidor de calidad para el cliente según pregunta A, para el colectivo más afectado por el tiempo, el cliente lejano, que a su vez es el que más cantidad de pedido realiza; en otras palabras, el que más consume y riqueza aporta al proveedor.

(C) Tiempos

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ás aprovechar para afinar la estimación del tiempo de entrega de su pedido?
summary(lm.deli <- lm(delTime ~ ., data = delivery))
## 
## Call:
## lm(formula = delTime ~ ., data = delivery)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -5.7880 -0.6629  0.4364  1.1566  7.4197 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 2.341231   1.096730   2.135 0.044170 *  
## n.prod      1.615907   0.170735   9.464 3.25e-09 ***
## distance    0.014385   0.003613   3.981 0.000631 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3.259 on 22 degrees of freedom
## Multiple R-squared:  0.9596, Adjusted R-squared:  0.9559 
## F-statistic: 261.2 on 2 and 22 DF,  p-value: 4.687e-16

El tiempo de entrega está sujeto a la cantidad de máquinas expendedoras solicitadas y la distancia entre proveedor-cliente. Ambas variables, obtenidas a través de información del cliente, son significativas y ayudan a predecir mejor; por lo tanto, estimaremos a partir de ellas.

  • ¿En qué tipo de ventas la empresa tiene más información para proporcionar una estimación fiable del tiempo de entrega?

Para aquellas ventas con mayor número de pedido podemos obtener una estimación más certera al predecir el tiempo de entrega, pues ambos son los factores más relacionados, como comprobamos en la segunda pregunta. A mayor pedido, más peso tendrá en la predicción si el resto de variables se mantienen constantes.

(D) Atendiendo un pedido

Si la empresa recibiera hoy un pedido de 5 máquinas expendedoras, utilizando el guion 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?

soloprod = lm(delTime ~ n.prod, data = delivery)
summary(soloprod)
## 
## Call:
## lm(formula = delTime ~ n.prod, data = delivery)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -7.5811 -1.8739 -0.3493  2.1807 10.6342 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    3.321      1.371   2.422   0.0237 *  
## n.prod         2.176      0.124  17.546 8.22e-15 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 4.181 on 23 degrees of freedom
## Multiple R-squared:  0.9305, Adjusted R-squared:  0.9275 
## F-statistic: 307.8 on 1 and 23 DF,  p-value: 8.22e-15
nuevodato=data.frame(n.prod = 5)
predict.lm(soloprod, newdata = nuevodato, interval = "confidence", level = 0.999997)
##        fit     lwr      upr
## 1 14.20161 8.33555 20.06768
predict.lm(soloprod, newdata = nuevodato, interval = "prediction", level = 0.999997)
##        fit       lwr      upr
## 1 14.20161 -12.07796 40.48118

No usaremos el intervalo de predicción debido a su gran amplitud que, de ser tan grande, es ineficaz al alcanzar cotas inferiores negativas. Por lo tanto, prescindimos de él y nos centramos en el intervalo de confianza.

El tiempo de entrega a esperar por el cliente está comprendido entre 9 y 21 con una confianza del 99.9997%. Esto indica que de un millón de envíos que se realicen a empresas con pedidos de 5 máquinas, solo 3 pedidos llegarán en días fuera de esta orquilla de días.

En definitiva, se garantiza una calidad de entrega en un intervalo de tiempo definido y estipulado.

NOTA: Decimos 9 días porque 8.33 días implica llegar en el noveno día de espera. Idéntico caso para los 21 días.

nuevodato=data.frame(n.prod = 5, distance= 75)
dist75=predict.lm(lm.deli, newdata = nuevodato, interval = "confidence", level = 0.999997); dist75
##        fit      lwr      upr
## 1 11.49963 5.235735 17.76352
dist75[1,3]-dist75[1,2]
## [1] 12.52779
nuevodato=data.frame(n.prod = 5, distance= 500)
dist500=predict.lm(lm.deli, newdata = nuevodato, interval = "confidence", level = 0.999997); dist500
##        fit      lwr      upr
## 1 17.61318 10.55714 24.66922
dist500[1,3]-dist500[1,2]
## [1] 14.11209
nuevodato=data.frame(n.prod = 5, distance= 1000)
dist1k=predict.lm(lm.deli, newdata = nuevodato, interval = "confidence", level = 0.999997); dist1k
##        fit      lwr      upr
## 1 24.80559 7.630764 41.98042
dist1k[1,3]-dist1k[1,2]
## [1] 34.34966

Hemos separados los clientes en tres grupos: distancia corta (75 kms), media (500) y larga (1000). A medida que la lejanía con el cliente aumenta, la amplitud del intervalo de variación de los días de entrega del pedido crece de forma exponencial. No podemos garantizar a todos los clientes el mismo rango de variación, influye la distancia.

En este ejemplo, la diferencia en días entre distancia corta y media es de apenas dos días, pero si llegamos a larga distancia podemos alcanzar una diferencia de hasta 20 días por apenas 500 kilómetros de diferencia.

Llega una distancia crítica a partir de la cual, a muy pocos kilómetros que se aumenten, aumenta considerablemente el tiempo de espera.

nuevodato=data.frame(n.prod = 5, distance= 0)
predict.lm(lm.deli, newdata = nuevodato, interval = "confidence", level = 0.999997)
##        fit      lwr      upr
## 1 10.42077 2.920907 17.92063

Incluso si las cinco máquinas expendedoras fueran de consumo propio para la propia empresa, es decir, la distancia con el cliente fuera de 0 kms, tardarían 11 días en ser entregadas, con un margen de ± 7 días, aproximadamente.

Es por ello que nunca podremos predecir un rango de variación con el límite superir inferior a 10 días cuando un cliente adquiera cinco unidades de máquinas, independientemente de su distancia con el proveedor.

(E) Conclusiones

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 principal problema de la empresa reside en la elevada tardanza del tiempo de entrega para clientes que presentan una distancia con la sede proveedora superior a la media.

Los clientes de lejana distancia, que a su vez son los que mayores pedidos realizan, no pueden estar satisfechos y recibir garantías de entrega por parte del proveedor si los intervalos de tiempos de entrega con los que se juega muestran una varianza de hasta 35 días, tiempo más que suficiente para considerar la estimación de entrega poco eficiente.

Si nos basáramos única y exclusivamente en la predicción puntual, el coeficiente de la distancia es ínifmo (0.01438); sin embargo, a medida que aumenta dicha variable, lo hace exponencialmente el intervalo, perdiendo su exactitud.

Entonces, si el sector de clientes que pide mayor cantidad de máquinas por pedido es también el sector más perjudicado por la lentitud de los tiempos de entrega, principal medidor de calidad, nos encontramos en un problema de fiabilidad y garantía con nuestra mayor fuente de ingresos.

(F) Soluciones

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.

nuevodato=data.frame(n.prod = 1, distance= 0)
predict.lm(lm.deli, newdata = nuevodato)
##        1 
## 3.957138

A lo largo del informe, hemos podido observar que tanto la distancia como el número de unidades en el pedido afectan a los tiempos de entrega. Aunque no haya distancia y se pidiera una sola unidad de pedido, se tardaría cuatro días en entregarlo… Esto denota un claro problema de previsión de stock: no hay stock de reserva para hacer frente a los pedidos con una mayor rapidez.

Si se dispusiera de más máquinas completadas listas para el envío inmediato nada más comenzar a gestionar la compra, se reduciría el tiempo fijo de espera (el intercepto en términos estadísticos) y dejaría el tiempo de espera en función de la variabilidad de la distancia.

lm.deli$coefficients[2]
##   n.prod 
## 1.615907

De hecho, así podremos también disminuir la influencia de la cantidad de pedido sobre los tiempos de espera. Añadir una unidad más al pedido supone añadir día y medio más de tardanza en el envío. Si se dispone de más stock de seguridad en el almacen, este factor podrá ser más controlable.

Para aumentar ese stock mínimo del que disponer, se ha de invertir en ampliar el espacio físico del almacén, en caso de no disponer de él, aumentar la rapidez de la cadena de producción para rendir con más eficiencia, contratar más personal o las medidas más convenientes que crea el jefe de producción de la empresa.

De esta forma, aumentarán los pedidos sobre todo por parte de los clientes lejanos al poder ofrecerles un tiempo de entrega más competitivo y la posibilidad de disponer de las máquinas expendedoras para sus negocios en el menor tiempo posible. Mejorando en garantía y fiabilidad, aumentaremos el ingreso por ventas y lograremos crecer sosteniblemente como empresa.

No vale la pena invertir en transporte más rápido, pues la distancia no afecta tanto a los tiempos de entrega como lo hace la cantidad de pedido; además de que dicha inversión en transporte, la mayoría de veces subcontratado, suele ser superior a los gastos en cambios de organización del stock producido.

nuevodato=data.frame(n.prod = 5, distance= 1000)
dist1k=predict.lm(lm.deli, newdata = nuevodato, interval = "confidence", level = 0.95); dist1k
##        fit      lwr      upr
## 1 24.80559 19.06916 30.54203
dist1k[1,3]-dist1k[1,2]
## [1] 11.47286

A nivel estadístico, lo mejor sería reducir el nivel de confianza un 5%. Esto supone no predecir correctamente a cinco de cada cien envíos que se realicen. Reduciendo dicho porcentaje, la amplitud del intervalo de estimación pasaría de 35 días a 12 días, casi un tercio del tamaño original.

Además, es aconsejable obtener más datos para hacer análisis de datos más exhaustivos y predicciones más exactas; pues con apenas 25 casos, no podemos garantizar una precisión adecuada ni presentar informes con base sólida con estos datos poco representativos.

(G) Recursos

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?

A lo largo del trabajo, hemos utilizado la librería GGally, que presenta la funcionalidad ggpairs para hallar los coeficientes de correlación que presentan las tres variables de estudio.

Sumado a dicha visualización de relaciones, podemos crear rectas de regresión lineales bivariantes con la sencilla función scatter plot para ver las relaciones de independencia gráficamente.

scatter.smooth(x=delivery$distance, y=delivery$delTime, main="Dist ~ Time", xlab="Distancia (kms)", ylab="Tiempo (días)")

Además, con esta relación, confirmamos cómo hay una distancia crítica a partir de la cual, los tiempos de espera crecen de forma más elevada por cada kilómetro añadido.

h=hist(delivery$delTime, breaks=16, ylim=c(0,10), main="Histograma",xlab="Tiempo entrega",ylab="Frecuencia")
text(h$mids,h$counts,labels=h$counts, adj=c(0.5, -0.5))

Un histograma (hist) nos puede aportar información útil para el análisis descriptivo al ver la distribución de frecuencias de los datos; en este caso, tiempos de espera de entrega.

Si dispusiéramos de más variables, sería interesante jugar con las tablas de frecuencia y gráficos de barras, recogidos en las funciones estándar prop.table, plot y barplot, respectivamente, para agrupar clientes por distancias y analizar sus comportamientos, por ejemplo.

Anexo

A lo largo de las diferentes cuestiones que se plantean en la práctica, hemos ido utilizando varios tipos de “niveles estadísticos” en el lenguaje empresarial de respuesta para poder observar en las calificaciones el más acorde, según la docente.

Este trabajo se ha realizado para la asignatura “Mejora de procesos”, impartida por la docente María Asunción Martínez Mayoral, de la Universidad Miguel Hernández de Elche (España).