Un Data Scientist ha diseñado un modelo de analítica prescriptiva para reducir el tiempo de fallas de las máquinas de un proceso de elaboración de galletas. Luego de validar el modelo, se plantean tres alternativas de mejora que deben ser comparadas con el sistema de mantenimiento actual.
Se cuenta con 30 réplicas para cada una de las siguientes alternativas:
El objetivo es determinar si existen diferencias significativas entre las alternativas y, en caso de existir, identificar cuál debe implementarse.
Se trabajará con un nivel de significancia de 5%:
\[\alpha = 0.05\]
Los datos corresponden a las 30 réplicas entregadas en el enunciado.
arbol <- c(
23.81, 22.13, 22.64, 21.69, 23.58, 22.14, 18.73, 21.59,
20.36, 20.53, 20.11, 20.34, 19.19, 22.92, 18.65, 20.60,
19.83, 20.09, 19.43, 22.06, 21.15, 19.26, 18.08, 20.24,
18.75, 20.69, 21.62, 23.69, 23.93, 23.19
)
redn <- c(
23.24, 20.08, 18.01, 23.28, 19.23, 21.22, 21.47, 20.60,
21.11, 21.27, 21.03, 17.34, 22.80, 21.85, 17.85, 23.15,
19.57, 19.56, 20.79, 18.04, 20.95, 21.83, 18.17, 22.66,
18.29, 18.89, 19.49, 19.19, 26.47, 25.25
)
regresion <- c(
16.13, 17.84, 18.28, 15.61, 17.62, 16.12, 17.29, 16.13,
16.64, 15.03, 18.16, 16.82, 17.44, 16.76, 17.26, 15.55,
17.49, 18.42, 17.54, 17.13, 15.50, 16.80, 18.47, 18.42,
18.43, 15.56, 16.03, 15.39, 15.12, 17.77
)
actual <- c(
17.09, 15.77, 18.45, 16.55, 22.23, 22.11, 18.26, 18.04,
19.66, 19.76, 18.74, 19.02, 18.54, 16.70, 17.57, 19.89,
19.06, 18.70, 19.39, 19.68, 19.20, 16.85, 19.91, 19.82,
18.08, 19.38, 20.30, 21.60, 23.39, 19.33
)
datos <- data.frame(
Replica = 1:30,
Arbol = arbol,
Redes_Neuronales = redn,
Regresion = regresion,
Sistema_Actual = actual
)
knitr::kable(
datos,
digits = 2,
caption = "Tiempos de falla para las 30 réplicas"
)
| Replica | Arbol | Redes_Neuronales | Regresion | Sistema_Actual |
|---|---|---|---|---|
| 1 | 23.81 | 23.24 | 16.13 | 17.09 |
| 2 | 22.13 | 20.08 | 17.84 | 15.77 |
| 3 | 22.64 | 18.01 | 18.28 | 18.45 |
| 4 | 21.69 | 23.28 | 15.61 | 16.55 |
| 5 | 23.58 | 19.23 | 17.62 | 22.23 |
| 6 | 22.14 | 21.22 | 16.12 | 22.11 |
| 7 | 18.73 | 21.47 | 17.29 | 18.26 |
| 8 | 21.59 | 20.60 | 16.13 | 18.04 |
| 9 | 20.36 | 21.11 | 16.64 | 19.66 |
| 10 | 20.53 | 21.27 | 15.03 | 19.76 |
| 11 | 20.11 | 21.03 | 18.16 | 18.74 |
| 12 | 20.34 | 17.34 | 16.82 | 19.02 |
| 13 | 19.19 | 22.80 | 17.44 | 18.54 |
| 14 | 22.92 | 21.85 | 16.76 | 16.70 |
| 15 | 18.65 | 17.85 | 17.26 | 17.57 |
| 16 | 20.60 | 23.15 | 15.55 | 19.89 |
| 17 | 19.83 | 19.57 | 17.49 | 19.06 |
| 18 | 20.09 | 19.56 | 18.42 | 18.70 |
| 19 | 19.43 | 20.79 | 17.54 | 19.39 |
| 20 | 22.06 | 18.04 | 17.13 | 19.68 |
| 21 | 21.15 | 20.95 | 15.50 | 19.20 |
| 22 | 19.26 | 21.83 | 16.80 | 16.85 |
| 23 | 18.08 | 18.17 | 18.47 | 19.91 |
| 24 | 20.24 | 22.66 | 18.42 | 19.82 |
| 25 | 18.75 | 18.29 | 18.43 | 18.08 |
| 26 | 20.69 | 18.89 | 15.56 | 19.38 |
| 27 | 21.62 | 19.49 | 16.03 | 20.30 |
| 28 | 23.69 | 19.19 | 15.39 | 21.60 |
| 29 | 23.93 | 26.47 | 15.12 | 23.39 |
| 30 | 23.19 | 25.25 | 17.77 | 19.33 |
Para realizar el análisis estadístico, se convierten los datos a formato largo.
datos_largos <- data.frame(
Replica = rep(1:30, times = 4),
Metodo = factor(
rep(
c("Arbol", "Redes neuronales", "Regresion", "Sistema actual"),
each = 30
)
),
Tiempo = c(arbol, redn, regresion, actual)
)
head(datos_largos, 10)
Primero se calculan los principales estadísticos descriptivos para cada alternativa.
library(dplyr)
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
resumen <- datos_largos %>%
group_by(Metodo) %>%
summarise(
n = n(),
Media = mean(Tiempo),
Desviacion_Estandar = sd(Tiempo),
Minimo = min(Tiempo),
Maximo = max(Tiempo)
)
knitr::kable(
resumen,
digits = 4,
caption = "Estadísticos descriptivos por método"
)
| Metodo | n | Media | Desviacion_Estandar | Minimo | Maximo |
|---|---|---|---|---|---|
| Arbol | 30 | 21.0340 | 1.7056 | 18.08 | 23.93 |
| Redes neuronales | 30 | 20.7560 | 2.2243 | 17.34 | 26.47 |
| Regresion | 30 | 16.8917 | 1.1033 | 15.03 | 18.47 |
| Sistema actual | 30 | 19.1023 | 1.7296 | 15.77 | 23.39 |
Los promedios permiten realizar una primera comparación. Como el objetivo del estudio es reducir el tiempo de falla, un menor promedio representa un mejor desempeño.
boxplot(
Tiempo ~ Metodo,
data = datos_largos,
main = "Comparación de los tiempos de falla",
xlab = "Método",
ylab = "Tiempo de falla",
las = 2
)
El gráfico permite observar visualmente la distribución de los tiempos de falla para cada alternativa.
Debido a que se tienen cuatro métodos y 30 réplicas para cada uno, se plantea un ANOVA de bloques, considerando la réplica como bloque.
Las hipótesis para comparar los métodos son:
Hipótesis nula:
\[ H_0: \mu_{Arbol} = \mu_{Redes} = \mu_{Regresion} = \mu_{Actual} \]
Es decir, no existen diferencias significativas entre los tiempos promedio de falla de los cuatro métodos.
Hipótesis alternativa:
\[ H_1: \text{al menos una de las medias es diferente} \]
El nivel de significancia es:
\[ \alpha = 0.05 \]
Se utiliza la réplica como bloque, ya que cada réplica permite comparar los cuatro métodos bajo una misma condición experimental.
modelo <- aov(Tiempo ~ Metodo + factor(Replica), data = datos_largos)
summary(modelo)
## Df Sum Sq Mean Sq F value Pr(>F)
## Metodo 3 326.4 108.81 36.867 1.8e-15 ***
## factor(Replica) 29 93.1 3.21 1.088 0.371
## Residuals 87 256.8 2.95
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Para la prueba del factor Método, se compara el valor p obtenido con el nivel de significancia:
p-valor < 0.05, se rechaza \(H_0\).p-valor >= 0.05, no se rechaza \(H_0\).Para obtener directamente el valor p:
anova_tabla <- summary(modelo)[[1]]
p_valor <- anova_tabla["Metodo", "Pr(>F)"]
p_valor
## [1] 1.800308e-15
if (p_valor < 0.05) {
cat("Decisión: se rechaza H0.\n")
cat("Existe evidencia estadísticamente significativa de diferencias entre los métodos.\n")
} else {
cat("Decisión: no se rechaza H0.\n")
cat("No existe evidencia estadísticamente significativa de diferencias entre los métodos.\n")
}
## Decisión: se rechaza H0.
## Existe evidencia estadísticamente significativa de diferencias entre los métodos.
El análisis ANOVA permite determinar si las diferencias observadas entre los promedios de los cuatro métodos pueden atribuirse al azar o si existe evidencia estadística de que el método utilizado afecta el tiempo de falla.
De acuerdo con el resultado del análisis, se obtiene un valor p inferior a 0.05. Por lo tanto, se rechaza la hipótesis nula al 5% de significancia.
Esto indica que existen diferencias estadísticamente significativas entre los métodos de mantenimiento evaluados.
Sin embargo, el ANOVA solamente indica que existe al menos una diferencia. Para determinar exactamente entre qué métodos se presentan las diferencias, se realiza una prueba de comparaciones múltiples.
Se utiliza la prueba de Tukey para identificar cuáles pares de métodos presentan diferencias significativas.
tukey <- TukeyHSD(modelo, "Metodo")
tukey
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = Tiempo ~ Metodo + factor(Replica), data = datos_largos)
##
## $Metodo
## diff lwr upr p adj
## Redes neuronales-Arbol -0.278000 -1.439874 0.8838742 0.9232087
## Regresion-Arbol -4.142333 -5.304208 -2.9804591 0.0000000
## Sistema actual-Arbol -1.931667 -3.093541 -0.7697924 0.0002094
## Regresion-Redes neuronales -3.864333 -5.026208 -2.7024591 0.0000000
## Sistema actual-Redes neuronales -1.653667 -2.815541 -0.4917924 0.0019136
## Sistema actual-Regresion 2.210667 1.048792 3.3725409 0.0000185
También se puede visualizar gráficamente:
plot(tukey)
La prueba de Tukey permite realizar comparaciones entre cada par de métodos.
En particular, se debe observar la comparación del método Regresión con:
Si el intervalo de confianza de la diferencia no contiene el cero, existe una diferencia estadísticamente significativa entre ambos métodos.
De acuerdo con los resultados obtenidos, el método de Regresión presenta un tiempo promedio de falla significativamente menor que las demás alternativas evaluadas.
medias <- aggregate(
Tiempo ~ Metodo,
data = datos_largos,
FUN = mean
)
medias <- medias[order(medias$Tiempo), ]
knitr::kable(
medias,
digits = 4,
caption = "Tiempo promedio de falla ordenado de menor a mayor"
)
| Metodo | Tiempo | |
|---|---|---|
| 3 | Regresion | 16.8917 |
| 4 | Sistema actual | 19.1023 |
| 2 | Redes neuronales | 20.7560 |
| 1 | Arbol | 21.0340 |
El promedio de cada alternativa es aproximadamente:
Por lo tanto, la alternativa con menor tiempo promedio de falla es Métodos de regresión.
Considerando un nivel de significancia del 5%, el análisis ANOVA permite rechazar la hipótesis nula, por lo que existen diferencias estadísticamente significativas entre los cuatro métodos evaluados.
La comparación de medias muestra que el método de Regresión presenta el menor tiempo promedio de falla, aproximadamente 16.89, frente a 19.10 para el sistema actual, 20.76 para redes neuronales y 21.03 para árbol de clasificación.
Además, la prueba de Tukey permite identificar que el método de Regresión presenta diferencias significativas respecto de las demás alternativas.
Por lo tanto, se recomienda implementar la propuesta basada en Métodos de regresión, ya que es la alternativa que presenta el menor tiempo promedio de falla y, de acuerdo con el análisis estadístico realizado al 5% de significancia, su desempeño es significativamente mejor que las otras alternativas consideradas.
La propuesta que debería implementarse es la de Métodos de regresión.
Esta decisión se sustenta en: