Taller Sarima

1 Introducción

La rotación de personal es un indicador clave en Recursos Humanos porque muestra qué tan estable es la planta de empleados. Medirla es importante ya que una alta rotación genera costos de contratación, capacitación y puede afectar la productividad de la empresa.

En este trabajo se analiza la rotación mensual de personal, calculada a partir de los registros reales de Recursos Humanos. La fórmula usada fue:

\[ \text{Rotación} = \frac{\text{Retiros}}{\text{Activos mes}} \times 100 \] El periodo de estudio abarca desde enero de 2022 hasta mayo de 2025, con datos organizados de forma mensual. La información contiene el número de retiros, el total de empleados activos y el indicador de rotación mensual (%). A partir de estos datos se aplicará la metodología de Box-Jenkins mediante un modelo SARIMA, con el fin de analizar el comportamiento de la rotación y generar pronósticos que apoyen la gestión del talento humano.

base_rotacion <- read_excel("Base de datos rotación.xlsx")
print(head(base_rotacion, 10))
## # A tibble: 10 × 4
##    AÑO_MES             RETIROS ACTIVOS ROTACION
##    <dttm>                <dbl>   <dbl>    <dbl>
##  1 2025-01-01 00:00:00     261    8020     3.25
##  2 2025-02-01 00:00:00     198    8333     2.38
##  3 2025-03-01 00:00:00     263    8509     3.09
##  4 2025-04-01 00:00:00     223    8568     2.60
##  5 2025-05-01 00:00:00     256    8642     2.96
##  6 2025-06-01 00:00:00     249    8845     2.82
##  7 2025-07-01 00:00:00     316    9106     3.47
##  8 2024-01-01 00:00:00     199    7590     2.62
##  9 2024-02-01 00:00:00     279    7674     3.64
## 10 2024-03-01 00:00:00     141    7693     1.83

2. Gráfico de la serie original

# Ver estructura del dataframe
str(base_rotacion)
## tibble [43 × 4] (S3: tbl_df/tbl/data.frame)
##  $ AÑO_MES : POSIXct[1:43], format: "2025-01-01" "2025-02-01" ...
##  $ RETIROS : num [1:43] 261 198 263 223 256 249 316 199 279 141 ...
##  $ ACTIVOS : num [1:43] 8020 8333 8509 8568 8642 ...
##  $ ROTACION: num [1:43] 3.25 2.38 3.09 2.6 2.96 ...
# Resumen estadístico general
summary(base_rotacion)
##     AÑO_MES                          RETIROS         ACTIVOS    
##  Min.   :2022-01-01 00:00:00.00   Min.   :112.0   Min.   :5128  
##  1st Qu.:2022-11-16 00:00:00.00   1st Qu.:166.0   1st Qu.:6501  
##  Median :2023-10-01 00:00:00.00   Median :208.0   Median :7295  
##  Mean   :2023-10-01 07:48:50.23   Mean   :209.2   Mean   :7191  
##  3rd Qu.:2024-08-16 12:00:00.00   3rd Qu.:244.5   3rd Qu.:8018  
##  Max.   :2025-07-01 00:00:00.00   Max.   :387.0   Max.   :9106  
##     ROTACION    
##  Min.   :1.695  
##  1st Qu.:2.598  
##  Median :2.877  
##  Mean   :2.915  
##  3rd Qu.:3.257  
##  Max.   :4.828

La base de datos comprende el periodo entre enero de 2022 y julio de 2025. Durante este tiempo, el número de retiros de personal osciló entre un mínimo de 112 y un máximo de 387, con un promedio cercano a 209 retiros por mes. La planta de personal activa mostró una tendencia de crecimiento, pasando de poco más de 5.000 empleados hasta superar los 9.000, con un promedio de 7.191 trabajadores. En cuanto a la tasa de rotación, esta se mantuvo relativamente estable, con valores entre 1,70% y 4,83%, y un promedio de 2,92%. La mediana (2,88%) es cercana al promedio, lo que indica que la distribución de los datos es equilibrada. En general, la serie refleja una rotación controlada, aunque con ciertos meses críticos que alcanzan picos cercanos al 5%, lo cual podría estar relacionado con factores estacionales o casos puntuales de la operación.

# Serie temporal mensual de rotación
serie_rotacion <- ts(base_rotacion$ROTACION, start = c(2022,1), frequency = 12)

autoplot(serie_rotacion) +
  labs(
    title = "Serie de rotación mensual",
    x = "Tiempo",
    y = "Tasa de rotación (%)") +
    theme_minimal()

La serie de rotación mensual no muestra una tendencia sostenida de crecimiento o disminución, sino que oscila alrededor de un nivel promedio cercano al 3%. Se observan picos recurrentes en determinados meses que sugieren la presencia de estacionalidad, posiblemente relacionados con ciclos propios de la gestión del talento humano por temas de finalizaciones de contratos por optimización de gastos de personal, también se puede ver afectada por el pagos de primas o cierres de año. En cuanto a la heterocedasticidad, la variabilidad de los datos se mantiene relativamente constante a lo largo del periodo analizado, por lo que no hay evidencia clara de cambios en la dispersión de la serie.

# Tendencia
autoplot(serie_rotacion, ts.colour = "blue", ts.linetype = "dashed")

ndiffs(serie_rotacion)   # Cantidad de diferencias ordinarias sugeridas
## [1] 0

El comportamiento de la serie de rotación mensual evidencia fluctuaciones alrededor de un promedio cercano al 3%, sin mostrar una tendencia clara de aumento o disminución sostenida en el tiempo. Se identifican algunos picos marcados en determinados periodos, lo que sugiere la presencia de componentes estacionales que pueden estar asociados a factores propios de la gestión del talento humano, como pagos de beneficios o finalización de contratos.

# Estacionalidad
nsdiffs(serie_rotacion)  # Número de diferencias estacionales sugeridas
## [1] 0
ggseasonplot(serie_rotacion, year.labels = TRUE, main = "Estacionalidad de la rotación")

El gráfico de estacionalidad muestra cómo varía la rotación a lo largo de los meses en diferentes años. Se observa que existen picos recurrentes en meses específicos, como febrero, julio y diciembre, lo que evidencia la presencia de un componente estacional en la serie. Estos comportamientos son consistentes con dinámicas propias de la gestión del talento humano, ya que en estos meses suelen concentrarse fenómenos como el pago de primas, el vencimiento de contratos o los procesos de cierre de año. Aunque las magnitudes de la rotación cambian entre años, la forma del patrón mensual se mantiene, confirmando la influencia estacional en la serie.

