Introducción

En este informe, se realizará un análisis de series temporales: *1) Extracción de señales o descomposición de series temporales y 2) Pronóstico del número de microempresas nuevas en Cali. El periodo de análisis es desde el primer mes del 2010 (1M2010) y el segundo mes del 2025 (2M2025).

El análisis de series temporales permite identificar patrones subyacentes en los datos, como tendencias, estacionalidad y componentes irregulares, lo que facilita una mejor comprensión del comportamiento de la variable a analizar. Para ello, se emplearán técnicas estadísticas o métodos de descomposición y el Modelo ARIMA con el fin de extraer información clave que pueda contribuir a la toma de decisiones estratégicas.

A lo largo del informe, se presentarán los resultados obtenidos y se discutirán sus implicaciones en el contexto empresarial de Cali.

Puntualmente, el análisis del valor de las acciones del Banco de Occidente es clave para la toma de decisiones de inversion en la compañia. Identificar patrones y tendencias en estos datos ayuda a mejorar las condiciones para el inversionista en pro de fortalecer su portafolio.

Análisis exploratorio de la variable

#Cargar librerías necesarias
library(readxl)  # Para leer archivos Excel
library(tseries)  # Para pruebas de estacionariedad
library(forecast)  # Para modelado ARIMA y pronósticos
library(ggplot2)  # Para visualización de datos
library(plotly)  # Para gráficos interactivos
library(timetk) 

Cargar base de datos

library(readxl)
data_acc <- read_excel("PACCIONESCOL.xlsx", 
    col_types = c("date", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "numeric"))
# Ver las primeras filas de los datos
class(data_acc)  
## [1] "tbl_df"     "tbl"        "data.frame"
colnames(data_acc)  
##  [1] "...1" "BIC"  "CHO"  "VAL"  "BOG"  "OCC"  "CCB"  "CLI"  "EEP"  "ISA"
head(data_acc)
…1 BIC CHO VAL BOG OCC CCB CLI EEP ISA
2010-01-01 22060.15 20069.54 16337.12 33792.66 28500 6072.93 5200 9164.84 12680
2010-02-01 22159.52 20387.47 18928.03 37470.10 29000 6083.28 5240 9164.84 12880
2010-03-01 22139.65 21281.67 20588.97 37072.54 30000 6197.08 5900 9400.00 12800
2010-04-01 22874.99 21679.08 22240.26 39557.29 30600 5959.13 6180 9260.00 12980
2010-05-01 23351.96 20824.63 21585.69 38563.39 30600 5814.29 6060 9260.00 12720
2010-06-01 23610.32 20566.30 21109.65 38265.22 30600 5897.06 6240 9000.00 12800

Un paso indispensable es declarar la variable como serie temporal:

# Convertir/declarar el número de microempresas en serie de tiempo trimestral
micro_ts <- ts(data_acc$OCC, start = c(2010, 1), frequency = 12)
micro_ts
##        Jan   Feb   Mar   Apr   May   Jun   Jul   Aug   Sep   Oct   Nov   Dec
## 2010 28500 29000 30000 30600 30600 30600 31500 34060 36000 36000 36000 37660
## 2011 37100 34040 34980 34300 33500 33500 33060 32000 30000 30000 29500 30000
## 2012 28500 30300 30300 30500 32000 30020 29520 30940 31000 31500 31500 32000
## 2013 32520 33960 33700 33940 39600 40400 40000 40040 40200 40000 39980 40100
## 2014 40100 39800 39500 39000 40000 40000 40000 40500 40800 41120 42480 42000
## 2015 40020 41000 39000 37760 36500 35380 35300 32000 36500 38000 39000 38200
## 2016 37000 36100 36000 36000 36000 36500 36500 36500 36500 36420 36520 37000
## 2017 36800 37800 38500 38000 38000 37000 38500 38500 38500 38520 38520 39000
## 2018 38880 39000 39000 38500 39300 39500 40000 40020 39500 39000 39000 38000
## 2019 38100 38300 38500 38620 37500 36000 37380 37000 38000 38000 38000 38000
## 2020 38000 40000 36500 36500 36500 34720 34500 34500 34000 34000 34000 34000
## 2021 33000 33500 33500 34000 33900 33900 33900 33900 29000 28000 27500 27500
## 2022 28200 28500 29200 24000 24000 24000 24000 24000 24000 24000 24000 24000
## 2023 19000 15000 15000 15000 14000 14000 14000 12000 12000 12000 12000 12000
## 2024 13960 12380 12380 13980 11840 13660 13200 13200 13200 13200 18000 18000
## 2025 17000 17160

