Planificación Estratégica de Ventas en Café Borinquen:
La cadena puertorriqueña Café Borinquen, dedicada a la venta de café artesanal y repostería local, ha registrado sus ventas mensuales totales (en miles de dólares) entre enero de 2015 y diciembre de 2025. Durante los últimos años, la empresa ha experimentado una expansión significativa; sin embargo, también ha enfrentado fluctuaciones notables en la demanda, especialmente durante 2024, donde se observaron caídas inesperadas seguidas de una recuperación parcial.
Ante los planes de crecimiento para 2026 y la posibilidad de abrir nuevas sucursales, la gerencia necesita contar con estimaciones confiables que permitan:
Con este propósito, solicitan un análisis estadístico formal de series de tiempo que permita comprender el comportamiento histórico de la demanda, identificar patrones relevantes y generar pronósticos para el año 2026, con el fin de fundamentar decisiones estratégicas de inversión. Los resultados del análisis serán considerados en la próxima reunión ejecutiva, por lo que se espera un informe claro, preciso y sustentado en evidencia.
El trabajo debe incluir tanto el código en R utilizado como las salidas obtenidas y sus correspondientes interpretaciones. Desarrolle los siguientes puntos:
library(readr)
library(timeSeries)
library(tseries)
library(plotly)
library(dplyr)
library(forecast)
#Cargar los datos
Cafe_Borinquen <- read_csv("Cafe_Borinquen.csv")
#Convertir a fecha
datos_cafe_borinquen <- Cafe_Borinquen %>%
mutate(fecha = as.Date(fecha, format="%m/%d/%Y"))
str(datos_cafe_borinquen)
## tibble [132 × 2] (S3: tbl_df/tbl/data.frame)
## $ fecha : Date[1:132], format: "2015-01-01" "2015-02-01" ...
## $ ventas: num [1:132] 236 250 253 242 246 ...
#Crear serie de tiempo mensual
Serie_tiempo1 <- ts(datos_cafe_borinquen$ventas, start = c(2015,1), frequency = 12)
summary(Serie_tiempo1)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 236.3 283.3 323.1 325.7 366.2 420.0
Interpretación: La base de datos contiene 132 observaciones mensuales entre 2015 y 2025, con dos variables: la fecha y las ventas. Las ventas presentan valores que van desde un mínimo de 236.3 hasta un máximo de 420.0, con una media de 325.7.
A. El comportamiento general de la serie de tiempo.
plot.ts(Serie_tiempo1,
main = "Ventas mensuales de Café Borinquen (2015–2025)",
ylab = "Ventas (miles de dólares)",
xlab = "Año")
Interpretación: La serie muestra una tendencia creciente en las ventas mensuales de Café Borinquen a lo largo del periodo 2015–2025. También se observa una estacionalidad marcada, con picos de ventas que se repiten anualmente, seguidos por descensos regulares. Sin embargo, durante el año 2025 ocurre un patrón atípico: el pico estacional de ese año no supera el máximo alcanzado en 2024, rompiendo el comportamiento observado en años anteriores,
B. Su descomposición en tendencia, estacionalidad y residuales.
descomp <- decompose(Serie_tiempo1)
plot(descomp)
Interpretación: 1. Observed: Muestra la serie original, donde se ve claramente que las ventas tienen una tendencia al alza y siguen un patrón que se repite cada año. 2. Trend: La tendencia es positiva durante casi todo el periodo, aumentando de manera constante. Solo al final se nota que el crecimiento se estabiliza un poco. 3. Seasonal: La estacionalidad se repite todos los años con la misma forma, mostrando meses de ventas altas y meses de ventas bajas de manera regular. 4. Random: Representa las variaciones que no siguen ningún patrón.
C. La estacionalidad y la autocorrelación (ACF y PACF).
monthplot(Serie_tiempo1,xlab = "Mes", ylab = "Ventas" )
Interpretación: El gráfico muestra un patrón estacional estable donde las ventas alcanzan sus valores más altos en los meses de junio y julio, mientras que disminuyen en diciembre y enero. Este comportamiento se repite de forma consistente cada año, lo que confirma que la serie presenta una estacionalidad clara y predecible.
par(mfrow=c(1,2))
acf(Serie_tiempo1, main="ACF")
pacf(Serie_tiempo1, main="PACF")
Interpretación: En el ACF, la autocorrelación comienza con valores muy altos y disminuye de manera lenta conforme aumentan los lag. Por otro lado, el PACF muestra un valor destacado únicamente en el primer lag, mientras que los demás permanecen dentro del intervalo de confianza. En conjunto, ambas gráficas confirman tanto tendencia como estacionalidad, y que la serie probablemente requiera algún tipo de diferenciación para lograr estacionariedad.
A. Realice la prueba de estacionariedad.
H₀: la serie NO es estacionaria (tiene raíz unitaria.
H₁: la serie sí es estacionaria.
# Prueba de estacionariedad
adf.test(Serie_tiempo1)
## Warning in adf.test(Serie_tiempo1): p-value smaller than printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: Serie_tiempo1
## Dickey-Fuller = -8.3348, Lag order = 5, p-value = 0.01
## alternative hypothesis: stationary
Interpretación: El estadístico Dickey–Fuller obtenido fue –8.3348 y el p-value reportado es 0.01, lo cual es menor al nivel de significancia de 0.05. Por lo tanto, se rechaza la hipótesis nula de no estacionariedad y se concluye que la serie es estacionaria según la prueba ADF. El mensaje “p-value smaller than printed p-value” indica que el p-value verdadero es aún menor a 0.01, reforzando esta conclusión.
Aunque la prueba ADF indica estacionariedad, la gráfica, la ACF y el comportamiento general de la serie muestran tendencia y estacionalidad evidentes. Este tipo de discrepancia es común en series largas con estacionalidad fuerte, donde el ADF puede rechazar la raíz unitaria aun cuando la estructura temporal no es estacionaria.
B. Ajuste los modelos posibles y compare el AIC para seleccionar el modelo final.
# Modelos AR, MA y ARMA sobre la serie de ventas
m_ma1 <- arima(Serie_tiempo1, order = c(0, 0, 1)) # MA(1)
m_ar1 <- arima(Serie_tiempo1, order = c(1, 0, 0)) # AR(1)
m_ar2 <- arima(Serie_tiempo1, order = c(2, 0, 0)) # AR(2)
m_ar3 <- arima(Serie_tiempo1, order = c(3, 0, 0)) # AR(3)
m_arma <- arima(Serie_tiempo1, order = c(1, 0, 1)) # ARMA(1,1)
# Comparación de AIC
AIC(m_ma1, m_ar1, m_ar2, m_ar3, m_arma)
## df AIC
## m_ma1 3 1262.173
## m_ar1 3 1023.526
## m_ar2 4 1016.001
## m_ar3 5 1017.604
## m_arma 4 1016.218
Interpretación: Con estos resultados podemos identificar al AR(2) como el mejor y el modelo final, porque tiene el AIC más bajo (1016.001). Esto significa que AR(2) captura mejor la estructura autoregresiva de la serie, no necesita componente MA, y es más parsimonioso que el ARMA(1,1), aun siendo similar en AIC. Este resultado indica que las ventas mensuales dependen significativamente de los valores observados en los dos meses previos.
A. Realice el pronóstico para enero–diciembre 2026 usando el modelo seleccionado.
# Pronóstico de 12 meses con el modelo AR(2) seleccionado
pronostico_2026 <- forecast(m_ar2, h = 12)
pronostico_2026
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## Jan 2026 394.9446 381.0101 408.8792 373.6335 416.2557
## Feb 2026 392.7884 370.5596 415.0172 358.7924 426.7845
## Mar 2026 390.4974 362.0188 418.9761 346.9431 434.0517
## Apr 2026 388.2261 354.8014 421.6509 337.1073 439.3449
## May 2026 386.0153 348.5198 423.5109 328.6708 443.3598
## Jun 2026 383.8745 342.9322 424.8168 321.2586 446.4903
## Jul 2026 381.8044 337.8845 425.7242 314.6348 448.9740
## Aug 2026 379.8036 333.2742 426.3329 308.6430 450.9641
## Sep 2026 377.8699 329.0291 426.7107 303.1744 452.5654
## Oct 2026 376.0012 325.0965 426.9060 298.1492 453.8533
## Nov 2026 374.1954 321.4360 426.9548 293.5069 454.8839
## Dec 2026 372.4502 318.0159 426.8846 289.2000 455.7005
B. Presente una visualización que incluya la serie histórica, los pronósticos y los intervalos de confianza.
autoplot(pronostico_2026) +
ggtitle("Pronóstico de ventas mensuales para 2026 usando AR(2)") +
xlab("Año") +
ylab("Ventas (miles de dólares)")
Interpretación: El pronóstico obtenido con el modelo AR(2) muestra una disminución en las ventas estimadas para 2026, influenciada por el comportamiento descendente de los últimos meses de 2025. Al no incluir componentes de tendencia ni estacionalidad, el modelo proyecta valores basados únicamente en la dinámica reciente. Los intervalos de confianza se amplían a lo largo del año, reflejando la incertidumbre creciente en las predicciones.