# Heterocedasticidad
autoplot(diff(serie_rotacion), ts.linetype = "dashed", ts.colour = "darkmagenta", main = "Heterocedasticidad")

El gráfico de la serie diferenciada de rotación permite observar la variabilidad de los cambios mes a mes. En general, las fluctuaciones se mantienen dentro de un rango estable, sin evidenciar periodos prolongados en los que la varianza aumente o disminuya de manera significativa. Esto indica que la serie no presenta heterocedasticidad importante, la dispersión de los valores es relativamente constante en el tiempo. En el contexto de la rotación de personal, este resultado significa que la magnitud de las variaciones no depende de un año o periodo específico.

En conclusión la serie de rotación mensual no presenta una tendencia definida de crecimiento o disminución sostenida, sino que se mantiene alrededor de un promedio cercano al 3%. Se evidencian patrones de estacionalidad con picos en meses específicos, probablemente asociados a factores propios de la gestión del talento humano, como el pago de primas, la finalización de contratos o los procesos de cierre de año. En cuanto a la heterocedasticidad, la variabilidad de la serie se mantiene estable en el tiempo, lo que indica que la dispersión de la rotación no depende de un periodo particular.

3. Ajuste de modelos propuestos por Box-Jenkins

Transformaciones necesarias para lograr la estacionariedad

Para poder aplicar la metodología de Box–Jenkins es necesario que la serie sea estacionaria, lo que significa que presente media y varianza constante en el tiempo y y que la dependencia de la serie se dé únicamente respecto a sus propios valores anteriores.

En este caso para que la serie de rotación mensual sea estacionaria le aplicamos transformaciones de diferenciación. La diferencia simple permite estabilizar la media si hubiera una tendencia, mientras que la diferencia estacional elimina los picos que se repiten cada 12 meses. La decisión sobre cuántas diferencias aplicar la tomamos con ayuda de funciones como ndiffs() y nsdiffs(), además de revisar los gráficos y las funciones de autocorrelación (FAC y FACP).

# Evidencia gráfica de estacionalidad al estilo TSA
monthplot(serie_rotacion, col = "midnightblue")

boxplot(serie_rotacion ~ cycle(serie_rotacion),
        main = "Caja por mes (estacionalidad)", xlab = "Mes", ylab = "Rotación")

Los gráficos de estacionalidad evidencian que la rotación de personal presenta variaciones significativas según el mes del año. En el monthplot se observa que algunos meses, como junio, julio y octubre, concentran picos más altos, mientras que en enero y noviembre tienden a darse valores más bajos. El diagrama de cajas por mes confirma esta dinámica, mostrando medianas más elevadas y mayor dispersión en meses como febrero y julio, en contraste con meses de menor rotación y variabilidad como noviembre y diciembre. Estos patrones reflejan la presencia de un componente estacional en la serie, el cual puede estar asociado a factores propios de la gestión de talento humano, como el pago de primas, la finalización de contratos o procesos de cierre de año.

# Prueba ADF (raíz unitaria) sobre la serie original
adf.test(serie_rotacion)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  serie_rotacion
## Dickey-Fuller = -3.2563, Lag order = 3, p-value = 0.09141
## alternative hypothesis: stationary

resultado de la prueba ADF muestra un estadístico de -3.25 con un valor p de 0.09. Como este valor es mayor al 5%, no se puede rechazar la hipótesis de que la serie tenga raíz unitaria, esto signigica que no sea estacionaria. Por lo tanto la serie de rotación como está no cumple con la condición de estacionariedad y será necesario aplicarle transformaciones, como diferencias para poder trabajarla con un modelo SARIMA.

# ACF de la serie original
acf(serie_rotacion, lag.max = 36, main = "ACF (serie original)")

El gráfico de autocorrelación de la serie original muestra que la mayoría de los rezagos están dentro de los límites de confianza, aunque en los primeros rezagos aparecen algunos valores significativos. Esto quiere decir que la serie tiene cierta dependencia con sus propios valores pasados, pero no de forma muy marcada. En el caso de la rotación de personal, esto refleja que los cambios mensuales no se deben solo al comportamiento del mes anterior, sino también a factores propios de la dinámica interna de la organización y a efectos estacionales.

# PACF de la serie original
pacf(serie_rotacion, lag.max = 36, main = "PACF (serie original)")

El gráfico de la PACF de la serie original muestra que algunos rezagos iniciales aparecen significativos, mientras que los demás se mantienen dentro de los límites de confianza. Esto indica que la serie guarda cierta relación con sus valores pasados inmediatos, pero dicha influencia se va disipando en rezagos más lejanos. En el contexto de la rotación de personal, esto significa que los cambios en un mes pueden estar explicados en parte por lo ocurrido en los meses anteriores, aunque no existe un patrón fuerte o prolongado que explique toda la dinámica.

# Diferencias para estacionarizar
diff1      <- diff(serie_rotacion)# d = 1
diff_seas  <- diff(serie_rotacion, lag = 12)# D = 1
diff_final <- diff(diff(serie_rotacion), lag = 12)# d = 1 y D = 1

plot(diff1,     main = "Serie diferenciada (d=1)", ylab = "Δ Rotación",  xlab = "Tiempo", type = "o")

plot(diff_seas, main = "Diferencia estacional (D=1, lag=12)", ylab = "Δ12 Rotación", xlab = "Tiempo", type = "o")

plot(diff_final,main = "Serie diferenciada (d=1, D=1)", ylab = "Δ Δ12 Rotación", xlab = "Tiempo", type = "o")

# Verificación de la tranformación
op <- par(mfrow = c(2,1), mar = c(3,3,3,1))
acf(diff_final,  lag.max = 36, main = "ACF (serie transformada)")
pacf(diff_final, lag.max = 36, main = "PACF (serie transformada)")

par(op)

En los gráficos de la ACF y la PACF de la serie transformada se observa que la mayoría de los rezagos caen dentro de las bandas de confianza, lo que indica que la serie ya no presenta correlaciones fuertes con sus valores pasados. Esto confirma que las transformaciones aplicadas lograron estabilizar la serie y volverla estacionaria. En el caso de la rotación de personal, esto significa que los efectos de tendencia y estacionalidad fueron eliminados.