Ahora si calculamos estadísticas descriptivas

En la tabla siguiente se observa lo siguiente:

*En promedio, el valor promedio de la acción mensual es de 32050 pesos, con un minimo de 11840 por accion y un maximo valor de 42480.

*La mediana indica que la mitad de los meses las acciones tuviernos un valor de la accion inferior a 34610 y la otra mitad superior a este valor.Como está un poco por encima de la media, sugiere que hay algunos valores bajos que están elevando el promedio.

*Existe una variabilidad notable en la cantidad de microempresas nuevas por trimestre. Un valor de 1052 indica que los datos fluctúan bastante alrededor del promedio.

*la variabilidad relativa de la serie no es excesivamente alta. Un 26.49% implica que, aunque hay oscilaciones, los datos no son extremadamente dispersos respecto al promedio.

# Calcular estadísticas descriptivas básicas
descriptive_stats <- data.frame(
  Min = min(micro_ts),
  Max = max(micro_ts),
  Media = mean(micro_ts),
  Mediana = median(micro_ts),
  DesviacionEstandar = sd(micro_ts),
  CoefVar = sd(micro_ts) / mean(micro_ts)
)
print(descriptive_stats)
##     Min   Max    Media Mediana DesviacionEstandar   CoefVar
## 1 11840 42480 32058.46   34610           8493.875 0.2649495

Exploramos el comportamiento o evolución de la variable:

En la Figura 1. destaca lo siguiente:

*A partir de 2019 el valor de la accion disminuye significativamente. Sin embargo,desde el 2010 hasta el 2021 valor de la accion se mantuvo cercano o superior a 30.000, con algunos altibajos dentro de este periodo.

# Gráfico interactivo de la serie original
grafico_serie <- ggplot(data_acc, aes(x = seq.Date(from = as.Date("2010-01-01"), by = "month", length.out = nrow(data_acc)), y = micro_ts)) +
  geom_line(color = "grey", size = 0.4) +
  geom_point(color = "black", size = 0.1) +
  ggtitle("Figura 1.Evolucion de las acciones de ISA") +
  xlab("Tiempo") +
  ylab("Valor de la Accion") +
  theme_minimal()
ggplotly(grafico_serie)

Extracción de señales

*Muchas series de tiempo son una combinación de varias influencias. Es por eso que, separar la tendencia, la estacionalidad y los componentes aleatorios permite entender mejor qué está impulsando los cambios en la serie.

Si analizamos del precio de la accion de del Banco de Occidente, podríamos querer saber si el crecimiento se debe a una tendencia real o a fluctuaciones estacionales.

*Los modelos de pronóstico funcionan mejor cuando las señales subyacentes están bien definidas. Por ejemplo, si eliminamos la estacionalidad de una serie financiera, los modelos predictivos pueden enfocarse en la tendencia real y reducir errores.

*Detectar cambios inesperados en la serie es más fácil cuando se eliminan componentes predecibles. Ejemplo: Si hay una caída abrupta en el precio de la acción, podemos verificar si es una anomalía (ruido) o un cambio estructural en la economía.

