Se cargó la base de datos de Café Borinquen. A continuación se le hacen unos ajustes, como cambiar el orden de las fechas.

datos <- read.csv("Cafe_Borinquen.csv", header= T)

library(tidyverse)
datos <- datos %>% 
  mutate(fecha = as.Date(fecha,format="%m/%d/%Y")) 
str(datos)
## 'data.frame':    132 obs. of  2 variables:
##  $ fecha : Date, format: "2015-01-01" "2015-02-01" ...
##  $ ventas: num  236 250 253 242 246 ...

Se decide el formato de la base de datos; también se analiza el inicio, fin y frecuencia.

#Formato de serie de tiempo
attach(datos)
datos.ts <- ts(ventas, start = c(2015,1), frequency = 12)
summary(datos)
##      fecha                ventas     
##  Min.   :2015-01-01   Min.   :236.3  
##  1st Qu.:2017-09-23   1st Qu.:283.3  
##  Median :2020-06-16   Median :323.1  
##  Mean   :2020-06-16   Mean   :325.7  
##  3rd Qu.:2023-03-08   3rd Qu.:366.2  
##  Max.   :2025-12-01   Max.   :420.0
# Inicio, fin y frecuencia
start(datos.ts)
## [1] 2015    1
end(datos.ts)
## [1] 2025   12
frequency(datos.ts)
## [1] 12

La serie contiene 132 observaciones mensuales, desde el 2015 hasta el 2025. Con la información disponible en la base de datos podemos decir que la venta mínima mensual es de 236.3 K, mientras que la venta máxima mensual es de 420.0 K. En promedio, Café Borinquen hace ventas mensuales de 325.7 K; con la base de datos podemos observar que las ventas han tenido un aumento, un buen indicador de que se puede dar la apertura de nuevas sucursales. Tenemos una frecuencia de 12, lo que impicla que las ventas se registran mensualmente. Cabe destacar que un café suele tener temporadas pico que concuerdan con fechas festivas, como verano (Junio y Julio). En resumen, tenemos una empresa que ha podido aumentar sus ventas significativamente y tiene un aumento estable.

1. Exploración visual de la base de datos:

Comportamiento:

library(plotly)
library(dplyr)

# Gráfica interactiva con plotly
fig <- plot_ly(datos, x = ~fecha, y = ~ventas, type = 'scatter', mode = 'lines',
               line = list(color = 'steelblue', width = 2)) %>%
  layout(xaxis = list(title = "Año"),yaxis = list(title = "Ventas (%)"),
    hovermode = "x unified")

fig

Interpretación:

Esta gráfica interactiva muestra cómo se comportaron las ventas de Café Borinquen desde Enero del 2015 hasta Diciembre del 2025. Podemos identificar su tendencia, estacionalidad e irregularidades. Claramente tiene una tendencia positiva, ya que sus ventas han aumentado de manera significativa a lo largo del tiempo. Tiene tambien una estacionalidad, o comportamiento, que se repite todos los años de una manera bastante pronunciada. Las ventas tienden a ser más altas en los meses de Junio y Julio, mientras que las ventas tienden a caer siempre en los meses de Septiembre a Diciembre, especialmente en Noviembre y Diciembre.

Descomposición:

descomp <- decompose(datos.ts)
plot(descomp)

Interpretación:

Estacionalidad:

monthplot(datos.ts,
         ylab = "Ventas (%)",
         xlab = "Mes")

Interpretación:

Cuando observamos esta tabla, los meses de Junio y Julio son los que tienen los valores más altos; Mayo y Agosto se acercan a Junio y Julio, y todos los demás meses están entre los mismos valores. Esto nos deja saber que los meses con ventas mayores son los de Junio y Julio, seguido de Mayo y Agosto. Otro dato que es interesante, es que los meses con ventas menores no se alejan tanto de los meses con ventas mayores. Esto se puede interpretar como algo positivo, ya que es un café con ventas mensuales relativamente estables. Como fue discutido en clase, es típico de series de tiempo relacionadas al consumo.

Autocorrelaciones

Autocorrelación ACF:

# ACF
acf(datos.ts, lag.max = 36, main = "")

Interpretación:

La autocorrelación es muy alta en los primeros rezagos y disminuye de forma gradual conforme aumenta la distancia temporal. Hay una fuerte persistencia temporal en esta serie de tiempo, y el valor de las ventas de un mes está muy relacionado al del siguiente mes. La ACF mide cómo los valores presentes están relacionados a los pasados. El hecho de que exista una disminución gradual y no rápida, es común en series no estacionarias con tendencia. Por último, se observan las barras por encima del intervalo de confianza, lo cual puede indicar a que no se comportan como ruido blanco.

