Introducción

En este informe, se realizará un análisis de series temporales del precio de la acción de Bancolombia (BIC), con el objetivo de extraer señales y descomponer los patrones subyacentes en los datos. El periodo de análisis abarca desde enero de 2010 hasta enero de 2025, con frecuencia mensual, lo que permitirá identificar tendencias, estacionalidad y componentes irregulares en el comportamiento del precio de la acción.

El análisis de series temporales es una herramienta fundamental para entender la dinámica de los mercados financieros. En el caso de Bancolombia, uno de los bancos más importantes de Colombia, este estudio proporcionará insights valiosos sobre cómo ha evolucionado su valoración en el mercado a lo largo del tiempo. La identificación de patrones y tendencias no solo ayuda a comprender el desempeño histórico del activo, sino que también sirve como base para la planificación económica y la toma de decisiones estratégicas, tanto para inversionistas como para los gestores del propio banco.

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_col <- read_excel("C:/Users/juand/OneDrive/Escritorio/PACCIONES COL.xlsx", 
    col_types = c("date", "numeric"))
View(data_col)

Un paso indispensable es declarar la variable como serie temporal:

# Convertir/declarar variable 1=ENER en serie de tiempo mensual
variable1_ts <- ts(data_col$BIC, start = c(2010, 1), frequency = 12)
variable1_ts
##           Jan      Feb      Mar      Apr      May      Jun      Jul      Aug
## 2010 22060.15 22159.52 22139.65 22874.99 23351.96 23610.32 26134.33 28240.97
## 2011 26849.79 26730.55 29016.06 28618.58 28916.69 29016.06 28817.32 28618.58
## 2012 27980.00 27900.00 28100.00 28900.00 27200.00 26980.00 27180.00 25800.00
## 2013 30480.00 28800.00 28800.00 30000.00 27500.00 26400.00 26800.00 26380.00
## 2014 22000.00 24100.00 26940.00 26600.00 25600.00 26540.00 28300.00 29500.00
## 2015 27460.00 25080.00 24500.00 25200.00 24600.00 26700.00 26020.00 24960.00
## 2016 22600.00 23800.00 24700.00 25500.00 23700.00 23800.00 24300.00 26800.00
## 2017 25480.00 25000.00 26260.00 27040.00 30480.00 31780.00 30600.00 33000.00
## 2018 32520.00 30160.00 30220.00 33200.00 33120.00 35320.00 33460.00 32800.00
## 2019 33340.00 35980.00 39600.00 39400.00 37400.00 38640.00 39300.00 39580.00
## 2020 42440.00 39000.00 24100.00 25320.00 25000.00 24000.00 26800.00 26000.00
## 2021 30600.00 31400.00 28750.00 27920.00 27000.00 26400.00 27100.00 31070.00
## 2022 39500.00 39040.00 43380.00 38820.00 45320.00 33540.00 35990.00 34200.00
## 2023 41990.00 35900.00 34990.00 36000.00 27800.00 31000.00 33380.00 29100.00
## 2024 32760.00 32940.00 34280.00 33800.00 35900.00 35300.00 36520.00 37980.00
## 2025 43100.00 47400.00                                                      
##           Sep      Oct      Nov      Dec
## 2010 29194.93 29413.54 28161.48 29314.17
## 2011 28121.73 28817.32 27426.14 28300.59
## 2012 26400.00 28660.00 27720.00 30000.00
## 2013 26900.00 26100.00 24300.00 23820.00
## 2014 27680.00 28200.00 27600.00 27640.00
## 2015 23720.00 23540.00 21660.00 20980.00
## 2016 26100.00 26500.00 24900.00 25220.00
## 2017 32740.00 28200.00 29000.00 29980.00
## 2018 31900.00 30280.00 32180.00 30400.00
## 2019 39500.00 41100.00 41680.00 44000.00
## 2020 24280.00 24500.00 27680.00 34980.00
## 2021 32960.00 33680.00 32370.00 34700.00
## 2022 31100.00 35500.00 40000.00 42500.00
## 2023 30810.00 29350.00 31720.00 33200.00
## 2024 36240.00 37800.00 38580.00 37600.00
## 2025

Ahora si calculamos estadísticas descriptivas

En la tabla se presentan las estadísticas descriptivas del precio de la acción de Bancolombia (BIC) durante el periodo analizado. A continuación, se interpretan los resultados:

El precio mínimo registrado fue de 20,980 pesos, mientras que el máximo alcanzó 47,400 pesos. Esta amplia diferencia refleja la volatilidad y los cambios significativos en la valoración del activo a lo largo del tiempo.