En conclusión, la descomposición de series de tiempo permite comprender mejor los datos, mejorar predicciones y tomar decisiones más estratégicas. Es una herramienta clave en la analítica de negocios, especialmente en entornos donde las fluctuaciones en los datos pueden afectar inversiones, políticas económicas y estrategias empresariales.

# Cargar librerías necesarias
library(ggplot2)
library(plotly)

# Descomposición de la serie temporal
stl_decomp <- stl(micro_ts, s.window = "periodic")

# Convertir la descomposición a un data frame para graficar con ggplot2
stl_df <- data.frame(
  Time = rep(time(micro_ts), 12),  # Tiempo repetido para cada componente
  Value = c(stl_decomp$time.series[, "seasonal"], 
            stl_decomp$time.series[, "trend"], 
            stl_decomp$time.series[, "remainder"], 
            micro_ts),
  Component = rep(c("Estacional", "Tendencia", "Residuo", "Serie Original"), each = length(micro_ts))
)

# Crear gráfico con ggplot2
p <- ggplot(stl_df, aes(x = Time, y = Value, color = Component)) +
  geom_line() +
  facet_wrap(~Component, scales = "free_y", ncol = 1) + 
  theme_minimal() +
  labs(title = "Figura A. Descomposicion del valor de la accion de ISA",
       x = "Tiempo",
       y = "Valor")

# Convertir a gráfico interactivo con plotly
ggplotly(p)

Interpretación Figura A.Descomposición temporal

Componente estacional

Muestra patrones recurrentes a lo largo del tiempo. La interpretación de este componente es clave para entender fluctuaciones predecibles dentro de cada período analizado.

*Las caidas o incrementos del componente estacional ocurren a intervalos similares (segundo trimestre y cuarto trimestre de cada año), lo que indica que el comportamiento estacional se mantiene a lo largo del tiempo.

*Así, el componente estacional sugiere que hay fluctuaciones repetitivas en el valor de la acción. Comprender estos patrones permite ajustar estrategias para inversionistas a costo plazo, dentro de los periodos de una tendencia alcista, dado que la estacionalidad no afecta de forma sustancial a la tendencia de la acción. Sin embargo el inversionista de entender los altos riesgos de las inversiones a corto plazo y la afectación que supone el componente especulativo en el valor de la acción.

Graficamos serie original VS ajustada por estacionalidad

En la Figura 2, se observa que en la serie ajustada por estacionalidad se pueden apreciar con mayor precisión cambios estructurales, facilitando el análisis sin la interferencia de variaciones temporales recurrentes.

Estos análisis permiten diseñar estrategias de apoyo al inversionista a mediano y largo plazo basadas en datos reales, sin sesgos estacionales. Además, proporciona información clave para la toma de decisiones estratégicas de inversion de acciones en el Banco y, mejora la precisión de las estimaciones futuras al eliminar patrones estacionales que podrían distorsionar los análisis.

En conclusión, la descomposición de la serie temporal no solo facilita la identificación de tendencias de largo plazo, sino que también permite tomar decisiones más informadas, anticipando oportunidades y riesgos de las inversiones de acciones en el Banco.

# Extraer los componentes de la descomposición
micro_sa <- micro_ts - stl_decomp$time.series[, "seasonal"]
# Crear vector de fechas correctamente alineado con la serie
fechas <- seq.Date(from = as.Date("2010-01-01"), by = "month", length.out = length(micro_ts))

# Gráfico mejorado con fechas en el eje X
grafico_ajustada <- ggplot() +
  geom_line(aes(x = fechas, y = micro_ts), color = "grey", size = 0.5, linetype = "solid", name = "Serie Original") +
  geom_line(aes(x = fechas, y = micro_sa), color = "black", size = 0.6, linetype = "solid", name = "Serie Ajustada") +
  ggtitle("Figura 2. Acciones ISA:Serie Original vs Serie Ajustada por Estacionalidad") +
  xlab("Tiempo") +
  ylab("Valor de la accion") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Rotar etiquetas para mejor visualización