Identificación del modelo

Siguiendo la metología Box–Jenkins luego de la transformaciones aplicadas, se plantean dos posibles modelos para serie de rotación mensual:

Modelo 1: SARIMA(0,1,1)(1,1,0)[12]

# Modelo 1: SARIMA(0,1,1)(1,1,0)[12]
m1 <- Arima(serie_rotacion, order = c(0,1,1),
            seasonal = list(order = c(1,1,0), period = 12));m1
## Series: serie_rotacion 
## ARIMA(0,1,1)(1,1,0)[12] 
## 
## Coefficients:
##           ma1     sar1
##       -0.6997  -0.5216
## s.e.   0.1817   0.1743
## 
## sigma^2 = 0.6503:  log likelihood = -37.33
## AIC=80.65   AICc=81.58   BIC=84.86

El modelo que salió muestra que la rotación de personal no solo responde a cambios de un mes a otro, sino que también repite ciertos comportamientos de forma anual. Los resultados indican que el ajuste es bueno y que el modelo logra capturar tanto los movimientos inmediatos como esos patrones que se repiten cada 12 meses.

Modelo 2: SARIMA(0,1,1)(1,1,1)[12]

# Modelo 2: SARIMA(0,1,1)(1,1,1)[12]
m2 <- Arima(serie_rotacion, order = c(0,1,1),
            seasonal = list(order = c(1,1,1), period = 12)); m2
## Series: serie_rotacion 
## ARIMA(0,1,1)(1,1,1)[12] 
## 
## Coefficients:
##           ma1     sar1     sma1
##       -0.7075  -0.3895  -0.1724
## s.e.   0.1900   0.7112   0.8743
## 
## sigma^2 = 0.671:  log likelihood = -37.31
## AIC=82.61   AICc=84.21   BIC=88.22

Este segundo modelo a diferencia del primero, aquí se incluye también un efecto de los cambios que se repiten cada año. Sin embargo, al ver los resultados AIC de 82.61 y BIC de 88.22, el ajuste no es tan bueno como en el modelo anterior. Lo que significa es que aunque este modelo trata de captar más detalles, no mejora la explicación y parece menos adecuado para la rotación de personal que el primero.

Estimación de parámetros

# Comparación de criterio AIC (Criterio de Información de Akaike)
AIC(m1, m2)

La comparación del criterio AIC muestra que el modelo m1 con AIC de 80.65 tiene un valor más bajo que el modelo m2 con AIC de 82.61. Esto quiere decir que entre los dos, el modelo m1 es el que logra un mejor equilibrio entre ajuste y simplicidad. Por lo cual el modelo m1 resulta más adecuado para explicar la rotación de personal en esta serie.

# Comparación de criterio BIC (Criterio de Información Bayesiano)
BIC(m1, m2)

En la comparación con el criterio BIC se observa que el modelo m1 con BIC de 84.86 tiene un valor menor que el modelo m2 con BIC de 88.21. Esto confirma lo visto con el AIC: el modelo m1 es el que ofrece un mejor ajuste sin volverse demasiado complejo. Por lo tanto, m1 se mantiene como la mejor opción para modelar la rotación de personal.

# Métricas de ajuste intramuestra
accuracy(m1)
##                      ME      RMSE       MAE      MPE     MAPE      MASE
## Training set 0.09068518 0.6507462 0.4439787 0.762099 15.37247 0.6088779
##                    ACF1
## Training set -0.1040857
accuracy(m2)
##                      ME      RMSE      MAE       MPE     MAPE      MASE
## Training set 0.09344498 0.6491033 0.440133 0.8372687 15.20941 0.6036037
##                     ACF1
## Training set -0.09883219

Al revisar las métricas de ajuste intramuestra se observa que tanto el modelo m1 como el m2 presentan errores similares, con valores de RMSE y MAE muy cercanos. Sin embargo, el modelo m1 mantiene un MAPE ligeramente menor de 15.37 frente a 15.20, lo que muestra un desempeño un poco más consistente. En conclusión, aunque ambos modelos se ajustan bien a los datos, el m1 sigue destacando como la opción más adecuada.

Validación de residuos

# Residuos de modelo 1
res1 <- residuals(m1); res1
##                Jan           Feb           Mar           Apr           May
## 2022  1.878907e-03  1.599691e-04  7.087980e-04  9.781041e-05  4.032684e-04
## 2023 -1.563443e-02  9.940382e-01  3.745791e-02  8.313317e-01  6.656701e-01
## 2024 -1.639695e-01  8.573807e-01 -4.141772e-01 -4.778970e-01 -5.040853e-01
## 2025  4.276489e-01  1.166763e+00  2.685510e-01 -1.888556e-01 -1.740923e+00
##                Jun           Jul           Aug           Sep           Oct
## 2022  2.002020e-04  7.812976e-04 -1.136783e-04  8.579354e-04 -9.429061e-04
## 2023  1.504908e-01  1.264956e+00  6.926503e-01 -9.868507e-01  1.699004e+00
## 2024 -6.937732e-01 -9.472273e-01 -8.556336e-03  1.057550e-01  5.917852e-01
## 2025  6.799641e-01 -4.220311e-01                                          
##                Nov           Dec
## 2022 -6.123167e-04 -2.076820e-03
## 2023 -9.590998e-01  2.455988e-01
## 2024  8.111407e-01 -6.898554e-02
## 2025

Los residuos del modelo 1 muestran valores pequeños en la mayoría de los meses, los cuales son positivos y negativos, lo que indica que el modelo está capturando buena parte de la dinámica de la serie. Sin embargo también se observan algunos meses con desviaciones más grandes, como en mayo de 2024 o abril de 2025, lo que refleja que en esos periodos el modelo no logró ajustarse tan bien a la realidad. En general, la presencia de residuos cercanos a cero en la mayor parte del tiempo indica que el modelo es razonable, aunque todavía existen momentos puntuales donde se generan errores más fuertes que conviene revisar.