Autocorrelación PACF:

# PACF
pacf(datos.ts, lag.max = 36, main = "")

Interpretación:

Esta gráfica nos muestra la correlación de la serie luego de eliminar la influencia de rezagos intermedios. Tenemos el primer rezago muy sobresaliente,el cual nos deja saber que hay una fuerte relación. Los demás rezagos son pequeños y dentro de las bandas; la mayoría está dentro del intervalo de confianza. Estas dos gráficas nos han sugerido que podemos estar trabajando con una serie de tiempo no estacionaria y que contiene una tendencia.

2. Selección y ajuste del modelo:

Transformación de los datos

# Se transforman los datos
log.datos.ts  <- log(datos.ts)
dlog.datos.ts <- diff(log.datos.ts)

plot.ts(dlog.datos.ts)

Interpretación:

En esta gráfica la tendencia fue eliminada, por eso en el eje de y tenemos el 0 en el centro y no hay inclinación ascendente ni descendente. Seguimos observando patrones de estacionalidad, y la gráfica muestra picos y caídas que se repiten cada año. Tenemos una serie más ruidosa con estructura temporal, lo cual nos puede guiar a la posibilidad de que el modelo ARIMA es el indicado para esta serie de tiempo.

Se evaluan los modelos AR, MA, ARMA, y ARIMA con el AIC.

datos.ar   <- arima(datos.ts, order = c(1, 0, 0))
datos.ma   <- arima(datos.ts, order = c(0, 0, 1))
datos.arma <- arima(datos.ts, order = c(1, 0, 1))
datos.arima <- arima(datos.ts, order = c(1, 1, 1))
AIC(datos.ma,datos.ar,datos.arma, datos.arima)
##             df      AIC
## datos.ma     3 1262.173
## datos.ar     3 1023.526
## datos.arma   4 1016.218
## datos.arima  3 1004.351

Interpretación:

Para seleccionar uno de los modelos evaluados, utilizamos el AIC para comparar. Buscamos el que tenga el AIC más bajo, y en este caso es el modelo ARIMA. El Ma es el peor de todos, ya que tiene el AIC más alto. Le sigue el AR, ya que tiene un AIC menor que el MA. Aunque el ARMA y el ARIMA son los mejores, se escoge el ARIMA con el AIC más bajo.

Prueba de estacionariedad:

library(tseries)
adf.test(datos.ts)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  datos.ts
## Dickey-Fuller = -8.3348, Lag order = 5, p-value = 0.01
## alternative hypothesis: stationary

Interpretación:

El Augmented Dickey-Fuller Test evalua si la serie de tiempo es estacionaria o no. Tenemos la hipótesis nula (H0) = la serie no es estacionaria, y la H1 = la serie es estacionaria. En este caso tenemos un resultado negativo; esto nos indica que se debe rechazar la hipótesis nula y concluimos que la serie es estacionaria.

Mejor modelo ARIMA:

library(forecast)
mod_arima <- auto.arima(datos.ts,stepwise = T, approximation = T)
mod_arima
## Series: datos.ts 
## ARIMA(2,0,1)(1,1,1)[12] with drift 
## 
## Coefficients:
##          ar1     ar2     ma1     sar1     sma1   drift
##       0.4390  0.0897  0.2443  -0.2147  -0.4845  1.2623
## s.e.  0.9802  0.6383  0.9668   0.3414   0.3241  0.0512
## 
## sigma^2 = 28.71:  log likelihood = -371.96
## AIC=757.93   AICc=758.93   BIC=777.44

Interpretación:

Entre los cuatro modelos, el mejor es el ARIMA, ya que tiene el valor más pequeño. Luego de considerar el mejor modelo, podemos decir que existe una dependencia moderada con valores anteriores y una tendencia claramente positiva.

3. Pronósticos:

prediccion <- forecast(mod_arima, h=12) 

autoplot(prediccion)

Interpretación:

La gráfica muestra un pronóstico para el año siguiente que incluye intervalos de confianza. Podemos decir que no se pronostica una caida o subida muy drástica, las ventas van a seguir la tendencia y estacionalidad como de costumbre. Van a tener los meses en los que hacen más ventas en verano y los meses en los que las ventas no están igual de altas. Sin embargo, se puede notar que vana a aumentar de manera general y la tendencia ascendente va a continuar para la empresa. Tenemos los intervalos de confianza, las sombras azules. Al no tener cambios muy significativos, podemos asumir que el modelo captó bien la dinámica del pasado y no se esperan comportamientos fuera de lo normal para las ventas mensuales y no es una empresa volátil o riesgosa para invertir en ella.