# Convertir a gráfico interactivo
ggplotly(grafico_ajustada)

Ahora graficamos serie original vs tendencia

La serie original de acciones del banco de occidente contiene variaciones estacionales y aleatorias que pueden dificultar la identificación de patrones reales. La extracción de la tendencia permite centrarse en los cambios estructurales de la serie.

Analizar la tendencia ayuda a prever escenarios futuros y anticipar posibles crisis o oportunidades para la inversion en acciones del Banco.

*Después de una furte caida en los ultimo 5 años en el valor de la accion, esta ha comenzado lo que parece un periodo de recuperación desde el 2024 hasta el 2025, obteniedo un aumento en el valor de la acción, en la grafica se observa que el valor de la accion tiene una resiliencia importante a los cambios estructurales respecto a su tendencia.

# Extraer la tendencia de la descomposición STL
tendencia <- stl_decomp$time.series[, "trend"]

# Gráfico interactivo de la serie original vs tendencia
grafico_tendencia <- ggplot() +
  geom_line(aes(x = fechas, y = micro_ts), color = "grey", size = 0.7, linetype = "solid", name = "Serie Original") +
  geom_line(aes(x = fechas, y = tendencia), color = "black", size = 0.8, linetype = "solid", name = "Tendencia") +
  ggtitle("Figura 3. Accion:Serie Original vs Tendencia") +
  xlab("Tiempo") +
  ylab("Valor de la accion") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Rotar etiquetas del eje X para mejor visualización

# Convertir a gráfico interactivo
ggplotly(grafico_tendencia)
#Cálculo de la tasa de crecimiento anual correctamente alineada
tasa_crecimiento <- (micro_ts[(13:length(micro_ts))] / micro_ts[1:(length(micro_ts) - 12)] - 1) * 100
tasa_tendencia <- (tendencia[(13:length(tendencia))] / tendencia[1:(length(tendencia) - 12)] - 1) * 100

# Crear vector de fechas corregido
fechas_corregidas <- seq(from = as.Date("2010-01-01"), by = "month", length.out = length(tasa_crecimiento))

# Verificar longitudes
print(length(fechas_corregidas))
## [1] 170
print(length(tasa_crecimiento))
## [1] 170
print(length(tasa_tendencia))
## [1] 170
# Gráfico de la tasa de crecimiento anual
grafico_crecimiento <- ggplot() +
  geom_line(aes(x = fechas_corregidas, y = tasa_crecimiento), color = "grey", size = 0.7) +
  geom_line(aes(x = fechas_corregidas, y = tasa_tendencia), color = "black", size = 0.8, linetype = "dashed") +
  ggtitle("Figura 4. Accion: Tasa de crecimiento anual % de la serie Original vs Tendencia") +
  xlab("Tiempo") +
  ylab("% de Crecimiento Anual") +
  theme_minimal()

# Convertir a gráfico interactivo
ggplotly(grafico_crecimiento)

Interpretación Figura 3. Tendencia VS original: crecimiento anual%

Mientras que la serie original muestra mucha variabilidad, la tendencia permite identificar patrones más claros y estructurales en el crecimiento del Valor de las acciones del Banco de occidente.

Analizar la tasa de crecimiento anual ayuda a detectar cambios en el entorno finaciero que afectan al Banco. Se pueden prever crisis o períodos de auge y prepararse para ellos.

Permite evaluar si el banco sigue una dinámica similar a la nacional o global.

*A lo largo del tiempo, la tasa de crecimiento ha sido poco volátil, alternando con periodos superiores al año con tendencias alcistas o bajistas. Durante 3 periodos se han tenido contracciones en el valor de la accion. Cabe resaltal el ultimo periodo de contraccion el cual permanecio durante casi 11 años. durante el periodo de evaluación tuvo 3 periodos de crecimiento, siendo el mas importante el periodo actual.