# Residuos de modelo 2
res2 <- residuals(m2); res2
##                Jan           Feb           Mar           Apr           May
## 2022  1.878907e-03  1.599691e-04  7.087980e-04  9.781042e-05  4.032684e-04
## 2023 -1.563443e-02  9.909254e-01  3.936793e-02  8.317174e-01  6.704409e-01
## 2024 -1.622957e-01  8.448506e-01 -4.079554e-01 -4.820562e-01 -5.106421e-01
## 2025  3.534469e-01  1.250673e+00  2.549968e-01 -1.377364e-01 -1.703590e+00
##                Jun           Jul           Aug           Sep           Oct
## 2022  2.002020e-04  7.812976e-04 -1.136782e-04  8.579354e-04 -9.429061e-04
## 2023  1.580785e-01  1.271449e+00  7.064115e-01 -9.725223e-01  1.702684e+00
## 2024 -6.984447e-01 -9.626604e-01 -2.800126e-02  1.025478e-01  5.702960e-01
## 2025  6.548587e-01 -3.598943e-01                                          
##                Nov           Dec
## 2022 -6.123166e-04 -2.076820e-03
## 2023 -9.444369e-01  2.489902e-01
## 2024  8.151038e-01 -6.417659e-02
## 2025

Los residuos del modelo 2 indica que la mayoría de los valores son cercanos a cero, lo cual es un buen indicador de que el modelo está representando bien la serie. Sin embargo, también se ven meses con errores más grandes, como en mayo de 2023 o abril de 2024, donde el ajuste no fue tan preciso. Estos picos en los residuos pueden estar asociados a cambios abruptos en la rotación que el modelo no logró capturar del todo. Aun así, en general los residuos muestran un comportamiento equilibrado entre positivos y negativos, lo que respalda que el modelo tiene un desempeño adecuado.

# ACF y PACF de los residuos modelo 1
par(mfrow = c(2,1))
acf(res1, main = "ACF residuos m1")
pacf(res1, main = "PACF residuos m1")

El gráfico de la ACF y PACF de los residuos del modelo 1 muestra que no hay picos significativos fuera de las bandas de confianza, lo cual sugiere que los residuos se comportan como ruido blanco. En otras palabras, el modelo logró capturar la estructura de la serie y no quedaron patrones de autocorrelación evidentes sin explicar. Esto es un buen indicador de que el modelo ajusta bien y cumple con el supuesto de independencia en los residuos, fortaleciendo su validez para el análisis de la rotación.

# ACF y PACF de los residuos modelo 2
par(mfrow = c(2,1))
acf(res2, main = "ACF residuos m2")
pacf(res2, main = "PACF residuos m2")

El gráfico de la ACF y PACF de los residuos del modelo 2 muestraq ue la mayoría de los rezagos permanecen dentro de las bandas de confianza. Esto significa que los residuos se comportan como un ruido blanco, sin patrones claros de correlación. En otras palabras, el modelo logra capturar la estructura principal de la serie y deja en los residuos solo fluctuaciones aleatorias. Esto es positivo porque indica que el ajuste del modelo es adecuado y que no se están dejando componentes importantes sin explicar en la serie de rotación.

# Prueba de media cero
t.test(res1)
## 
##  One Sample t-test
## 
## data:  res1
## t = 0.91203, df = 42, p-value = 0.367
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  -0.1099778  0.2913482
## sample estimates:
##  mean of x 
## 0.09068518
t.test(res2)
## 
##  One Sample t-test
## 
## data:  res2
## t = 0.94279, df = 42, p-value = 0.3512
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  -0.1065782  0.2934682
## sample estimates:
##  mean of x 
## 0.09344498

Los resultados de la prueba t para los residuos de los dos modelos muestran que en ambos casos el p-valor es mayor a 0.05 con 0.367 para m1 y con 0.351 para m2, lo que indica que no hay evidencia suficiente para rechazar la hipótesis nula de que la media de los residuos sea igual a cero. Esto quiere decir que los errores están centrados en cero, lo cual es un buen signo de que los modelos se ajustan bien y no presentan sesgos sistemáticos en sus predicciones.

# Prueba de Ljung-Box o ruido blanco
Box.test(res1, lag = 24, type = "Ljung-Box")
## 
##  Box-Ljung test
## 
## data:  res1
## X-squared = 22.006, df = 24, p-value = 0.5789
Box.test(res2, lag = 24, type = "Ljung-Box")
## 
##  Box-Ljung test
## 
## data:  res2
## X-squared = 21.904, df = 24, p-value = 0.585

En la prueba de Ljung-Box aplicada a los residuos de ambos modelos, los p-valores con 0.5789 para m1 y con 0.585 para m2, resultaron bastante superiores a 0.05, lo que indica que no hay evidencia de autocorrelación significativa. Lo que significa que los residuos se comportan como ruido blanco, lo cual es positivo porque significa que los modelos lograron capturar la estructura de la serie y no dejaron patrones sin explicar.

# Prueba de normalidad de Shapiro-Wilk
shapiro.test(res1)
## 
##  Shapiro-Wilk normality test
## 
## data:  res1
## W = 0.95338, p-value = 0.07927
shapiro.test(res2)
## 
##  Shapiro-Wilk normality test
## 
## data:  res2
## W = 0.95104, p-value = 0.06507

La prueba de normalidad de Shapiro-Wilk aplicada a los residuos de los dos modelos 1 y 2 muestra p-valores de 0.079 y 0.066 respectivamente, ambos superiores al nivel de significancia de 0.05. Esto indica que no se rechaza la hipótesis nula de normalidad, por lo que los residuos pueden considerarse aproximadamente normales. En el contexto del análisis lo cual es favorable, ya que la normalidad de los residuos es uno de los supuestos necesarios para validar la calidad de los modelos ajustados y refuerza que las estimaciones y conclusiones son confiables.

Modelos propuesto m3 y m4

# Modelos propuestos m3 y m4

# m3 SARIMA(0,1,1)(1,1,0)[12]
m3 <- Arima(serie_rotacion, order = c(0,1,1),
            seasonal = list(order = c(1,1,0), period = 12)) ;m3
## Series: serie_rotacion 
## ARIMA(0,1,1)(1,1,0)[12] 
## 
## Coefficients:
##           ma1     sar1
##       -0.6997  -0.5216
## s.e.   0.1817   0.1743
## 
## sigma^2 = 0.6503:  log likelihood = -37.33
## AIC=80.65   AICc=81.58   BIC=84.86
# m4 SARIMA(0,1,1)(1,1,1)[12]
m4 <- Arima(serie_rotacion, order = c(0,1,1),
            seasonal = list(order = c(1,1,1), period = 12)); m4
