#Datos
library(readxl)
datos_tomados <- read_excel("datos_tomados.xlsx")
#Pruebas
library(rriskDistributions)
ajuste<-fit.cont(datos_tomados$tiempo_entre_llegadas)Análisis de datos de entrada y salida de la simulación
Análisis de datos de entrada
En el contexto de la simulación de eventos discretos, el análisis de datos de entrada es una etapa crítica que consiste en identificar, recolectar y modelar adecuadamente los datos que describen el comportamiento del sistema real. Estos datos sirven para alimentar la simulación y asegurar que sus resultados sean realistas y útiles.
Objetivo del análisis de datos de entrada
Su propósito principal es encontrar distribuciones de probabilidad adecuadas para representar:
Tiempos entre llegadas
Duraciones de servicio o procesamiento
Fallas de equipos
Otros procesos estocásticos del sistema
Pasos típicos:
Recolección de datos históricos o mediante observación directa del sistema.
Análisis exploratorio para entender patrones y detectar errores o valores atípicos.
Ajuste de distribuciones para datos. Pruebas de bondad de ajuste.
Una buena caracterización de los datos de entrada mejora la validez del modelo de simulación, permitiendo tomar decisiones más acertadas basadas en sus resultados.
Situación problema
Se está modelando la atención de clientes para cajas generales en un banco para el día lunes entre las 8:00 am y las 9:00 am
El banco cuenta con 3cajeros tiempo completo y un supernumerario, en caso de que el gerente de sede decida colocarlo a atención en caja.
Se tomaron datos para un día lunes (lo ideal es tomar más datos para el mismo día) entre las 8:00 am y las 9:00am.
Se tiene el modelo en
Flexsimconstruido medianteGeneral Process FlowSe tiene como medida de desempeño el tiempo promedio en espera de atención. Se tienen muchas PQRS por los tiempos largos de espera.
Los datos recolectados para el \(tiempo~entre~llegadas\) y para el \(tiempo~de~atención\) se muestran en la Tabla 1 (Primeros 50 datos)
| Tiempo entre llegadas (\(S\)) | Tiempo de atención (\(S\)) |
|---|---|
| 58.14 | 254.33 |
| 3.61 | 431.06 |
| 3.67 | 391.90 |
| 37.32 | 474.24 |
| 13.52 | 557.41 |
| 33.37 | 323.57 |
| 28.86 | 450.39 |
| 29.45 | 374.94 |
| 20.27 | 416.26 |
| 34.90 | 361.79 |
| 21.92 | 511.57 |
| 142.42 | 653.80 |
| 59.68 | 373.53 |
| 13.16 | 471.22 |
| 104.22 | 519.20 |
| 48.41 | 299.31 |
| 113.93 | 411.70 |
| 47.94 | 420.60 |
| 20.19 | 278.20 |
| 26.59 | 349.62 |
| 102.24 | 490.45 |
| 16.80 | 505.16 |
| 53.60 | 567.27 |
| 75.94 | 479.04 |
| 94.23 | 450.46 |
| 0.66 | 288.72 |
| 2.08 | 652.24 |
| 14.00 | 361.63 |
| 7.34 | 455.81 |
| 11.78 | 461.93 |
| 11.85 | 395.81 |
| 198.01 | 486.39 |
| 91.25 | 229.09 |
| 56.19 | 289.50 |
| 80.42 | 519.21 |
| 29.21 | 671.85 |
| 13.07 | 336.98 |
| 99.58 | 359.90 |
| 55.46 | 361.14 |
| 32.10 | 628.74 |
| 45.61 | 353.25 |
| 73.59 | 504.25 |
| 10.90 | 589.66 |
| 9.66 | 291.87 |
| 75.36 | 430.65 |
| 54.12 | 435.68 |
| 199.78 | 557.79 |
| 21.46 | 322.58 |
| 68.49 | 585.32 |
| 30.89 | 442.30 |
Puede acceder a los datos en el siguente enlace: Datos Banco
El modelo construído en Flexsim se muestra en la Figura 1
Puede acceder al modelo siguente enlace: Modelo Flexsim Banco
1. Análisis exploratorio de datos de entrada.
Para observar el comportamiento de los datos de entrada se puede realizar un análisis exploratorio, se realizará en este caso en R. Para un resumen estadístico de los datos:
#Datos
library(readxl)
datos_tomados <- read_excel("datos_tomados.xlsx")
#Exploración
summary(datos_tomados)tiempo_entre_llegadas Atencion
Min. : 0.12 Min. :173.8
1st Qu.: 16.56 1st Qu.:348.1
Median : 37.16 Median :427.1
Mean : 56.23 Mean :433.6
3rd Qu.: 73.16 3rd Qu.:510.5
Max. :411.22 Max. :772.6
Se puede explorar los datos usando herramientas gráficas como los histogramas, para el tiempo entre llegadas
#Datos
library(readxl)
datos_tomados <- read_excel("datos_tomados.xlsx")
#Histograma
hist(datos_tomados$tiempo_entre_llegadas,
prob = TRUE, # Muestra densidad en vez de frecuencia
col = "blue", # Color de las barras
main = "Tiempo entre llegadas",
xlab = "Tiempo entre llegadas",
ylab= "Densidad")
# Añadir la curva de densidad
lines(density(datos_tomados$tiempo_entre_llegadas),
col = "red",
lwd = 2) Para el tiempo de atención
#Datos
library(readxl)
datos_tomados <- read_excel("datos_tomados.xlsx")
#Histograma
hist(datos_tomados$Atencion,
prob = TRUE, # Muestra densidad en vez de frecuencia
col = "blue", # Color de las barras
main = "Tiempo de antención",
xlab = "Tiempo de atención",
ylab= "Densidad")
# Añadir la curva de densidad
lines(density(datos_tomados$Atencion),
col = "red",
lwd = 2) De los resultados anteriores, es muy complicado establecer Distribuciones de probabilidad asociadas a los datos recolectados, por lo que resulta importante realizar pruebas de bondad de ajuste
2. Pruebas de bondad de ajuste.
Se usará la librería rriskDistrutions de R para realizar las pruebas de bondad de ajuste para los datos de entrada, tiempo entre llegadas de clientes y tiempo de atención.
Análisis para el tiempo entre llegadas
Corriendo el código anterior se obtiene una ventana como la mostrada en Figura 2.
Se encuentran tres pruebas de bondad de ajuste Chi-cuadrado, Kolmogorov-Smirnov, Anderson-Darling, cada una con ventajas y desventajas. La distribución seleccionada será Exponencial, de acuerdo al siguiente procedimiento:
Se define \(X: tiempo~entre~llegadas~de~usuarios~del~banco\), y se analiza de la siguiente forma:
Resultados con prueba Chi-Cuadrado
\[\begin{align} H_0&: X \sim Exp ~(\lambda)\\ \\ H_1&: X \nsim Exp~(\lambda) \end{align}\]
De la prueba de bondad de ajuste se obtiene que \(p-value= 0.90\) (más alto). Por lo que no existe evidencia estadística sufiente para rechazar \(H_0\), los datos ajustan a una distibución Exponencial con \(rate=0.01778422\).
Estos datos se pueden usar en el modelo de simulación en Flexsim para la llegada de clientes, sin embargo, en Flexsim necesito \(Scale = \frac{1}{rate}\). Por lo que se usará \(scale=56.22962\)
Resultados con prueba Kolmogorov - Smirnov
\[\begin{align} H_0&: X \sim Exp ~(\lambda)\\ \\ H_1&: X \nsim Exp~(\lambda) \end{align}\]
La prueba Kolmogorov-Smirnov evalúa la máxima distancia entre la función de distribución acumulada empírica y la teórica. La distancia obtenida es de \(0.04\) y la decisión explícita indica Not rejected, por lo que la discrepancia observada entre la curva empírica y la teórica no es estadísticamente significativa.
Resultados con prueba Anderson - Darling
\[\begin{align} H_0&: X \sim Exp ~(\lambda)\\ \\ H_1&: X \nsim Exp~(\lambda) \end{align}\]
La prueba Anderson - Darling mide la distancia al cuadrado ponderada entre la función de distribución acumulada empírica (la curva real de tus datos) y la función de distribución acumulada teórica (la curva de la distribución exponencial). A diferencia de la prueba de Kolmogorov-Smirnov (que se enfoca principalmente en la parte central de la distribución), la prueba de Anderson-Darling le da un mayor peso o importancia a las colas de la distribución (los valores extremos, tanto mínimos como máximos). la decisión explícita indica Not rejected, por lo que la discrepancia observada entre la curva empírica y la teórica no es estadísticamente significativa. Los datos ajustan adecuadamente el comportamiento de las colas para una distribución exponencial.
Las tres pruebas estadístico-formales (Chi-cuadrado, Anderson-Darling y Kolmogorov-Smirnov) no rechazan la hipótesis nula para la distribución Exponencial
Análisis para el tiempo de atención
#Datos
library(readxl)
datos_tomados <- read_excel("datos_tomados.xlsx")
#Pruebas
library(rriskDistributions)
ajuste<-fit.cont(datos_tomados$Atencion)Corriendo el código anterior se obtiene una ventana como la mostrada en Figura 3.
Se define \(X: tiempo~de~atención~de~usuarios~del~banco\).
Resultados con prueba Chi-Cuadrado
\[\begin{align} H_0&: X \sim \text{Normal} ~(\mu, \sigma)\\ \\ H_1&: X \nsim \text{Normal} ~(\mu, \sigma) \end{align}\] De la prueba de bondad de ajuste se obtiene que \(p\text{-value} = 0.37\). Dado que es mayor que el nivel de significancia común (\(\alpha = 0.05\)), no existe evidencia estadística suficiente para rechazar \(H_0\), por lo que los datos se ajustan a una distribución Normal.
Estos datos se pueden usar en el modelo de simulación en FlexSim para los tiempos de atención, ingresando los parámetros de la distribución Normal: su media (\(\mu\)) y desviación estándar (\(\sigma\)) estimadas a partir de la muestra.
Resultados con prueba Kolmogorov - Smirnov
\[\begin{align} H_0&: X \sim \text{Normal} ~(\mu, \sigma)\\ \\ H_1&: X \nsim \text{Normal} ~(\mu, \sigma) \end{align}\]
La prueba Kolmogorov - Smirnov evalúa la máxima distancia entre la función de distribución acumulada empírica y la teórica. La distancia obtenida es de \(0.03\) (KS(value) = 0.03) y la decisión explícita indica not rejected, por lo que la discrepancia observada entre la curva empírica y la teórica no es estadísticamente significativa.
Resultados con prueba Anderson-Darling
\[\begin{align} H_0&: X \sim \text{Normal} ~(\mu, \sigma)\\ \\ H_1&: X \nsim \text{Normal} ~(\mu, \sigma) \end{align}\]
La prueba Anderson - Darling mide la distancia al cuadrado ponderada entre la función de distribución acumulada empírica (la curva real de tus datos) y la función de distribución acumulada teórica (la curva de la distribución Normal). A diferencia de la prueba de Kolmogorov-Smirnov (que se enfoca principalmente en la parte central de la distribución), la prueba de Anderson-Darling le da un mayor peso o importancia a las colas de la distribución (los valores extremos, tanto mínimos como máximos). La prueba arrojó un valor de \(0.49\) (AD(value) = 0.49) y la decisión explícita indica not rejected, por lo que la discrepancia observada entre la curva empírica y la teórica no es estadísticamente significativa. Los datos ajustan adecuadamente el comportamiento de las colas para una distribución Normal.
Las tres pruebas estadístico-formales (Chi-cuadrado, Anderson-Darling y Kolmogorov-Smirnov) no rechazan la hipótesis nula para la distribución Normal.
3. Análisis datos de salida.
Una vez realizadas las simulaciones se obtienen datos de salida basados en medidas de desempeño, para el anterior problema se tiene como medida de desempeño el tiempo promedio de espera
Para el sistema original tenemos los siguientes datos de salida, Tabla 2:
| Tiempo espera promedio (\(S\)) |
|---|
| 1359.21 |
| 1319.00 |
| 1326.00 |
| 1328.00 |
| 1314.00 |
| 1324.00 |
| 1384.00 |
| 1331.00 |
| 1371.00 |
| 1372.00 |
| 1364.00 |
| 1296.00 |
| 1334.00 |
| 1370.00 |
| 1334.00 |
| 1364.00 |
| 1318.00 |
| 1321.00 |
| 1308.00 |
| 1314.00 |
| 1308.00 |
Se propone entonces un cambio para mejorar la medida de desempeño: agregar una caja y un cajero. Se realizan simulaciones y corridas experimentales. Obteniendo la siguiente información, (Tabla 3)
| Tiempo espera promedio (\(S\)) |
|---|
| 1108 |
| 1078 |
| 1115 |
| 1099 |
| 1093 |
| 1091 |
| 1107 |
| 1070 |
| 1063 |
| 1088 |
| 1099 |
| 1086 |
| 1081 |
| 1066 |
| 1113 |
| 1108 |
| 1070 |
| 1116 |
| 1090 |
| 1073 |
| 1072 |
Se comprueba de manera estadística si el cambio propuesto en el sistema mejora la medida de desempeño. Se usará una prueba de diferencias de medias, para muestras independientes, la cual exige normalidad en las muestras (se puede usar cualquier prueba, Shapiro-Wilk, Kolmogorov-Smirnov, Anderson-Darling).
Se plantean las hipótesis para verificar la normalidad:
Se define
\(X_1\): tiempo promedio de espera para el sistema original.
\(X_2\): tiempo promedio de espera para el sistema con cambio.
\[\begin{align} H_0&: X_1 \sim N(\mu, \sigma^2)\\ \\ H_1&: X_1 \nsim N(\mu, \sigma^2) \end{align}\]
Se realiza el test de Shapiro-Wilk para \(X_1\)
#Datos
library(readxl)
datos_salida <- read_excel("datos_salida.xlsx")
shapiro.test(datos_salida$espera1)Shapiro-Wilk normality test
data: datos_salida$espera1 W = 0.91047, p-value = 0.05609
Si el nivel de significancia \(\alpha = 0.05\), no existe evidencia estadística suficiente para rechazar \(H_0\) por lo que \(X_1 \sim N(\mu, \sigma^2)\) puesto que \(p-value=0.05609 \nless \alpha=0.05\)
Se realiza el test de Shapiro-Wilk para \(X_2\)
#Datos
library(readxl)
datos_salida <- read_excel("datos_salida.xlsx")
shapiro.test(datos_salida$espera2)Shapiro-Wilk normality test
data: datos_salida$espera2 W = 0.93971, p-value = 0.215
Si el nivel de significancia \(\alpha = 0.05\), no existe evidencia estadística suficiente para rechazar \(H_0\) por lo que \(X_2 \sim N(\mu, \sigma^2)\) puesto que \(p-value=0.215 \nless \alpha=0.05\)
Cumpliendo la normalidad, entonces se define:
\(\mu_1\): media poblacional grupo 1. Media poblacional del tiempo promedio de espera del sistema original.
\(\mu_2\): media poblacional grupo 2. Media poblacional del tiempo promedio de espera del sistema con cambio.
Planteamiento de hipótesis para comparación.
Existen tres opciones posibles: prueba bilateral, prueba unilateral a la derecha, prueba unilateral a la izquierda:
a. Opción 1: se utiliza cuando se quiere saber si hay una diferencia, sin importar la dirección.
\[\begin{align} H_0&: \mu_1 = \mu_2\\ \\ H_1&: \mu_1 \neq \mu_2 \end{align}\]
b. Opción 2: se utiliza cuando se quiere saber si la media del grupo 1 es mayor que la del grupo 2.
\[\begin{align} H_0&: \mu_1 \leq \mu_2\\ \\ H_1&: \mu_1 > \mu_2 \end{align}\]
b. Opción 3: se utiliza cuando se quiere saber si la media del grupo 1 es menor que la del grupo 2.
\[\begin{align} H_0&: \mu_1 \geq \mu_2\\ \\ H_1&: \mu_1 < \mu_2 \end{align}\]
Para el ejemplo actual interesa que el la media poblacional del tiempo promedio del sistema con cambio sea menor que la media poblacional del tiempo promedio del sistema sin cambio.
Por lo que escogemos la opción 2:
\[\begin{align} H_0&: \mu_1 \leq \mu_2\\ \\ H_1&: \mu_1 > \mu_2 \end{align}\]
Se realiza la prueba:
#Datos
library(readxl)
datos_salida <- read_excel("datos_salida.xlsx")
t.test(datos_salida$espera1, datos_salida$espera2, alternative = "greater")Welch Two Sample t-test
data: datos_salida\(espera1 and datos_salida\)espera2 t = 36.337, df = 34.753, p-value < 2.2e-16 alternative hypothesis: true difference in means is greater than 0 95 percent confidence interval: 234.8868 Inf sample estimates: mean of x mean of y 1336.153 1089.810
Si el nivel de significancia \(\alpha = 0.05\), existe evidencia estadística suficiente para rechazar \(H_0\) por lo que \(\mu_1 > \mu_2\), puesto que \(p-value=2.2e-16 \nless \alpha=0.05\). El cambio disminuyó el tiempo promedio de espera.
Dependiendo del interés se puede usar: alternative = "two.sided", alternative = "greater" o alternative = "less".
En caso de no cumplir el supuesto de normalidad de las muestras, se puede usar una prueba no paramétrica.
#Datos
library(readxl)
datos_salida <- read_excel("datos_salida.xlsx")
wilcox.test(datos_salida$espera1, datos_salida$espera2, paired = FALSE, alternative = "two.sided")Wilcoxon rank sum test with continuity correction
data: datos_salida\(espera1 and datos_salida\)espera2 W = 441, p-value = 3.098e-08 alternative hypothesis: true location shift is not equal to 0