Sector Económico: Construcción y Actividades Inmobiliarias El sector de la construcción es uno de los principales motores de la economía colombiana, no solo por su contribución al Producto Interno Bruto (PIB), sino por su capacidad para generar empleo y dinamizar otros 36 sectores productivos a través de encadenamientos hacia atrás (insumos como cemento y acero) y hacia adelante (servicios financieros e inmobiliarios). Este sector se caracteriza por ser altamente procíclico, lo que significa que su desempeño está íntimamente ligado al crecimiento económico general y a la confianza de los consumidores.
Constructora Jaramillo Mora S.A. es una de las compañías más emblemáticas y sólidas en el sector de la construcción y el desarrollo inmobiliario en el suroccidente colombiano. Con más de 50 años de trayectoria, la empresa ha transformado el paisaje urbanístico de Cali y su área de influencia, especializándose en proyectos residenciales que van desde la Vivienda de Interés Social (VIS) hasta complejos habitacionales de lujo. Su capacidad de adaptación a los ciclos económicos y su enfoque en la innovación constructiva la han posicionado como un referente de calidad y cumplimiento en el Valle del Cauca.
El análisis del entorno macroeconómico y sectorial es vital para una constructora, ya que su operación es altamente sensible a las fluctuaciones en las tasas de interés, la disponibilidad de insumos y la confianza de los hogares. En este documento, realizaremos un análisis técnico basado en la extracción de señales de cinco variables económicas clave entre 2012 y 2024, utilizando el software estadístico R. El objetivo principal es desglosar las series de tiempo en sus componentes de tendencia, estacionalidad y residuo mediante la técnica STL (Seasonal and Trend decomposition using Loess).
A través de este análisis, se busca identificar la “dirección real” del sector en la región, eliminando el ruido estacional y los choques de corto plazo. Este enfoque proporcionará una visión estratégica sobre la dinámica del mercado inmobiliario en Cali, ofreciendo insights valiosos que pueden orientar la toma de decisiones en la planeación de nuevos lanzamientos, la gestión de inventarios y la mitigación de riesgos financieros ante la volatilidad de la tasa de cambio y los costos de producción.
Instalar/Cargar librerias necesarias para el análisis
#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) #timetk simplifica y acelera el análisis exploratorio, visualización, y preparación de datos temporales para modelado. Es ideal para quienes trabajan con series temporales en un flujo de trabajo "tidy" y buscan integrar análisis visuales, detección de patrones y forecasting en un solo paquete.
Cargar base de datos
library(readxl)
data_col <- read_excel("C:/Users/xhann/Downloads/Base Caso2 (2).xlsx", col_types = c("date",
"numeric", "numeric", "numeric", "numeric",
"numeric", "numeric", "numeric", "numeric",
"numeric", "numeric", "numeric", "numeric",
"numeric", "numeric", "numeric", "numeric",
"numeric", "numeric", "numeric", "numeric",
"numeric", "numeric", "numeric", "numeric",
"numeric", "numeric", "numeric", "numeric",
"numeric", "numeric", "numeric", "numeric",
"numeric", "numeric", "numeric", "numeric",
"numeric", "numeric", "numeric", "numeric",
"numeric", "numeric", "numeric", "numeric",
"numeric", "numeric", "numeric", "numeric",
"numeric", "numeric", "numeric", "numeric",
"numeric", "numeric", "numeric", "numeric",
"numeric", "numeric", "numeric", "numeric",
"numeric"))
Para evaluar el desempeño de la empresa y su entorno, se han seleccionado cinco variables que cubren el ciclo completo de la construcción (planeación, costos, demanda y ejecución):
# Convertir Licencias de Construcción Cali en serie de tiempo mensual
licc_cali_ts <- ts(data_col$LICC_CALI, start = c(2012, 1), frequency = 12)
# Convertir Producción de Concreto en serie de tiempo mensual
concreto_ts <- ts(data_col$CONCRETO, start = c(2012, 1), frequency = 12)
# Convertir Despachos de Cemento Valle en serie de tiempo mensual
cem_v_ts <- ts(data_col$CEM_V, start = c(2012, 1), frequency = 12)
# Convertir Confianza del Consumidor Cali en serie de tiempo mensual
icc_cali_ts <- ts(data_col$ICC_CALI, start = c(2012, 1), frequency = 12)
# Convertir TRM en serie de tiempo mensual
trm_ts <- ts(data_col$TRM, start = c(2012, 1), frequency = 12)
A continuación, se realiza la descomposición de las series temporales para identificar la tendencia real, los ciclos estacionales y los eventos atípicos (residuos) que afectan al sector de la construcción en Cali y el Valle.
# Graficar serie original
data_col$licc_cali_val <- as.numeric(licc_cali_ts)
grafico_licc <- ggplot(data_col, aes(x = seq.Date(from = as.Date("2012-01-01"), by = "month", length.out = nrow(data_col)),
y = licc_cali_val)) +
geom_line(color = "blue", linewidth = 0.4) +
geom_point(color = "black", size = 0.1) +
ggtitle("LICC_CALI: Serie Original (Área Aprobada)") +
xlab("Tiempo") + ylab("Metros Cuadrados") + theme_minimal()
ggplotly(grafico_licc)
# Descomposición STL
library(forecast)
licc_cali_clean <- na.interp(licc_cali_ts)
# 2. Ahora sí, aplicar la descomposición STL
stl_licc <- stl(licc_cali_clean, s.window = "periodic")
# 3. Continuar con la creación del data frame para graficar
stl_df_licc <- data.frame(
Time = rep(time(licc_cali_clean), 4),
Value = c(stl_licc$time.series[, "seasonal"],
stl_licc$time.series[, "trend"],
stl_licc$time.series[, "remainder"],
licc_cali_clean),
Component = rep(c("Estacional", "Tendencia", "Residuo", "Serie Original"), each = length(licc_cali_clean))
)
p1 <- ggplot(stl_df_licc, aes(x = Time, y = Value, color = Component)) +
geom_line() + facet_wrap(~Component, scales = "free_y", ncol = 1) +
theme_minimal() + labs(title = "Señales Extraídas: Licencias de Construcción Cali")
ggplotly(p1)
En los últimos años, la serie de área aprobada para licencias de construcción en Cali muestra alta volatilidad, con variaciones fuertes entre meses y varios picos pronunciados de metros cuadrados aprobados. A pesar de algunos periodos con niveles bajos, hacia el final de la serie se observa un incremento significativo con el valor más alto del periodo, lo que sugiere una recuperación reciente en la actividad constructora. Este comportamiento indica que el sector ha experimentado fluctuaciones importantes, posiblemente asociadas a la aprobación de proyectos de gran escala en momentos específicos.
En los últimos años, la descomposición de la serie de licencias de construcción en Cali muestra que la tendencia presenta una recuperación marcada hacia el final del periodo, luego de una caída alrededor de 2022–2023 (que podría ser explicada por la nueva politica territorial de la Alcaldía Eder). La estacionalidad se mantiene constante, con picos que se repiten cada año, lo que indica que la aprobación de licencias continúa concentrándose en los últimos meses del año. Además, los residuos muestran fluctuaciones importantes, reflejando choques o variaciones puntuales en algunos periodos recientes que no se explican únicamente por la tendencia ni por el patrón estacional. En conjunto, esto sugiere un reforzamiento reciente del sector con alta variabilidad mensual.
# 1. Gráfico de la serie original
data_col$concreto_val <- as.numeric(concreto_ts)
grafico_concreto_orig <- ggplot(data_col, aes(x = seq.Date(from = as.Date("2012-01-01"), by = "month", length.out = nrow(data_col)),
y = concreto_val)) +
geom_line(color = "darkgreen", linewidth = 0.4) +
geom_point(color = "black", size = 0.1) +
ggtitle("CONCRETO: Serie Original (Producción Nacional)") +
xlab("Tiempo") + ylab("Metros Cúbicos") + theme_minimal()
ggplotly(grafico_concreto_orig)
# Descomposición STL
stl_concreto <- stl(concreto_ts, s.window = "periodic")
stl_df_concreto <- data.frame(
Time = rep(time(concreto_ts), 4),
Value = c(stl_concreto$time.series[, "seasonal"], stl_concreto$time.series[, "trend"],
stl_concreto$time.series[, "remainder"], concreto_ts),
Component = rep(c("Estacional", "Tendencia", "Residuo", "Serie Original"), each = length(concreto_ts))
)
p2 <- ggplot(stl_df_concreto, aes(x = Time, y = Value, color = Component)) +
geom_line() + facet_wrap(~Component, scales = "free_y", ncol = 1) +
theme_minimal() + labs(title = "Señales Extraídas: Producción de Concreto Nacional")
ggplotly(p2)
En la serie original se puede observar un choque fuerte por efecto de la pandemia. La estacionalidad muestra picos recurrentes, lo que sugiere que la producción de concreto tiene patrones cíclicos relacionados con la demanda en ciertos meses del año lo que se relaciona con lo visto anteriormente en el otorgamiento de Licencias. La tendencia indica un posible decrecimiento en la actividad constructiva a nivel nacional hacia finales del año 2024 lo que podría indicar una caída en la demanda de concreto.
# Preparar vector numérico para graficar la serie original
data_col$cem_v_val <- as.numeric(cem_v_ts)
# Crear el gráfico de la serie original
grafico_cem_v_orig <- ggplot(data_col, aes(x = seq.Date(from = as.Date("2012-01-01"), by = "month", length.out = nrow(data_col)),
y = cem_v_val)) +
geom_line(color = "indianred", linewidth = 0.4) +
geom_point(color = "black", size = 0.1) +
ggtitle("CEM_V: Serie Original (Despachos de Cemento en el Valle)") +
xlab("Tiempo") +
ylab("Toneladas") +
theme_minimal()
# Convertir a gráfico interactivo
ggplotly(grafico_cem_v_orig)
# Descomposición STL
stl_cem_v <- stl(cem_v_ts, s.window = "periodic")
stl_df_cem_v <- data.frame(
Time = rep(time(cem_v_ts), 4),
Value = c(stl_cem_v$time.series[, "seasonal"], stl_cem_v$time.series[, "trend"],
stl_cem_v$time.series[, "remainder"], cem_v_ts),
Component = rep(c("Estacional", "Tendencia", "Residuo", "Serie Original"), each = length(cem_v_ts))
)
p3 <- ggplot(stl_df_cem_v, aes(x = Time, y = Value, color = Component)) +
geom_line() + facet_wrap(~Component, scales = "free_y", ncol = 1) +
theme_minimal() + labs(title = "Señales Extraídas: Despachos de Cemento Valle")
ggplotly(p3)
En la serie original de despachos de cemento en el Valle se observa un comportamiento similar al de las licencias de construcción, con caídas pronunciadas alrededor de 2020 y 2021 por efectos de la pandemia y de el paro nacional (el cual tuvo un gran efecto en el Valle) y una leve tendencia de recuperación hacia finales del periodo de 2024. La estacionalidad muestra picos recurrentes, lo que sugiere que los despachos de cemento también tienen patrones cíclicos relacionados con la demanda en ciertos meses del año en consonancia con lo analizado anteriormente.
# Preparar vector numérico para la serie original
data_col$icc_cali_val <- as.numeric(icc_cali_ts)
# Gráfico de la serie original
grafico_icc_orig <- ggplot(data_col, aes(x = seq.Date(from = as.Date("2012-01-01"), by = "month", length.out = nrow(data_col)),
y = icc_cali_val)) +
geom_line(color = "purple", linewidth = 0.4) +
geom_point(color = "black", size = 0.1) +
ggtitle("ICC_CALI: Serie Original (Índice de Confianza del Consumidor Cali)") +
xlab("Tiempo") +
ylab("Índice de Confianza") +
theme_minimal()
# Convertir a gráfico interactivo
ggplotly(grafico_icc_orig)
# Descomposición STL
stl_icc <- stl(icc_cali_ts, s.window = "periodic")
stl_df_icc <- data.frame(
Time = rep(time(icc_cali_ts), 4),
Value = c(stl_icc$time.series[, "seasonal"], stl_icc$time.series[, "trend"],
stl_icc$time.series[, "remainder"], icc_cali_ts),
Component = rep(c("Estacional", "Tendencia", "Residuo", "Serie Original"), each = length(icc_cali_ts))
)
p4 <- ggplot(stl_df_icc, aes(x = Time, y = Value, color = Component)) +
geom_line() + facet_wrap(~Component, scales = "free_y", ncol = 1) +
theme_minimal() + labs(title = "Señales Extraídas: Confianza del Consumidor Cali")
ggplotly(p4)
En la serie original del Índice de Confianza del Consumidor en Cali se observa una caída pronunciada alrededor de 2020 y 2021, coincidiendo con la pandemia y el paro nacional, seguido de una recuperación gradual hacia finales del periodo de 2024. La estacionalidad muestra picos recurrentes, lo que sugiere que la confianza del consumidor también tiene patrones cíclicos relacionados con eventos económicos o sociales específicos en ciertos meses del año . La tendencia indica una recuperación sostenida en la confianza de los consumidores desde el año 2023, lo que podría estar relacionado con la reactivación económica y la mejora en las condiciones laborales y financieras de los hogares en Cali.
# Preparar vector numérico para la serie original
data_col$trm_val <- as.numeric(trm_ts)
# Gráfico de la serie original
grafico_trm_orig <- ggplot(data_col, aes(x = seq.Date(from = as.Date("2012-01-01"), by = "month", length.out = nrow(data_col)),
y = trm_val)) +
geom_line(color = "orange", linewidth = 0.4) +
geom_point(color = "black", size = 0.1) +
ggtitle("TRM: Serie Original (Tasa Representativa del Mercado)") +
xlab("Tiempo") +
ylab("Pesos por Dólar (COP/USD)") +
theme_minimal()
# Convertir a gráfico interactivo
ggplotly(grafico_trm_orig)
# Descomposición STL
stl_trm <- stl(trm_ts, s.window = "periodic")
stl_df_trm <- data.frame(
Time = rep(time(trm_ts), 4),
Value = c(stl_trm$time.series[, "seasonal"], stl_trm$time.series[, "trend"],
stl_trm$time.series[, "remainder"], trm_ts),
Component = rep(c("Estacional", "Tendencia", "Residuo", "Serie Original"), each = length(trm_ts))
)
p5 <- ggplot(stl_df_trm, aes(x = Time, y = Value, color = Component)) +
geom_line() + facet_wrap(~Component, scales = "free_y", ncol = 1) +
theme_minimal() + labs(title = "Señales Extraídas: Tasa Representativa del Mercado (TRM)")
ggplotly(p5)
En la serie original de la TRM se observa una tendencia general al alza, con picos pronunciados en ciertos periodos que podrían estar relacionados con eventos económicos globales o nacionales. La estacionalidad muestra patrones cíclicos, aunque menos marcados que en las otras variables, lo que sugiere que la tasa de cambio también puede verse afectada por factores estacionales como la demanda de divisas en ciertos meses del año. La tendencia indica una apreciación del dólar frente al peso colombiano a lo largo del periodo, lo que podría estar relacionado con factores como la inflación, las tasas de interés y la percepción de riesgo país.
Después de la descomposición temporal de cada variable, se extrae la variable ajustada por estacionalidad para graficarla junto con la serie original: Esto permite a la constructora identificar si un cambio en las cifras se debe a un comportamiento cíclico normal del mes o a una tendencia real del mercado.
# Crear serie ajustada por estacionalidad (SA)
licc_cali_sa <- licc_cali_ts - stl_licc$time.series[, "seasonal"]
# Fechas para el eje X
fechas <- seq.Date(from = as.Date("2012-01-01"), by = "month", length.out = length(licc_cali_ts))
# Gráfico comparativo
g1 <- ggplot() +
geom_line(aes(x = fechas, y = licc_cali_ts, color = "Original"), linewidth = 0.5) +
geom_line(aes(x = fechas, y = licc_cali_sa, color = "Ajustada"), linewidth = 0.7) +
scale_color_manual(values = c("Original" = "grey", "Ajustada" = "blue")) +
labs(title = "Licencias Cali: Original vs Ajustada", x = "Tiempo", y = "Metros Cuadrados", color = "Serie") +
theme_minimal()
ggplotly(g1)
En este gráfico donde se superpone la seriae ajustada a la original vemos que el cambio no es muy notorio, lo que sugiere que la estacionalidad no tiene un impacto tan fuerte en la serie de licencias de construcción en Cali. Sin embargo, la serie ajustada muestra una tendencia un poco más clara y menos ruido. En esta serie hay una clara ruptura de los datos en marzo de 2020 por razon de la pandemia.
# Crear serie ajustada
concreto_sa <- concreto_ts - stl_concreto$time.series[, "seasonal"]
# Gráfico comparativo
g2 <- ggplot() +
geom_line(aes(x = fechas, y = concreto_ts, color = "Original"), linewidth = 0.5) +
geom_line(aes(x = fechas, y = concreto_sa, color = "Ajustada"), linewidth = 0.7) +
scale_color_manual(values = c("Original" = "grey", "Ajustada" = "darkgreen")) +
labs(title = "Concreto: Original vs Ajustada (Nacional)", x = "Tiempo", y = "Metros Cúbicos", color = "Serie") +
theme_minimal()
ggplotly(g2)
En el gráfico comparativo de la producción de concreto se observa que la serie ajustada por estacionalidad muestra una tendencia más clara y menos ruido que la serie original. La estacionalidad tiene un impacto más significativo en esta variable por lo que la serie ajustada revela mejor la evolución subyacente de la producción de concreto a lo largo del tiempo, permitiendo identificar tendencias y cambios estructurales con mayor claridad.
# Crear serie ajustada
cem_v_sa <- cem_v_ts - stl_cem_v$time.series[, "seasonal"]
# Gráfico comparativo
g3 <- ggplot() +
geom_line(aes(x = fechas, y = cem_v_ts, color = "Original"), linewidth = 0.5) +
geom_line(aes(x = fechas, y = cem_v_sa, color = "Ajustada"), linewidth = 0.7) +
scale_color_manual(values = c("Original" = "grey", "Ajustada" = "red")) +
labs(title = "Cemento Valle: Original vs Ajustada", x = "Tiempo", y = "Toneladas", color = "Serie") +
theme_minimal()
ggplotly(g3)
En el gráfico comparativo de los despachos de cemento en el Valle se observa que entre 2012 y finales de 2019 hay una tendencia creciente suave, con oscilaciones mensuales pero sin cambios estructurales fuertes. Desde 2021 en adelante el nivel promedio es más alto que al inicio, pero con mayor volatilidad y una ligera caída hacia 2024–2025. Las dos líneas son muy similares, lo que indica que el ajuste (seguramente estacional) corrige sobre todo pequeñas variaciones de corto plazo.
# Crear serie ajustada
icc_cali_sa <- icc_cali_ts - stl_icc$time.series[, "seasonal"]
# Gráfico comparativo
g4 <- ggplot() +
geom_line(aes(x = fechas, y = icc_cali_ts, color = "Original"), linewidth = 0.5) +
geom_line(aes(x = fechas, y = icc_cali_sa, color = "Ajustada"), linewidth = 0.7) +
scale_color_manual(values = c("Original" = "grey", "Ajustada" = "purple")) +
labs(title = "ICC Cali: Original vs Ajustada", x = "Tiempo", y = "Índice de Confianza", color = "Serie") +
theme_minimal()
ggplotly(g4)
El ICC de Cali muestra una trayectoria de claro deterioro en el tiempo: parte en niveles positivos y relativamente altos al inicio del período, cae con fuerza desde 2015–2016, entra en una fase prolongada de valores bajos o negativos, toca su punto más crítico alrededor de 2020 y luego presenta una recuperación parcial hacia el final, aunque sin volver de manera sostenida a los máximos iniciales; además, la serie ajustada prácticamente coincide con la original, lo que sugiere que la estacionalidad tiene un peso menor frente a los cambios de fondo, de modo que la lectura principal es la de una ruptura a la baja, seguida por alta volatilidad y una mejora reciente todavía incompleta.
# Crear serie ajustada
trm_sa <- trm_ts - stl_trm$time.series[, "seasonal"]
# Gráfico comparativo
g5 <- ggplot() +
geom_line(aes(x = fechas, y = trm_ts, color = "Original"), linewidth = 0.5) +
geom_line(aes(x = fechas, y = trm_sa, color = "Ajustada"), linewidth = 0.7) +
scale_color_manual(values = c("Original" = "grey", "Ajustada" = "orange")) +
labs(title = "TRM: Original vs Ajustada", x = "Tiempo", y = "Pesos por Dólar", color = "Serie") +
theme_minimal()
ggplotly(g5)
La gráfica de la TRM muestra una tendencia claramente ascendente de largo plazo, con un salto fuerte entre 2014 y 2016, una nueva fase de depreciación desde 2019 y un pico muy marcado alrededor de 2022, seguido por una corrección parcial y un repunte reciente hacia 2024–2024. La serie ajustada y la original casi se superponen durante todo el período, lo que sugiere que el componente estacional es pequeño y que la dinámica de la TRM está dominada sobre todo por cambios de tendencia y choques de corto plazo más que por patrones estacionales regulares. En términos económicos, la gráfica sugiere una depreciación importante del peso colombiano a lo largo del período, interrumpida por fases de corrección pero sin regresar a los niveles iniciales. Para análisis posterior, esta serie parece tener al menos tres momentos relevantes: el salto de 2014–2015, la aceleración de 2019–2022 y la corrección con repunte de 2023–2024
Ahora graficamos serie original vs tendencia
Primero se debe obtener la tendencia de cada variable y luego graficarla
Al extraer la tendencia, podemos observar la evolución estructural del sector construcción en Cali y el Valle, identificando periodos de crecimiento real o desaceleración sostenida para la Constructora Jaramillo Mora.
# Extraer la tendencia de la descomposición STL
tendencia_licc <- as.numeric(stl_licc$time.series[, "trend"])
licc_vec <- as.numeric(licc_cali_ts)
# Gráfico interactivo
grafico_tendencia_licc <- ggplot() +
geom_line(aes(x = fechas, y = licc_vec, color = "Serie Original"), linewidth = 0.5) +
geom_line(aes(x = fechas, y = tendencia_licc, color = "Tendencia"), linewidth = 1) +
scale_color_manual(values = c("Serie Original" = "grey", "Tendencia" = "blue")) +
labs(title = "Licencias Cali: Original vs Tendencia", x = "Tiempo", y = "Metros Cuadrados", color = "Leyenda") +
theme_minimal() + theme(axis.text.x = element_text(angle = 45, hjust = 1))
ggplotly(grafico_tendencia_licc)
La gráfica de licencias en Cali muestra una serie original muy volátil, con picos extremos que superan ampliamente el nivel habitual, mientras la tendencia suavizada se mueve en un rango mucho más estable y permite ver mejor el comportamiento de fondo del sector. En síntesis, la lectura principal no es la de crecimiento continuo, sino la de un mercado altamente errático en su serie mensual, con ciclos de expansión y contracción, pero con una recuperación reciente bastante clara en la tendencia subyacente.
# Extraer la tendencia
tendencia_concreto <- as.numeric(stl_concreto$time.series[, "trend"])
concreto_vec <- as.numeric(concreto_ts)
# Gráfico interactivo
grafico_tendencia_concreto <- ggplot() +
geom_line(aes(x = fechas, y = concreto_vec, color = "Serie Original"), linewidth = 0.5) +
geom_line(aes(x = fechas, y = tendencia_concreto, color = "Tendencia"), linewidth = 1) +
scale_color_manual(values = c("Serie Original" = "grey", "Tendencia" = "darkgreen")) +
labs(title = "Concreto: Original vs Tendencia (Nacional)", x = "Tiempo", y = "Metros Cúbicos", color = "Leyenda") +
theme_minimal() + theme(axis.text.x = element_text(angle = 45, hjust = 1))
ggplotly(grafico_tendencia_concreto)
# Extraer la tendencia
tendencia_cem_v <- as.numeric(stl_cem_v$time.series[, "trend"])
cem_v_vec <- as.numeric(cem_v_ts)
# Gráfico interactivo
grafico_tendencia_cem_v <- ggplot() +
geom_line(aes(x = fechas, y = cem_v_vec, color = "Serie Original"), linewidth = 0.5) +
geom_line(aes(x = fechas, y = tendencia_cem_v, color = "Tendencia"), linewidth = 1) +
scale_color_manual(values = c("Serie Original" = "grey", "Tendencia" = "red")) +
labs(title = "Cemento Valle: Original vs Tendencia", x = "Tiempo", y = "Toneladas", color = "Leyenda") +
theme_minimal() + theme(axis.text.x = element_text(angle = 45, hjust = 1))
ggplotly(grafico_tendencia_cem_v)
La gráfica de concreto a nivel nacional muestra una trayectoria cíclica clara: una fase de expansión entre 2012 y 2015, cuando la tendencia sube desde cerca de 600 mil hasta más de 730 mil metros cúbicos, seguida por una desaceleración prolongada entre 2016 y 2019, una caída muy fuerte en 2020, una recuperación rápida entre 2021 y 2023 y una moderación reciente hacia 2024–2025. La serie original es bastante volátil y presenta un desplome extremo alrededor de 2020, pero la línea de tendencia suavizada deja ver que ese choque fue excepcional dentro de un ciclo más amplio y no solo ruido mensual. En conjunto, la lectura principal es la de un sector que venía debilitándose antes del shock de 2020, luego rebotó con fuerza en la pospandemia y ahora parece entrar en una fase de enfriamiento moderado, aunque todavía en niveles comparables o algo superiores a los del inicio del período.
# Extraer la tendencia
tendencia_icc <- as.numeric(stl_icc$time.series[, "trend"])
icc_vec <- as.numeric(icc_cali_ts)
# Gráfico interactivo
grafico_tendencia_icc <- ggplot() +
geom_line(aes(x = fechas, y = icc_vec, color = "Serie Original"), linewidth = 0.5) +
geom_line(aes(x = fechas, y = tendencia_icc, color = "Tendencia"), linewidth = 1) +
scale_color_manual(values = c("Serie Original" = "grey", "Tendencia" = "purple")) +
labs(title = "ICC Cali: Original vs Tendencia", x = "Tiempo", y = "Índice", color = "Leyenda") +
theme_minimal() + theme(axis.text.x = element_text(angle = 45, hjust = 1))
ggplotly(grafico_tendencia_icc)
La gráfica del ICC Cali con tendencia muestra un deterioro claro de mediano plazo: la tendencia arranca en niveles altos y positivos, alrededor de 25–30 puntos entre 2012 y 2014, cae con fuerza desde 2015 hasta entrar en terreno negativo en 2016, tiene una recuperación parcial hacia 2018–2019, vuelve a descender con un mínimo cercano a −20 alrededor de 2020 y luego exhibe una mejora gradual hasta acercarse nuevamente a cero hacia 2025 mostrando una tendencia al alza. La serie original, en gris, es mucho más volátil que la tendencia y presenta oscilaciones fuertes alrededor de esa trayectoria suavizada, lo que sugiere que el indicador está expuesto a choques de corto plazo, pero que el movimiento de fondo sigue siendo el de una pérdida de confianza desde mediados de la década pasada, seguida por una recuperación reciente todavía incompleta.
# Extraer la tendencia
tendencia_trm <- as.numeric(stl_trm$time.series[, "trend"])
trm_vec <- as.numeric(trm_ts)
# Gráfico interactivo
grafico_tendencia_trm <- ggplot() +
geom_line(aes(x = fechas, y = trm_vec, color = "Serie Original"), linewidth = 0.5) +
geom_line(aes(x = fechas, y = tendencia_trm, color = "Tendencia"), linewidth = 1) +
scale_color_manual(values = c("Serie Original" = "grey", "Tendencia" = "orange")) +
labs(title = "TRM: Original vs Tendencia", x = "Tiempo", y = "COP/USD", color = "Leyenda") +
theme_minimal() + theme(axis.text.x = element_text(angle = 45, hjust = 1))
ggplotly(grafico_tendencia_trm)
La TRM muestra una tendencia fuertemente ascendente de largo plazo: parte cerca de 1.800 COP/USD en 2012–2013, sube con rapidez hasta alrededor de 3.000 en 2015–2016, se estabiliza parcialmente entre 2016 y 2018, vuelve a ganar pendiente desde 2019, alcanza un máximo tendencial alrededor de 2022–2023 cercano a 4.500–4.600, luego corrige hacia la zona de 4.000 y finalmente repunta otra vez hacia 2025, ubicándose por encima de 4.200 COP/USD; en síntesis, la lectura central es la de una depreciación estructural del peso colombiano, interrumpida por pausas y correcciones temporales, pero sin regresar a los niveles observados al inicio del período.
El análisis de la tasa de crecimiento anual permite a la constructora detectar cambios estructurales en el entorno económico, facilitando la previsión de periodos de auge o crisis.
# Cálculo de la tasa de crecimiento anual (Ene 2013 en adelante)
tasa_crecimiento_licc <- (licc_cali_ts[13:length(licc_cali_ts)] / licc_cali_ts[1:(length(licc_cali_ts) - 12)] - 1) * 100
tasa_tendencia_licc <- (tendencia_licc[13:length(tendencia_licc)] / tendencia_licc[1:(length(tendencia_licc) - 12)] - 1) * 100
# Vector de fechas iniciando en 2013-01-01
fechas_crecimiento <- seq(from = as.Date("2013-01-01"), by = "month", length.out = length(tasa_crecimiento_licc))
# Gráfico interactivo
grafico_crec_licc <- ggplot() +
geom_line(aes(x = fechas_crecimiento, y = tasa_crecimiento_licc), color = "grey", linewidth = 0.5) +
geom_line(aes(x = fechas_crecimiento, y = tasa_tendencia_licc), color = "blue", linewidth = 0.8, linetype = "dashed") +
labs(title = "Licencias Cali: Crecimiento Anual % (Original vs Tendencia)",
x = "Tiempo", y = "% Crecimiento") +
theme_minimal()
ggplotly(grafico_crec_licc)
La gráfica de crecimiento anual de las licencias en Cali muestra una serie original extremadamente volátil, con picos positivos muy altos y caídas frecuentes por debajo de cero, lo que sugiere que las variaciones interanuales de corto plazo están dominadas por efectos base, alta irregularidad mensual y episodios puntuales más que por un patrón estable de expansión o contracción. En contraste, la línea de tendencia suavizada indica un ciclo más interpretable: crecimiento moderado alrededor de 2014–2015, debilitamiento entre 2016 y 2017, recuperación hacia 2018, nueva pérdida de dinamismo entre 2019 y 2023 (con varios tramos cercanos o por debajo de cero) y un repunte claro al final de la muestra, cuando la tendencia vuelve a terreno positivo y cierra alrededor de 70–80%. En síntesis, la lectura principal es que el mercado de licencias en Cali ha sido muy errático en tasas anuales, pero la tendencia reciente apunta a una reactivación importante después de varios años de desempeño débil e inestable.
# Cálculo de tasas
tasa_crecimiento_concreto <- (concreto_ts[13:length(concreto_ts)] / concreto_ts[1:(length(concreto_ts) - 12)] - 1) * 100
tasa_tendencia_concreto <- (tendencia_concreto[13:length(tendencia_concreto)] / tendencia_concreto[1:(length(tendencia_concreto) - 12)] - 1) * 100
# Gráfico interactivo
grafico_crec_concreto <- ggplot() +
geom_line(aes(x = fechas_crecimiento, y = tasa_crecimiento_concreto), color = "grey", linewidth = 0.5) +
geom_line(aes(x = fechas_crecimiento, y = tasa_tendencia_concreto), color = "darkgreen", linewidth = 0.8, linetype = "dashed") +
labs(title = "Concreto: Crecimiento Anual % (Original vs Tendencia)",
x = "Tiempo", y = "% Crecimiento") +
theme_minimal()
ggplotly(grafico_crec_concreto)
La gráfica de crecimiento anual del concreto muestra que la serie original es relativamente estable durante la mayor parte del período, con tasas cercanas a cero y oscilaciones moderadas, pero presenta un pico extremadamente alto alrededor de 2021 que luce claramente atípico y probablemente responde a un efecto base asociado al desplome previo de 2020 más que a una expansión estructural del sector.
# Cálculo de tasas
tasa_crecimiento_cem_v <- (cem_v_ts[13:length(cem_v_ts)] / cem_v_ts[1:(length(cem_v_ts) - 12)] - 1) * 100
tasa_tendencia_cem_v <- (tendencia_cem_v[13:length(tendencia_cem_v)] / tendencia_cem_v[1:(length(tendencia_cem_v) - 12)] - 1) * 100
# Gráfico interactivo
grafico_crec_cem_v <- ggplot() +
geom_line(aes(x = fechas_crecimiento, y = tasa_crecimiento_cem_v), color = "grey", linewidth = 0.5) +
geom_line(aes(x = fechas_crecimiento, y = tasa_tendencia_cem_v), color = "red", linewidth = 0.8, linetype = "dashed") +
labs(title = "Cemento Valle: Crecimiento Anual % (Original vs Tendencia)",
x = "Tiempo", y = "% Crecimiento") +
theme_minimal()
ggplotly(grafico_crec_cem_v)
La gráfica muestra una tasa de crecimiento anual del cemento en Valle muy volátil en la serie original, con valores cercanos a cero durante buena parte del período y dos episodios extremos alrededor de 2021–2022: uno de fuerte rebote y otro pico extraordinario superior a 800%, lo que sugiere claros efectos base más que una expansión estructural sostenida. La tendencia suavizada, en cambio, se mantiene mucho más acotada y permite ver mejor la dinámica de fondo: un leve deterioro hacia 2020, una recuperación transitoria en 2021–2022, seguida por una desaceleración que lleva el crecimiento tendencial nuevamente a valores bajos en 2023–2024, para terminar cerca de cero hacia 2025.
# Cálculo de tasas
# Nota: Como el ICC puede tener valores cercanos a cero o negativos,
# la tasa de crecimiento mide el cambio porcentual de la disposición de compra.
tasa_crecimiento_icc <- (icc_cali_ts[13:length(icc_cali_ts)] / icc_cali_ts[1:(length(icc_cali_ts) - 12)] - 1) * 100
tasa_tendencia_icc <- (tendencia_icc[13:length(tendencia_icc)] / tendencia_icc[1:(length(tendencia_icc) - 12)] - 1) * 100
# Gráfico interactivo
grafico_crec_icc <- ggplot() +
geom_line(aes(x = fechas_crecimiento, y = tasa_crecimiento_icc), color = "grey", linewidth = 0.5) +
geom_line(aes(x = fechas_crecimiento, y = tasa_tendencia_icc), color = "purple", linewidth = 0.8, linetype = "dashed") +
labs(title = "ICC Cali: Crecimiento Anual % (Original vs Tendencia)",
x = "Tiempo", y = "% Crecimiento") +
theme_minimal()
ggplotly(grafico_crec_icc)
Esta gráfica también refleja la volatilidad de la serie original del ICC, con tasas de crecimiento que oscilan ampliamente entre valores positivos y negativos, lo que sugiere que la confianza del consumidor en Cali ha estado expuesta a choques frecuentes y cambios abruptos en la disposición de compra. Esto significa que el indicador sufrió cambios bruscos de nivel y alta volatilidad, especialmente alrededor de 2020, por lo que para esta variable conviene analizar diferencias absolutas, cambios en puntos del índice o la tendencia del nivel, no la tasa anual porcentual.
# Cálculo de tasas (Devaluación/Revaluación anual)
tasa_crecimiento_trm <- (trm_ts[13:length(trm_ts)] / trm_ts[1:(length(trm_ts) - 12)] - 1) * 100
tasa_tendencia_trm <- (tendencia_trm[13:length(tendencia_trm)] / tendencia_trm[1:(length(tendencia_trm) - 12)] - 1) * 100
# Gráfico interactivo
grafico_crec_trm <- ggplot() +
geom_line(aes(x = fechas_crecimiento, y = tasa_crecimiento_trm), color = "grey", linewidth = 0.5) +
geom_line(aes(x = fechas_crecimiento, y = tasa_tendencia_trm), color = "orange", linewidth = 0.8, linetype = "dashed") +
labs(title = "TRM: Crecimiento Anual %",
x = "Tiempo", y = "% Crecimiento") +
theme_minimal()
ggplotly(grafico_crec_trm)
La gráfica muestra que el precio del dólar en Colombia no subió de manera pareja año tras año, sino por rachas: hubo momentos en que subió rápido, otros en que casi no cambió y otros en que incluso bajó frente al año anterior. El salto más fuerte se ve entre 2014 y 2016, luego el ritmo se calma, vuelve a repuntar entre 2019 y 2023, y después cae en 2024 antes de mostrar una recuperación al final. O sea, la idea principal es que la TRM ha tenido varios ciclos de subida y bajada, no un crecimiento estable y continuo.
El análisis de las señales extraídas muestra varios patrones relevantes para Constructora Jaramillo Mora. En primer lugar, las licencias de construcción en Cali presentan una recuperación reciente, lo que sugiere un posible repunte en la planeación de nuevos proyectos inmobiliarios en la ciudad. Sin embargo, esta recuperación se da en un contexto de alta volatilidad, lo que indica que el crecimiento del sector aún es inestable y depende de proyectos puntuales de gran escala. En segundo lugar, la producción nacional de concreto y los despachos de cemento en el Valle evidencian un choque fuerte en 2020–2021 y una recuperación parcial posterior, aunque con señales de desaceleración hacia los años más recientes, lo que puede indicar un ritmo moderado de ejecución de obras. Adicionalmente, la confianza del consumidor en Cali muestra una recuperación desde 2023, lo que sugiere una mejora gradual en la disposición de los hogares para adquirir vivienda. Finalmente, la tasa de cambio mantiene una tendencia al alza, lo que implica presiones sobre los costos de construcción, especialmente en materiales importados.
En conjunto, estas señales indican que el sector presenta una recuperación moderada con riesgos asociados a costos y volatilidad de la demanda, lo que obliga a las empresas constructoras a planear estratégicamente el ritmo de sus inversiones y lanzamientos de proyectos.
A partir de estos resultados Jaramillo Mora puede considerar varias decisiones estratégicas:
Primero, la recuperación reciente de las licencias y de la confianza del consumidor sugiere una ventana de oportunidad para planear nuevos proyectos, especialmente en segmentos de vivienda con alta demanda como la Vivienda de Interés Social (VIS) o proyectos de precio medio, donde la demanda suele reaccionar más rápido a las mejoras en la confianza económica.
Segundo, dado que los costos de construcción pueden aumentar por la depreciación del peso, las empresas deberían fortalecer estrategias de gestión de costos, como la negociación anticipada con proveedores de insumos (cemento, acero y acabados) o la compra anticipada de materiales cuando la tasa de cambio sea favorable. Esto conecta directamente con sectores industriales como el cementero, siderúrgico y de materiales de construcción, que forman parte de los encadenamientos productivos del sector.
Tercero, la evidencia de alta volatilidad en licencias y actividad constructiva sugiere que las empresas deberían diversificar su portafolio de proyectos, combinando proyectos de gran escala con desarrollos más pequeños y de ejecución rápida. Esta estrategia reduce el riesgo financiero y permite adaptarse mejor a los cambios del ciclo económico.
Finalmente, dado que la actividad del sector construcción impacta múltiples sectores como el financiero, el industrial y el inmobiliario, las empresas pueden fortalecer alianzas con entidades financieras para facilitar el acceso a crédito hipotecario y desarrollar esquemas de financiación atractivos para los compradores. Esto ayudaría a aprovechar la recuperación gradual de la confianza del consumidor y estimular la demanda de vivienda.
En síntesis, los datos sugieren que el sector se encuentra en una fase de recuperación con incertidumbre, por lo que las decisiones estratégicas deberían enfocarse en control de costos, diversificación de proyectos, anticipación de ciclos del mercado y fortalecimiento de alianzas con sectores complementarios para sostener el crecimiento en el mediano plazo.
En conclusión, el análisis de las series relacionadas con la actividad del sector de la construcción evidencia que existe una dinámica marcada por fluctuaciones importantes y choques en algunos periodos recientes, especialmente alrededor de 2020, seguidos por procesos de recuperación gradual en los años posteriores. La descomposición de las series muestra que los patrones estacionales se mantienen relativamente estables, lo que indica que ciertos momentos del año concentran mayor actividad, mientras que la tendencia refleja ciclos de contracción y recuperación propios del sector. Asimismo, los residuos sugieren la presencia de factores externos o eventos coyunturales que afectan temporalmente el comportamiento de las variables analizadas. En conjunto, los resultados indican que el sector presenta alta sensibilidad a cambios económicos, pero también capacidad de recuperación, por lo que el seguimiento de estas variables resulta clave para anticipar el comportamiento futuro de la actividad constructora y apoyar la toma de decisiones en el sector.
DANE (2024) Boletín de Estadísticas de Concreto Premezclado (EC)
Fedesarrollo. (2023). Encuesta de Opinión del Consumidor. Resultados mayo de 2023. Bogotá: Fedesarrollo.
Garay-Rodríguez, Seydyss, Pavel Vidal, Alejandro, & Cerón-Ordóñez, Julieth. (2023). El monitoreo del sector de la construcción en el Valle del Cauca. Apuntes del Cenes, 42(75), 237-271. Epub November 07, 2023.https://doi.org/10.19053/01203053.v42.n75.2023.1a667