## Series: serie_rotacion 
## ARIMA(0,1,1)(1,1,1)[12] 
## 
## Coefficients:
##           ma1     sar1     sma1
##       -0.7075  -0.3895  -0.1724
## s.e.   0.1900   0.7112   0.8743
## 
## sigma^2 = 0.671:  log likelihood = -37.31
## AIC=82.61   AICc=84.21   BIC=88.22
# Comparación por criterios de información y métricas intramuestra
AIC(m3, m4)
BIC(m3, m4)
accuracy(m3)
##                      ME      RMSE       MAE      MPE     MAPE      MASE
## Training set 0.09068518 0.6507462 0.4439787 0.762099 15.37247 0.6088779
##                    ACF1
## Training set -0.1040857
accuracy(m4)
##                      ME      RMSE      MAE       MPE     MAPE      MASE
## Training set 0.09344498 0.6491033 0.440133 0.8372687 15.20941 0.6036037
##                     ACF1
## Training set -0.09883219
# Verificación de residuos (hipótesis)
res3 <- residuals(m3)
res4 <- residuals(m4)

# ACF/PACF 
par(mfrow = c(2,1)); acf(res3, main = "ACF residuos m3"); pacf(res3, main = "PACF residuos m3")

par(mfrow = c(2,1)); acf(res4, main = "ACF residuos m4"); pacf(res4, main = "PACF residuos m4")

par(mfrow = c(1,1))

# Media cero H0: mean(residuos)=0
t.test(res3)
## 
##  One Sample t-test
## 
## data:  res3
## t = 0.91203, df = 42, p-value = 0.367
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  -0.1099778  0.2913482
## sample estimates:
##  mean of x 
## 0.09068518
t.test(res4)
## 
##  One Sample t-test
## 
## data:  res4
## t = 0.94279, df = 42, p-value = 0.3512
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  -0.1065782  0.2934682
## sample estimates:
##  mean of x 
## 0.09344498
# Ruido blanco H0: no autocorrelación
Box.test(res3, lag = 24, type = "Ljung-Box")
## 
##  Box-Ljung test
## 
## data:  res3
## X-squared = 22.006, df = 24, p-value = 0.5789
Box.test(res4, lag = 24, type = "Ljung-Box")
## 
##  Box-Ljung test
## 
## data:  res4
## X-squared = 21.904, df = 24, p-value = 0.585
# Normalidad H0: residuos ~ Normal
shapiro.test(res3)
## 
##  Shapiro-Wilk normality test
## 
## data:  res3
## W = 0.95338, p-value = 0.07927
shapiro.test(res4)
## 
##  Shapiro-Wilk normality test
## 
## data:  res4
## W = 0.95104, p-value = 0.06507

El modelo m3 corresponde a un SARIMA(0,1,1)(1,1,0)[12] y el modelo m4 a un SARIMA(0,1,1)(1,1,1)[12]. Al compararlos con los criterios de información de AIC y BIC, las métricas de ajuste intramuestra, ambos muestran un buen desempeño, aunque el modelo m3 tiende a presentar valores ligeramente más bajos de AIC y BIC, lo que indica un mejor ajuste con menos parámetros. En la verificación de supuestos, tanto m3 como m4 presentan residuos sin autocorrelación significativa según las pruebas de Ljung-Box, con medias cercanas a cero en la prueba t y con valores de p en la prueba de Shapiro-Wilk que no permiten rechazar la normalidad. En conjunto, los resultados sugieren que los dos modelos son adecuados, pero el m3 resulta más parsimonioso y se perfila como el más conveniente para explicar la serie de rotación.

Modelo seleccionado

De la comparación realizada entre los cuatro modelos propuestos m1, m2, m3 y m4, se observa que todos cumplen con los supuestos de residuos, ya que presentan medias cercanas a cero, ausencia de autocorrelación significativa y comportamiento aproximadamente normal. Sin embargo al revisar los criterios de información AIC y BIC, así como la parsimonia de cada especificación, el modelo m3 (SARIMA(0,1,1)(1,1,0)[12]) resulta ser el más adecuado. Este modelo logra un buen ajuste con menos parámetros y menores valores de AIC y BIC, lo que lo convierte en la mejor alternativa para explicar la dinámica de la rotación de personal.

El modelo seleccionado corresponde a un:

\[ SARIMA(0,1,1)(1,1,0)_{12} \] Donde:

  • Parte no estacional ARIMA(0,1,1):
    • p = 0 → no hay componente autorregresivo.
    • d = 1 → una diferencia ordinaria.
    • q = 1 → un componente de media móvil.
  • Parte estacional (1,1,0)_{12}:
    • P = 1 → un autorregresivo estacional.
    • D = 1 → una diferencia estacional.
    • Q = 0 → no hay componente de media móvil estacional.
    • s = 12 → periodicidad mensual (12 meses).

Pronóstico

# Pronóstico dentro y fuera de muestra con modelo seleccionado m3

# Split: últimos 12 como test
h <- 12
n <- length(serie_rotacion)
train <- ts(serie_rotacion[1:(n-h)], start=start(serie_rotacion), frequency=12)
test  <- ts(serie_rotacion[(n-h+1):n], start=time(serie_rotacion)[n-h+1], frequency=12)

# Reentrenar modelo m3 en train
m3_train <- Arima(train, order=c(2,1,1), seasonal=list(order=c(1,1,0), period=12))

# Métricas dentro de muestra
accuracy(m3_train)
##                     ME     RMSE      MAE       MPE     MAPE      MASE
## Training set 0.0336747 0.391929 0.259257 0.2510961 8.690776 0.3282242
##                    ACF1
## Training set 0.08007915
# Pronóstico fuera de muestra
f3 <- forecast(m3_train, h=h)

# Métricas fuera de muestra (ECM y MAPE)
MSE(as.numeric(test), as.numeric(f3$mean))
## [1] 1.316137
MAPE(as.numeric(test), as.numeric(f3$mean))
## [1] 0.5325665

El modelo m3 muestra un buen ajuste en la parte de entrenamiento. El ME está muy cerca de cero y el RMSE con 0.39 lo que indica que el error promedio es bajo. El MAE con 0.26 también confirma que las diferencias absolutas con la serie son pequeñas. En términos relativos, el MAPE es de 8.7%, lo que quiere decir que el modelo tiene una precisión aceptable porque se mantiene por debajo del 10%. El valor de ACF1 de 0.08 evidencia que no hay problemas fuertes de autocorrelación en los residuos. Por fuera de la muestra, el ECM es 1.31 y el MAPE 0.53, lo que era de esperarse porque al pronosticar el error sube un poco, pero en general el desempeño sigue siendo razonable.