El precio promedio de la acción fue de 30,247.61 pesos. Este valor sirve como referencia central para entender el comportamiento típico del activo en el mercado.

Con un valor de 28,808.66 pesos, la mediana indica que el 50% de los precios observados estuvieron por debajo de este nivel y el otro 50% por encima. Al ser ligeramente inferior a la media, sugiere la presencia de algunos precios atípicos elevados que han influido en el promedio.

La desviación estándar de 5,530.663 pesos señala una variabilidad considerable en los precios alrededor de la media. Esto confirma que el precio de la acción ha experimentado fluctuaciones importantes durante el periodo estudiado.

Con un valor de 0.1828 (18.28%), la variabilidad relativa del precio de la acción no es excesivamente alta. Esto indica que, aunque hay oscilaciones, los precios no son extremadamente dispersos en relación con el promedio, lo que podría sugerir cierta estabilidad relativa en el comportamiento del activo.

Implicaciones: La combinación de una mediana menor que la media y una desviación estándar relativamente alta refleja la presencia de periodos con precios excepcionalmente altos que han elevado el promedio. Este patrón es común en activos financieros sujetos a ciclos económicos o eventos específicos del mercado. El coeficiente de variación moderado sugiere que, a pesar de las fluctuaciones, el precio de la acción de Bancolombia no ha sido extremadamente volátil en comparación con otros activos de mayor riesgo.

# Calcular estadísticas descriptivas básicas
descriptive_stats <- data.frame(
  Min = min(variable1_ts),
  Max = max(variable1_ts),
  Media = mean(variable1_ts),
  Mediana = median(variable1_ts),
  DesviacionEstandar = sd(variable1_ts),
  CoefVar = sd(variable1_ts) / mean(variable1_ts)
)
print(descriptive_stats)
##     Min   Max    Media  Mediana DesviacionEstandar   CoefVar
## 1 20980 47400 30247.61 28808.66           5530.663 0.1828463

Análisis de la evolución del precio de la acción de Bancolombia (BIC)

En la Figura 1 se observa la trayectoria del precio de la acción de Bancolombia desde 2010 hasta 2025, donde destacan los siguientes patrones:

  1. En la serie original del precio de acción de Bancolombia, observamos que el precio de acción máximo se da en 2025 y el valor mínimo del precio de la acción se ubicó en 2015.

  2. A partir de 2015, el precio experimenta un crecimiento significativo, superando los 30,000 pesos y alcanzando máximos históricos en años posteriores. Este comportamiento refleja períodos de fortalecimiento del sector financiero colombiano y posiblemente una mayor confianza de los inversionistas en el banco.

  3. A medida que el precio aumenta, también se intensifican las oscilaciones, con picos pronunciados y caídas abruptas. Por ejemplo:

    • Un repunte notable entre 2016 y 2018, seguido de una corrección.
    • Un máximo destacado hacia 2021-2022, coincidiendo con la recuperación postpandemia.
  4. En 2023, se evidencia una desaceleración o disminución en el precio, posiblemente vinculada a:

    • Un entorno económico menos favorable (ej. inflación alta, menor crecimiento del PIB).
    • Cambios regulatorios en el sector bancario.
    • Pérdida de impulso en la rentabilidad del banco.

Implicaciones:
La Figura 1 sugiere que, aunque el precio de Bancolombia ha mostrado una tendencia alcista a largo plazo, su trayectoria está marcada por volatilidad cíclica. Esto subraya la importancia de considerar estrategias de inversión que mitiguen riesgos ante fluctuaciones abruptas.

Gráfico inicial de la variable en niveles - Original

library(ggplot2)
library(plotly)

# Convertir la serie temporal a un vector numérico para lograr graficar con ggplot2
data_col$variable1 <- as.numeric(variable1_ts)

# Crear el gráfico
grafico_serie <- ggplot(data_col, aes(x = seq.Date(from = as.Date("2010-01-01"), by = "month", length.out = nrow(data_col)), 
                                      y = variable1)) +
  geom_line(color = "grey", linewidth = 0.4) +  # Cambiado 'size' por 'linewidth'
  geom_point(color = "black", size = 0.1) +
  ggtitle("Figura 1: Evolución del precio de la acción de Bancolombia") +
  xlab("Tiempo") +
  ylab("Precio") +
  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 el precio de la acción de Bancolombia (BIC), podríamos querer saber si su comportamiento se debe a una tendencia real del mercado financiero o a fluctuaciones estacionales propias del sector bancario.

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

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 el sector financiero.

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 el análisis financiero, especialmente en entornos donde las fluctuaciones en los precios de las acciones pueden afectar inversiones, políticas económicas y estrategias corporativas.

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

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

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