# Gráfico comparando pronóstico vs test
plot(f3, main="Pronóstico m3 fuera de muestra (12 meses)", xlab="Tiempo", ylab="Rotación")
lines(test, col="red", lwd=2)
legend("topleft", c("Pronóstico m3","Observado (Test)"),
       col=c("blue","red"), lty=c(1,1), lwd=c(1,2), bty="n")

En la figura se observa el pronóstico del modelo m3 para los siguientes 12 meses. La línea azul representa la proyección del modelo y la roja corresponde a los valores reales de la muestra de prueba. Aunque existen diferencias en algunos puntos, en general la serie observada se mantiene dentro de los intervalos de confianza, lo que indica que el modelo logra capturar el comportamiento de la rotación. El pronóstico refleja la tendencia y la estacionalidad de la serie, y aún con las desviaciones puntuales, se considera que el desempeño del modelo es aceptable para fines de predicción.

** Comparación con modelo m4

# Comparación m3 vs m4

# Segundo modelo para comparar
m4_train <- Arima(train, order=c(0,1,1),
                  seasonal=list(order=c(1,1,1), period=frequency(train)))
f4 <- forecast(m4_train, h=h)

# Métricas dentro de muestra 
acc3 <- accuracy(m3_train)
acc4 <- accuracy(m4_train)
Intra <- rbind(
  m3 = acc3[1, c("RMSE","MAE","MAPE")],
  m4 = acc4[1, c("RMSE","MAE","MAPE")]
)
Intra
##         RMSE       MAE     MAPE
## m3 0.3919290 0.2592570 8.690776
## m4 0.4397881 0.2894481 9.784335

Al comparar los resultados de los modelos m3 y m4 se observa que el m3 presenta mejores métricas dentro de la muestra. El RMSE y el MAE son menores en m3 (0.39 y 0.26) frente a m4 (0.44 y 0.29), lo que significa que los errores de ajuste son más bajos. Además, el MAPE de m3 de 8.7% también es inferior al de m4 con 9.7%, lo cual indica que el modelo m3 tiene un mayor poder predictivo en términos relativos. Con estos resultados se confirma que el modelo m3 es el más adecuado para continuar con el pronóstico.

# Métricas fuera de muestra
mse  <- function(y, yhat) mean((y - yhat)^2)
mape <- function(y, yhat) mean(abs((y - yhat)/y))*100
Test <- data.frame(
  Modelo = c("m3","m4"),
  MSE = c(mse(as.numeric(test), as.numeric(f3$mean)),
          mse(as.numeric(test), as.numeric(f4$mean))),
  MAPE = c(mape(as.numeric(test), as.numeric(f3$mean)),
           mape(as.numeric(test), as.numeric(f4$mean)))
)
Test

En la evaluación fuera de la muestra los resultados muestran que el modelo m4 obtiene un mejor desempeño que el m3. El MSE de m4 de 1.00 es menor que el de m3 con 1.31, y lo mismo ocurre con el MAPE, donde m4 alcanza 27.2% frente a 32.5% de m3. Esto significa que al enfrentarse a datos no utilizados en el entrenamiento, el modelo m4 logra pronosticar con menor error. Aunque en la etapa intramuestra el m3 había mostrado mejor ajuste, en la práctica de predicción el m4 resulta más preciso y, por tanto más recomendable para la proyección.

# Gráfico: m3 vs m4 vs test
plot(f3, main=paste0("Pronóstico fuera de muestra (", h, " meses)"),
     xlab="Tiempo", ylab="Rotación")
lines(f4$mean, col="blue", lty=2)# m4
lines(test, col="red", lwd=2) # observado
legend("topleft", c("m3","m4","Test"),
       col=c("black","blue","red"), lty=c(1,2,1), lwd=c(1,1,2), bty="n")

En conclusión al comparar los modelos m3 y m4 se observa que dentro de la muestra el m3 presenta un mejor ajuste, ya que sus errores RMSE, MAE y MAPE son más bajos. Sin embargo, en la validación fuera de la muestra el m4 logra un mejor desempeño, con un MSE y un MAPE inferiores a los de m3. En el gráfico de pronóstico a 12 meses se aprecia cómo ambos modelos siguen la tendencia de los datos observados, aunque el m4 se ajusta de manera más cercana a la serie de prueba. Esto confirma que aunque m3 es más eficiente en el ajuste intramuestra, el modelo m4 ofrece mayor capacidad predictiva y resulta más recomendable para proyectar la rotación.

4. Validación cruzada

Validación cruzada

# Validación cruzada

y     <- serie_rotacion
freq  <- frequency(y)
h     <- 12
n     <- length(y)

# Split fijo para train/test 12 últimos meses
train <- ts(y[1:(n-h)], start = start(y), frequency = freq)
test  <- ts(y[(n-h+1):n], start = time(y)[n-h+1], frequency = freq)

# Modelos m3 y m4 reentrenados en TRAIN
m3_tr <- Arima(train, order = c(2,1,1), seasonal = list(order = c(1,1,0), period = freq))
m4_tr <- Arima(train, order = c(0,1,1), seasonal = list(order = c(1,1,1), period = freq))

# Pronósticos fuera de muestra 12 meses
f3 <- forecast(m3_tr, h = h) 
f4 <- forecast(m4_tr, h = h)
#Métricas DENTRO de muestra train
acc3 <- accuracy(m3_tr)[1, c("RMSE","MAE","MAPE")]
acc4 <- accuracy(m4_tr)[1, c("RMSE","MAE","MAPE")]
Intra <- rbind(m3 = acc3, m4 = acc4)

# Métricas FUERA de muestra test
mse  <- function(y, yhat) mean((y - yhat)^2)
mape <- function(y, yhat) mean(abs((y - yhat)/y))*100
Test <- data.frame(
  Modelo = c("m3","m4"),
  MSE    = c(mse(as.numeric(test), as.numeric(f3$mean)),
             mse(as.numeric(test), as.numeric(f4$mean))),
  MAPE   = c(mape(as.numeric(test), as.numeric(f3$mean)),
             mape(as.numeric(test), as.numeric(f4$mean)))
)
# Validación cruzada rolling origin
initial <- n - h  # deja 12 meses para evaluar rodando
f_m3 <- function(x, H) forecast(Arima(x, order=c(2,1,1),
                          seasonal=list(order=c(1,1,0), period=freq)), h=H)$mean