# Crear gráfico con ggplot2
p <- ggplot(stl_df_var1, aes(x = Time, y = Value, color = Component)) +
  geom_line() +
  facet_wrap(~Component, scales = "free_y", ncol = 1) + 
  theme_minimal() +
  labs(title = "Figura 2.Descomposición temporal del precio de la acción de BIC",
       x = "Tiempo",
       y = "Valor")

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

Interpretación Figura 2.Descomposición temporal

Componente estacional

La Figura 2 presenta la descomposición de la serie temporal del precio de la acción de Bancolombia en sus tres componentes principales: tendencia, estacionalidad y residuos. Esta desagregación nos permite entender mejor los distintos factores que influyen en el comportamiento del precio.

El componente estacional revela patrones recurrentes que se repiten periódicamente. Se observan fluctuaciones predecibles que ocurren en intervalos regulares, mostrando alzas y bajas características en determinados momentos del año. Estos movimientos estacionales podrían estar relacionados con ciclos financieros como la publicación de resultados trimestrales, el pago de dividendos o comportamientos del mercado asociados a épocas específicas. La relativa estabilidad en la amplitud de estas oscilaciones a lo largo del tiempo sugiere que los factores estacionales mantienen un impacto consistente sobre el precio de la acción.

La línea de tendencia muestra la evolución subyacente del precio, eliminando las variaciones estacionales y aleatorias. En el caso de Bancolombia, se aprecia una clara tendencia alcista durante la mayor parte del periodo analizado, aunque con cierta moderación en los años más recientes.

Los residuos representan la parte de la serie que no puede explicarse por los componentes de tendencia o estacionalidad. Estas variaciones irregulares incluyen reacciones a eventos específicos como cambios regulatorios, crisis económicas o noticias corporativas. Eventos como la pandemia de COVID-19 en 2020 son claramente visibles en este componente residual.

Esta descomposición tiene importantes implicaciones prácticas. Para los inversionistas, entender estos componentes permite tomar decisiones más informadas, diferenciando entre movimientos temporales y cambios estructurales. Para la gestión del banco, proporciona insights valiosos sobre cómo los diferentes factores afectan la valoración de mercado de la institución.

Después de la descomposición temporal de cada variable, se extrae la variable ajustada por estacionalidad para graficarla junto con la serie original:

Se crea la variable1 ajustada por estacionalidad

# Extraer los componentes de la descomposición
variable1_sa <- variable1_ts - stl_decomp_var1$time.series[, "seasonal"]

Ahora si, graficamos la serie original VS ajustada por estacionalidad

library(ggplot2)
library(plotly)
# Crear vector de fechas correctamente alineado con la serie
fechas_var1 <- seq.Date(from = as.Date("2010-01-01"), by = "month", length.out = length(variable1_ts))

# Gráfico mejorado con fechas en el eje X
grafico_ajustada_var1 <- ggplot() +
  geom_line(aes(x = fechas_var1, y = variable1_ts), color = "grey", size = 0.5, linetype = "solid", name = "Serie Original") +
  geom_line(aes(x = fechas_var1, y = variable1_sa), color = "black", size = 0.6, linetype = "solid", name = "Serie Ajustada") +
  ggtitle("Figura 3.BIC:Serie Original vs Serie Ajustada por Estacionalidad") +
  xlab("Tiempo") +
  ylab("Precio BIC") +
  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_var1)

La Figura 3 compara la serie original del precio de la acción de Bancolombia con su versión ajustada por estacionalidad, lo que permite una visión más clara de los movimientos fundamentales del activo. Al eliminar las fluctuaciones estacionales recurrentes, la serie ajustada revela con mayor precisión la tendencia subyacente y los cambios estructurales en la valoración de la acción.

Al observar la serie ajustada, se pueden identificar puntos de inflexión en la trayectoria del precio que podrían estar enmascarados por la estacionalidad en la serie original. Por ejemplo, se hace más evidente discernir entre una verdadera reversión de tendencia y una mera fluctuación estacional.

Para la gestión financiera de Bancolombia, este análisis proporciona herramientas más precisas para la toma de decisiones estratégicas. La serie ajustada permite: evaluar el desempeño real del precio de la acción independientemente de factores estacionales;diseñar estrategias de comunicación con inversionistas basadas en tendencias fundamentales;y mejorar la precisión de los modelos predictivos al eliminar componentes recurrentes