f_m4 <- function(x, H) forecast(Arima(x, order=c(0,1,1),
                          seasonal=list(order=c(1,1,1), period=freq)), h=H)$mean

e_m3 <- tsCV(y, forecastfunction = f_m3, h = h, initial = initial)
e_m4 <- tsCV(y, forecastfunction = f_m4, h = h, initial = initial)

MSE_CV_m3 <- mean(colMeans(e_m3^2, na.rm = TRUE))  # promedio horizontes 1..12
MSE_CV_m4 <- mean(colMeans(e_m4^2, na.rm = TRUE))
CV <- data.frame(Modelo = c("m3","m4"), MSE_CV = c(MSE_CV_m3, MSE_CV_m4))
# Criterios de información train
Crit <- data.frame(
  Modelo = c("m3","m4"),
  AIC = c(AIC(m3_tr), AIC(m4_tr)),
  BIC = c(BIC(m3_tr), BIC(m4_tr))
)
# Gráfico fuera de muestra m3 vs m4 vs Test
plot(f3, main = "Pronóstico fuera de muestra (12 meses)", xlab = "Tiempo", ylab = "Rotación")
lines(f4$mean, col = "blue", lty = 2)
lines(test,   col = "red",  lwd = 2)
legend("topleft", c("m3","m4","Test"), col = c("black","blue","red"),
       lty = c(1,2,1), lwd = c(1,1,2), bty = "n")

En el gráfico de pronóstico fuera de muestra se comparan los modelos m3 y m4 frente a los valores observados en el periodo de prueba. La línea roja corresponde a los datos reales, mientras que las líneas negra y azul representan los pronósticos de m3 y m4 respectivamente, junto con sus intervalos de confianza. Se aprecia que ambos modelos capturan la tendencia general de la serie pero el m4 sigue de manera más cercana el comportamiento observado en varios de los meses de prueba, lo cual coincide con las métricas de error donde mostró menor MSE y MAPE. Esto confirma que aunque el m3 ajusta mejor dentro de la muestra, el m4 ofrece un poder predictivo más alto al proyectar hacia el futuro, por tanto resulta más recomendable para el pronóstico final.

# Tablas
Intra #RMSE, MAE, MAPE (train)
##         RMSE       MAE     MAPE
## m3 0.3919290 0.2592570 8.690776
## m4 0.4397881 0.2894481 9.784335

En la evaluación dentro de la muestra se observa que el modelo m3 presenta mejores resultados que el m4. Sus errores son menores tanto en RMSE con 0.39 frente a 0.44 como en MAE con 0.26 frente a 0.29, además de tener un MAPE más bajo con 8.7% frente a 9.8%. Esto significa que, al ajustarse a los datos históricos de entrenamiento, el modelo m3 logra un desempeño más preciso y se adapta mejor al comportamiento de la serie que el modelo m4.

Test #MSE y MAPE (test)

Los resultados de la prueba fuera de muestra muestran que el modelo m4 tiene un mejor desempeño predictivo que el m3. El MSE de m4 con 1.00 es menor al de m3 con 1.31, y su MAPE también es más bajo con 27.2% frente a 32.5%. Esto significa que m4 comete menos error al predecir los valores de la serie en el periodo de prueba, confirmando que es más confiable para realizar pronósticos que el modelo m3.

Crit #AIC y BIC

En cuanto a los criterios de información, el modelo m3 presenta valores más bajos de AIC con 51.64 y BIC con 56.09 en comparación con el m4 de AIC = 54.63 y BIC = 58.19. Esto indica que desde el punto de vista de parsimonia y ajuste el m3 resulta más eficiente, ya que logra explicar la serie con un menor costo en complejidad. Sin embargo, estos criterios deben analizarse junto con el desempeño predictivo fuera de muestra, donde el m4 mostró mejores resultados.

Justificación

En el análisis comparativo se identificó que el modelo m3 presentó un mejor ajuste dentro de la muestra, reflejado en valores más bajos de RMSE, MAE y MAPE, así como en criterios de información AIC y BIC inferiores. Sin embargo, al evaluar el desempeño fuera de la muestra, el modelo m4 mostró menores errores de predicción (MSE y MAPE más bajos), lo que indica un mayor poder predictivo frente a datos no observados. Esta diferencia evidencia que aunque el m3 se adapta mejor a los datos históricos, el m4 resulta más confiable para la proyección, ya que logra capturar con mayor precisión la dinámica futura de la serie.

Conclusión y proyección ago 2025 - jul 2026

En conclusión, el modelo m3 mostró un mejor ajuste dentro de la muestra al presentar menores valores de RMSE, MAE y MAPE, mientras que el modelo m4 obtuvo un mejor desempeño fuera de la muestra con errores de predicción más bajos. Considerando que el objetivo principal es proyectar hacia el futuro, se determina que el modelo m4 es el más adecuado para el pronóstico final, ya que ofrece un mayor poder predictivo. Los resultados gráficos respaldan esta elección, dado que los pronósticos se mantienen en su mayoría dentro de los intervalos de confianza y siguen la dinámica de la rotación mensual, lo que los hace útiles para la planificación, teniendo en cuenta la incertidumbre natural de los meses con mayor variabilidad.

Para la proyección de los siguientes 12 meses se utiliza el modelo m4 lo cual da como resultado que:

# Pronóstico desde agosto 2025 hasta julio 2026
fc_m4 <- forecast(m4, h = 12)

# Tabla con meses, pronóstico y bandas de confianza
meses <- seq(as.Date("2025-08-01"), by = "month", length.out = 12)
proyeccion_m4 <- data.frame(
  Mes        = format(meses, "%Y-%m"),
  Pronostico = as.numeric(fc_m4$mean),
  LI_80      = as.numeric(fc_m4$lower[, "80%"]),
  LS_80      = as.numeric(fc_m4$upper[, "80%"]),
  LI_95      = as.numeric(fc_m4$lower[, "95%"]),
  LS_95      = as.numeric(fc_m4$upper[, "95%"])
)

print(proyeccion_m4, row.names = FALSE)
##      Mes Pronostico    LI_80    LS_80     LI_95    LS_95
##  2025-08   3.362302 2.312369 4.412236 1.7565674 4.968037
##  2025-09   3.247841 2.153921 4.341761 1.5748343 4.920847
##  2025-10   3.584601 2.448396 4.720806 1.8469256 5.322276
##  2025-11   2.296912 1.119940 3.473883 0.4968892 4.096935
##  2025-12   2.940429 1.724056 4.156801 1.0801471 4.800710
##  2026-01   2.710535 1.455992 3.965078 0.7918766 4.629193
##  2026-02   3.784756 2.493184 5.076328 1.8094675 5.760045
##  2026-03   3.192876 1.865308 4.520443 1.1625358 5.223215
##  2026-04   3.025518 1.662905 4.388131 0.9415806 5.109455
##  2026-05   2.646139 1.249359 4.042919 0.5099485 4.782329
##  2026-06   2.870766 1.440636 4.300896 0.6835703 5.057961
##  2026-07   3.683560 2.220839 5.146280 1.4465214 5.920598

La proyección realizada con el modelo m4 para los 12 meses posteriores a julio de 2025 muestra que la rotación laboral se mantendría en niveles moderados, con valores centrales entre 1.7% y 3.5% durante finales de 2025, y un repunte hacia el primer semestre de 2026, alcanzando picos cercanos al 3.0% en junio. Los intervalos de confianza del 80% y 95% evidencian la incertidumbre inherente al pronóstico, con rangos más amplios en los últimos meses. No obstante la mayoría de los valores proyectados se mantienen dentro de bandas coherentes con la dinámica histórica de la serie, lo que respalda la confiabilidad del modelo para apoyar la planificación de la gestión de talento en el próximo año.

# Gráfico del pronóstico
plot(fc_m4, main = "Proyección m4 (Ago-2025 a Jul-2026)",
     xlab = "Tiempo", ylab = "Rotación")

El modelo m4 proyecta la rotación laboral para los doce meses siguientes a julio de 2025 con una tendencia central que oscila entre 1,7% y 3,5%, mostrando un comportamiento estable pero con cierta variabilidad a lo largo del año. Los intervalos de confianza al 80% y 95% se amplían progresivamente, reflejando la mayor incertidumbre en horizontes largos de predicción. Aun así la dinámica observada se mantiene coherente con el patrón histórico de la serie, lo que sugiere que el modelo captura adecuadamente la estacionalidad y tendencia. En este sentido, los pronósticos son útiles para anticipar escenarios de rotación y apoyar la planificación de recursos humanos, siempre teniendo en cuenta la amplitud de las bandas de confianza como margen de riesgo.

Modelo Sarimax (Bono)

Para la creación del modelo SARIMAX se incorporó una variable exógena de festivos, en la que se consideran los meses de junio, julio y diciembre. Estos meses podrían influir en el incremento de la rotación de personal, ya que suelen concentrar mayor movimiento laboral asociado a vacaciones de mitad y fin de año, pago de primas y procesos de cierre anual.

# Se crea regresora exógena: Festivos (ejemplo: junio, julio, diciembre = 1)
freq <- frequency(serie_rotacion)  # frecuencia mensual = 12
Festivos <- ts(
  ifelse(cycle(serie_rotacion) %in% c(6, 7, 12), 1, 0),
  start = start(serie_rotacion), frequency = freq
)

# Se genea variable exógena futura para los próximos 12 meses
last_m   <- cycle(serie_rotacion)[length(serie_rotacion)]
future_m <- (last_m + 1:12) %% 12; future_m[future_m == 0] <- 12
festivosf <- ifelse(future_m %in% c(6, 7, 12), 1, 0)
# Modelo SARIMAX rotación con exógena Festivos
arima_m4x <- Arima(serie_rotacion,
                   order = c(0,1,1),
                   seasonal = list(order = c(1,1,1), period = 12),
                   xreg = Festivos)
# Pronóstico a 12 meses usando la exógena futura
p31x <- forecast(arima_m4x, level = c(95), h = 12, xreg = festivosf) ; p31x
##          Point Forecast     Lo 95    Hi 95
## Aug 2025       3.362269 1.7259613 4.998578
## Sep 2025       3.247885 1.5430309 4.952740
## Oct 2025       3.584488 1.8137387 5.355238
## Nov 2025       2.296902 0.4626232 4.131181
## Dec 2025       2.940396 1.0447158 4.836076
## Jan 2026       2.710493 0.7553289 4.665657
## Feb 2026       3.784621 1.7717535 5.797489
## Mar 2026       3.192824 1.1238605 5.261787
## Apr 2026       3.025503 0.9019259 5.149081
## May 2026       2.646213 0.4693918 4.823035
## Jun 2026       2.870767 0.6419728 5.099561
## Jul 2026       3.683642 1.4040596 5.963224

El modelo SARIMAX aplicado a la serie de rotación laboral con la variable exógena de festivos (junio, julio y diciembre) permitió proyectar los siguientes 12 meses. Los resultados muestran que, en promedio, la rotación se mantendría entre 2,6% y 3,7%, con intervalos de confianza al 95% que oscilan entre valores mínimos cercanos a 0,46 y máximos alrededor de 5,9%. Esto indica que la serie conserva cierta estabilidad en su nivel central, aunque con un rango de incertidumbre considerable en meses de mayor variabilidad. La inclusión de la regresora exógena aporta un ajuste más realista en meses con posibles picos estacionales, sugiriendo que en periodos críticos como fin de año y mitad de año la rotación podría aumentar levemente. En conclusión, los pronósticos del SARIMAX son coherentes con la dinámica histórica y constituyen una herramienta útil para anticipar escenarios de gestión de personal, siempre considerando la amplitud de las bandas de confianza como margen de riesgo.

# Gráfico
plot(p31x,
     main = "Proyección SARIMAX (Ago-2025 a Jul-2026)",
     xlab = "Tiempo",
     ylab = "Rotación")

El gráfico del modelo SARIMAX muestra la proyección de la rotación laboral para los próximos 12 meses, incorporando como regresora exógena los meses festivos. Se observa que la línea azul representa el pronóstico central, mientras que la franja sombreada refleja los intervalos de confianza al 95%. La serie histórica que se evidencia de color negro y el ajuste del modelo de color rojo evidencian que el SARIMAX logra capturar la dinámica de la rotación, permitiendo prever posibles variaciones estacionales. Los resultados sugieren que la rotación tendería a mantenerse en un rango cercano a los valores observados recientemente, aunque con mayor incertidumbre en los meses futuros, lo cual es coherente con la naturaleza de este tipo de modelos.