En el ámbito de las inversiones, esta metodología ayuda a los participantes del mercado a tomar decisiones más informadas, diferenciando claramente entre oportunidades estructurales y movimientos temporales. Los gestores de portafolios pueden utilizar esta información para optimizar sus estrategias de asignación de activos.

Ahora graficamos la serie original vs tendencia

La Figura 4 muestra la comparación entre la serie original del precio de BIC y su componente de tendencia, destacando el movimiento fundamental del activo sin las distorsiones de corto plazo. Se observa una clara tendencia alcista desde 2010 hasta 2022, seguida de una fase de estabilización.

El análisis de la tendencia pura revela dos aspectos clave: primero, el crecimiento sostenido durante más de una década refleja el fortalecimiento progresivo de Bancolombia en el sector financiero colombiano; segundo, el aplanamiento reciente de la curva sugiere un cambio en las condiciones del mercado, posiblemente asociado al entorno macroeconómico actual.

Esta perspectiva despejada de ruido estacional permite identificar mejor los puntos de inflexión en la valoración del banco. Para inversionistas, resalta la importancia de diferenciar entre movimientos temporales y cambios estructurales en sus decisiones de compra/venta. Para el banco, ofrece una visión más clara de su desempeño fundamental en el mercado.

library(ggplot2)
library(plotly)

# Convertir la serie a un vector numérico
variable1_vec <- as.numeric(variable1_ts)
tendencia_var1 <- as.numeric(stl_decomp_var1$time.series[, "trend"])

# Asegurar que 'fechas' tenga la misma longitud
fechas <- seq.Date(from = as.Date("2010-01-01"), by = "month", length.out = length(variable1_ts))

# Gráfico interactivo de la serie original vs tendencia
grafico_tendencia_var1 <- ggplot() +
  geom_line(aes(x = fechas, y = variable1_vec, color = "Serie Original"), size = 0.7, linetype = "solid") +
  geom_line(aes(x = fechas, y = tendencia_var1, color = "Tendencia"), size = 0.8, linetype = "solid") +
  scale_color_manual(values = c("Serie Original" = "grey", "Tendencia" = "black")) +
  ggtitle("Figura 4.BIC:Serie Original vs Tendencia") +
  xlab("Tiempo") +
  ylab("Precio") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Rotar etiquetas del eje X

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

Ahora calculamos la tasa de crecimiento de la serie original vs tendencia:

#Cálculo de la tasa de crecimiento anual correctamente alineada
tasa_crecimiento_var1 <- (variable1_ts[(13:length(variable1_ts))] / variable1_ts[1:(length(variable1_ts) - 12)] - 1) * 100
tasa_tendencia_var1 <- (tendencia_var1[(13:length(tendencia_var1))] / tendencia_var1[1:(length(tendencia_var1) - 12)] - 1) * 100

# Crear vector de fechas corregido, es decir que inicie desde enero 2013
fechas_corregidas_var1 <- seq(from = as.Date("2013-01-01"), by = "month", length.out = length(tasa_crecimiento_var1))

# Verificar longitudes
print(length(fechas_corregidas_var1))
## [1] 170
print(length(tasa_crecimiento_var1))
## [1] 170
print(length(tasa_tendencia_var1))
## [1] 170
library(ggplot2)
library(plotly)

# Gráfico de la tasa de crecimiento anual variable 1
grafico_crecimiento_var1 <- ggplot() +
  geom_line(aes(x = fechas_corregidas_var1, y = tasa_crecimiento_var1), color = "grey", size = 0.7) +
  geom_line(aes(x = fechas_corregidas_var1, y = tasa_tendencia_var1), color = "black", size = 0.8, linetype = "dashed") +
  ggtitle("Figura 5.BIC: Tasa de crecimiento anual % de la serie Original y la tendencia") +
  xlab("Tiempo") +
  ylab("% de Crecimiento Anual") +
  theme_minimal()

# Convertir a gráfico interactivo
ggplotly(grafico_crecimiento_var1)

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

La Figura 5 compara la tasa de crecimiento anual del precio original de BIC con su componente tendencial, revelando importantes insights:

La serie original muestra alta variabilidad interanual, con fluctuaciones entre +50% y -25% aproximadamente

La tendencia suaviza estos movimientos, revelando ciclos económicos más prolongados

Picos de crecimiento previos a 2020 reflejan bonanza del sector financiero

La abrupta caída en 2020 (-25%) coincide con el impacto inicial de la pandemia

La rápida recuperación post-2020 demuestra la resiliencia del banco

El crecimiento se modera después de 2022