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.
library(dplyr)
library(tidyr)
library(ggplot2)
library(lubridate)
library(zoo)
library(scales)
library(knitr)
library(corrplot)
library(forecast)
library(seasonal)
Cargar base de datos
library(readxl)
data_col <- read_excel("data_col.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"))
El presente informe desarrolla un ejercicio de extracción de señales
aplicado al sector cafetero colombiano, mediante el
análisis de tres variables mensuales: PNCAFE,
PICAFE y XCAF.
De acuerdo con la base de datos suministrada, estas variables corresponden, respectivamente, a la producción de café en miles de sacos de 60 kg, al precio interno base de compra del café pergamino seco en pesos por carga de 125 kg y a las exportaciones de café en miles de dólares. Estas tres variables permiten aproximar dimensiones fundamentales del negocio cafetero: oferta, costo interno y desempeño externo.
La elección del sector cafetero colombiano no es arbitraria. La caficultura constituye una actividad de alta relevancia económica, social y territorial en Colombia. Según Agronet, el café se produce en 603 municipios de 22 departamentos y vincula a más de 549.000 familias, de las cuales el 96% corresponde a pequeños productores con menos de cinco hectáreas.
En este contexto, se propone el caso de una empresa hipotética denominada Café Andino Export S.A.S., concebida como una firma mediana dedicada a la compra de café pergamino seco, coordinación con procesos de trilla y clasificación, comercialización de cafés diferenciados y exportación hacia mercados internacionales.
El objetivo general del informe es identificar y analizar las señales contenidas en las tres series seleccionadas, interpretar su comportamiento individual y conjunto, y derivar implicaciones estratégicas para una empresa exportadora del sector, siguiendo el enfoque metodológico trabajado en clase.
El sector cafetero colombiano mantuvo una elevada importancia durante 2025. Reuters reportó que el valor de las exportaciones colombianas de café aumentó 70,6% interanual hasta alcanzar US$5.788 millones, mientras que el volumen exportado creció 13,3%. Esto confirmó al café como uno de los principales dinamizadores del desempeño exportador del país.
No obstante, el buen resultado exportador coexistió con señales de moderación en el frente productivo. La República reportó que la producción de café en 2025 llegó a 13,67 millones de sacos de 60 kg, con una caída cercana al 2% frente al año anterior. Esto sugiere que el sector vivió una combinación de fortaleza comercial y restricciones parciales de oferta.
El Banco de la República complementa este diagnóstico al señalar que la economía de la región Central Cafetera creció en el segundo trimestre de 2025, impulsada por mayores ingresos cafeteros, ocupación, remesas y consumo interno. Sin embargo, el mismo informe advierte que la prolongación de las lluvias afectó el renglón agrícola, lo cual resulta coherente con las tensiones observadas en la producción cafetera.
En consecuencia, el entorno reciente del sector cafetero colombiano presenta una combinación de señales especialmente útil para un ejercicio de extracción de señales: dinamismo exportador, mayores ingresos cafeteros, sensibilidad climática y cambios en la disponibilidad de oferta.
La empresa Café Andino Export S.A.S. se concibe como una firma mediana orientada a la exportación de café colombiano. Su modelo de negocio consiste en comprar café pergamino seco a productores, asociaciones o cooperativas, coordinar procesos de transformación y clasificación, y vender café verde o cafés diferenciados a compradores del mercado internacional.
Desde el punto de vista económico, la firma está expuesta a tres
dimensiones centrales. La primera es la disponibilidad de materia prima,
aproximada mediante PNCAFE; la segunda es el costo interno
de adquisición, capturado por PICAFE; y la tercera es el
comportamiento del entorno exportador, representado por
XCAF.
Esta empresa es adecuada para el ejercicio porque sintetiza muy bien los retos reales de una firma cafetera exportadora. Su desempeño no depende solo de vender más al exterior, sino de lograr abastecimiento oportuno, contener costos, sostener calidad y responder a variaciones del mercado internacional.
PNCAFE)PNCAFE representa la producción de café en miles de
sacos de 60 kg. Esta variable captura la señal de oferta agregada del
sector y permite aproximar la disponibilidad potencial de materia prima
para firmas comercializadoras y exportadoras.
Su selección es fundamental porque la producción condiciona la capacidad de abastecimiento de la empresa. Cuando esta variable presenta una trayectoria favorable, la firma puede operar con mayor previsibilidad. Cuando se debilita, aumenta la posibilidad de escasez relativa, tensiones competitivas por compra y presiones sobre el precio interno.
PICAFE)PICAFE corresponde al precio interno base de compra del
café pergamino seco en pesos por carga de 125 kg. Esta variable funciona
como aproximación directa al costo de adquisición del negocio.
Su relevancia es inmediata: si el precio interno aumenta de forma
persistente, la empresa enfrenta presiones sobre sus márgenes, mayores
requerimientos de capital de trabajo y más exposición financiera. Por
ello, PICAFE es una señal clave del estrés o alivio
operativo de la firma.
XCAF)XCAF representa las exportaciones de café en miles de
dólares. Esta serie sintetiza el desempeño externo del sector y puede
capturar la combinación de cantidades exportadas, condiciones de mercado
y entorno comercial.
Para una empresa exportadora, una señal expansiva en
XCAF sugiere un mercado internacional dinámico y con
oportunidades. Sin embargo, esta variable debe interpretarse junto con
PNCAFE y PICAFE, ya que mayores exportaciones
no garantizan automáticamente una mejora equivalente en
rentabilidad.
Las técnicas de extracción de señales aplicadas en este informe siguen la lógica trabajada en la clase del 7 de mayo de 2026. El objetivo no es construir un modelo causal estructural, sino utilizar herramientas descriptivas y de series de tiempo para distinguir entre fluctuaciones de corto plazo, movimientos persistentes y señales relevantes para la toma de decisiones.
El análisis se realiza con series mensuales y utiliza las siguientes herramientas: - Estadísticas descriptivas. - Gráficos en niveles. - Descomposición STL. - Series ajustadas por estacionalidad. - Comparación entre serie original y tendencia. - Tasas de crecimiento anual de la serie original y de la tendencia. - Medias móviles de 12 meses. - Variaciones mensuales e interanuales. - Correlaciones y comparación estandarizada de señales.
Esta combinación es pertinente porque permite una lectura más rica del sector. No solo se observan los niveles de las variables, sino también su trayectoria de fondo, su estacionalidad, su volatilidad y su interacción.
cafe <- data_col %>%
select(FECHA, PNCAFE, PICAFE, XCAF) %>%
mutate(FECHA = as.Date(as.yearmon(FECHA, format = "%b-%y"))) %>%
arrange(FECHA) %>%
filter(!is.na(FECHA)) %>%
filter(!is.na(PNCAFE) & !is.na(PICAFE) & !is.na(XCAF))
head(cafe)
| FECHA | PNCAFE | PICAFE | XCAF |
|---|---|---|---|
| 2012-01-01 | 535 | 874862.9 | 197295.8 |
| 2012-02-01 | 571 | 826219.8 | 186693.3 |
| 2012-03-01 | 576 | 727564.5 | 203636.0 |
| 2012-04-01 | 580 | 703033.3 | 121442.5 |
| 2012-05-01 | 689 | 670334.7 | 167643.9 |
| 2012-06-01 | 714 | 592504.2 | 162433.1 |
tail(cafe)
| FECHA | PNCAFE | PICAFE | XCAF |
|---|---|---|---|
| 2025-07-01 | 1373.356 | 2369903 | 481898.8 |
| 2025-08-01 | 1242.742 | 2758032 | 535820.2 |
| 2025-09-01 | 1142.413 | 2966133 | 507682.3 |
| 2025-10-01 | 1208.087 | 2954935 | 547763.4 |
| 2025-11-01 | 1266.070 | 2889633 | 592944.4 |
| 2025-12-01 | 1233.423 | 2745226 | 524602.7 |
summary(cafe)
## FECHA PNCAFE PICAFE XCAF
## Min. :2012-01-01 Min. : 519.0 Min. : 384813 Min. :115655
## 1st Qu.:2015-06-23 1st Qu.: 907.8 1st Qu.: 726701 1st Qu.:179315
## Median :2018-12-16 Median :1058.0 Median : 842419 Median :217946
## Mean :2018-12-16 Mean :1061.0 Mean :1201972 Mean :244912
## 3rd Qu.:2022-06-08 3rd Qu.:1211.2 3rd Qu.:1612580 3rd Qu.:278971
## Max. :2025-12-01 Max. :1798.2 Max. :3118571 Max. :592944
desc <- cafe %>%
summarise(
PNCAFE_media = mean(PNCAFE, na.rm = TRUE),
PNCAFE_mediana = median(PNCAFE, na.rm = TRUE),
PNCAFE_sd = sd(PNCAFE, na.rm = TRUE),
PNCAFE_min = min(PNCAFE, na.rm = TRUE),
PNCAFE_max = max(PNCAFE, na.rm = TRUE),
PICAFE_media = mean(PICAFE, na.rm = TRUE),
PICAFE_mediana = median(PICAFE, na.rm = TRUE),
PICAFE_sd = sd(PICAFE, na.rm = TRUE),
PICAFE_min = min(PICAFE, na.rm = TRUE),
PICAFE_max = max(PICAFE, na.rm = TRUE),
XCAF_media = mean(XCAF, na.rm = TRUE),
XCAF_mediana = median(XCAF, na.rm = TRUE),
XCAF_sd = sd(XCAF, na.rm = TRUE),
XCAF_min = min(XCAF, na.rm = TRUE),
XCAF_max = max(XCAF, na.rm = TRUE)
)
kable(round(desc, 2), caption = "Estadísticas descriptivas básicas")
| PNCAFE_media | PNCAFE_mediana | PNCAFE_sd | PNCAFE_min | PNCAFE_max | PICAFE_media | PICAFE_mediana | PICAFE_sd | PICAFE_min | PICAFE_max | XCAF_media | XCAF_mediana | XCAF_sd | XCAF_min | XCAF_max |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1061.03 | 1058 | 247.55 | 519 | 1798.23 | 1201972 | 842419.3 | 704562 | 384812.5 | 3118571 | 244912.1 | 217945.7 | 96617.79 | 115655.4 | 592944.4 |
desc_largo <- tibble(
Variable = c("PNCAFE", "PICAFE", "XCAF"),
Media = c(mean(cafe$PNCAFE, na.rm = TRUE),
mean(cafe$PICAFE, na.rm = TRUE),
mean(cafe$XCAF, na.rm = TRUE)),
Mediana = c(median(cafe$PNCAFE, na.rm = TRUE),
median(cafe$PICAFE, na.rm = TRUE),
median(cafe$XCAF, na.rm = TRUE)),
Desv_Est = c(sd(cafe$PNCAFE, na.rm = TRUE),
sd(cafe$PICAFE, na.rm = TRUE),
sd(cafe$XCAF, na.rm = TRUE)),
CV = c(sd(cafe$PNCAFE, na.rm = TRUE)/mean(cafe$PNCAFE, na.rm = TRUE),
sd(cafe$PICAFE, na.rm = TRUE)/mean(cafe$PICAFE, na.rm = TRUE),
sd(cafe$XCAF, na.rm = TRUE)/mean(cafe$XCAF, na.rm = TRUE))
)
desc_largo_fmt <- desc_largo %>%
mutate(across(where(is.numeric), ~ round(.x, 3)))
kable(desc_largo_fmt, caption = "Medidas de dispersión y coeficiente de variación")
| Variable | Media | Mediana | Desv_Est | CV |
|---|---|---|---|---|
| PNCAFE | 1061.032 | 1058.0 | 247.549 | 0.233 |
| PICAFE | 1201972.062 | 842419.4 | 704561.984 | 0.586 |
| XCAF | 244912.099 | 217945.7 | 96617.788 | 0.394 |
La inclusión del coeficiente de variación permite comparar la volatilidad relativa de variables medidas en escalas diferentes. Esto es importante porque la producción, el precio interno y las exportaciones no son comparables directamente en niveles absolutos.
variable1_ts <- ts(cafe$PNCAFE, start = c(year(min(cafe$FECHA)), month(min(cafe$FECHA))), frequency = 12)
variable2_ts <- ts(cafe$PICAFE, start = c(year(min(cafe$FECHA)), month(min(cafe$FECHA))), frequency = 12)
variable3_ts <- ts(cafe$XCAF, start = c(year(min(cafe$FECHA)), month(min(cafe$FECHA))), frequency = 12)
cafe$variable1 <- as.numeric(variable1_ts)
grafico_serie1 <- ggplot(cafe, aes(x = FECHA, y = variable1)) +
geom_line(color = "grey", linewidth = 0.4) +
geom_point(color = "black", size = 0.2) +
ggtitle("Variable 1: Producción de café - Serie original") +
xlab("Tiempo") +
ylab("Miles de sacos de 60 kg") +
theme_minimal()
ggplotly(grafico_serie1)
En una primera lectura, la serie de PNCAFE permite
identificar el comportamiento general de la oferta cafetera a lo largo
del tiempo. Visualmente, la producción no parece completamente estable,
ya que presenta fases de expansión, episodios de desaceleración y
algunos cambios notorios que sugieren la presencia de choques
transitorios o cambios en las condiciones productivas.
También se observa que la serie no exhibe una volatilidad extrema mes a mes, pero sí oscilaciones relevantes que justifican una lectura más profunda mediante descomposición temporal. Esto significa que, aunque la producción no cambia de manera caótica, tampoco sigue una trayectoria lineal o perfectamente predecible, por lo cual resulta útil separar tendencia, estacionalidad y residuo.
Desde el punto de vista económico, esta primera señal sugiere que la disponibilidad de café para una empresa exportadora como Café Andino Export S.A.S. puede variar de forma importante a lo largo del tiempo. Por ello, incluso antes de la descomposición STL, la serie ya anticipa que el abastecimiento no debe asumirse como completamente estable y que existen periodos más favorables que otros para la compra de materia prima.
cafe$variable2 <- as.numeric(variable2_ts)
grafico_serie2 <- ggplot(cafe, aes(x = FECHA, y = variable2)) +
geom_line(color = "grey", linewidth = 0.4) +
geom_point(color = "black", size = 0.2) +
ggtitle("Variable 2: Precio interno del café - Serie original") +
xlab("Tiempo") +
ylab("Pesos por carga de 125 kg") +
theme_minimal()
ggplotly(grafico_serie2)
La serie PICAFE revela una dinámica mucho más sensible
que la observada en la producción. A simple vista, se identifican
cambios notorios de nivel y episodios de aceleración en el precio
interno, lo que sugiere que esta variable presenta una trayectoria menos
estable y más expuesta a presiones de mercado.
En comparación con PNCAFE, aquí la volatilidad parece
ser más marcada, especialmente en ciertos tramos donde los aumentos del
precio se vuelven más intensos. Esto es importante porque indica que el
costo de adquisición del café puede cambiar con mayor rapidez que la
propia producción, generando tensiones sobre la liquidez y los márgenes
de una empresa exportadora.
En términos de extracción de señales, esta primera lectura sugiere
que PICAFE contiene una señal de costo especialmente
relevante. La serie no solo refleja movimientos de corto plazo, sino
también posibles cambios persistentes en el entorno de compra, razón por
la cual la descomposición y el análisis de tendencia resultan
indispensables.
cafe$variable3 <- as.numeric(variable3_ts)
grafico_serie3 <- ggplot(cafe, aes(x = FECHA, y = variable3)) +
geom_line(color = "grey", linewidth = 0.4) +
geom_point(color = "black", size = 0.2) +
ggtitle("Variable 3: Exportaciones de café - Serie original") +
xlab("Tiempo") +
ylab("Miles de dólares") +
theme_minimal()
ggplotly(grafico_serie3)
La serie XCAF muestra la evolución del frente exportador
y permite observar cambios importantes en el valor de las ventas
externas de café a lo largo del tiempo. Visualmente, se distinguen
periodos de mayor dinamismo y otros de menor intensidad, lo cual sugiere
que el desempeño exportador no ha sido homogéneo durante toda la
muestra.
Aunque la serie presenta oscilaciones, su comportamiento parece responder menos a ruido puramente aleatorio y más a fases de expansión o ajuste. Esto hace pensar que detrás del movimiento mensual pueden existir señales persistentes asociadas a precios internacionales, cantidades exportadas o cambios en el contexto comercial externo.
Para una firma como Café Andino Export S.A.S., esta señal es especialmente importante porque anticipa el grado de dinamismo del mercado internacional. Una serie exportadora con cambios notorios de nivel y con tramos de expansión sostenida puede abrir oportunidades, pero también exige distinguir entre movimientos transitorios y tendencias de mayor duración.
stl_decomp_var1 <- stl(variable1_ts, s.window = "periodic")
stl_df_var1 <- data.frame(
Time = rep(time(variable1_ts), 4),
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))
)
p1 <- 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 = "Descomposición temporal de la variable 1: PNCAFE",
x = "Tiempo",
y = "Valor")
ggplotly(p1)
La descomposición temporal de PNCAFE permite separar con
mayor claridad los componentes que estaban mezclados en la serie
original. El componente de tendencia revela si la oferta cafetera siguió
una trayectoria general de crecimiento, estancamiento o desaceleración,
mientras que el componente estacional muestra si existen patrones que se
repiten de manera relativamente regular dentro del año.
Si el componente estacional resulta visible y recurrente, esto sugiere que parte de la producción responde a ciclos propios de cosecha y calendario agrícola. En cambio, el residuo recoge movimientos no explicados por tendencia o estacionalidad, lo que ayuda a identificar episodios de volatilidad transitoria o choques puntuales.
Desde la perspectiva de extracción de señales, esta descomposición es especialmente valiosa porque permite distinguir entre una caída temporal de la producción y un debilitamiento más persistente de la oferta. Para la empresa hipotética, esa diferencia es crucial, ya que no implica la misma respuesta estratégica enfrentar un bache transitorio que una reducción más estructural en la disponibilidad de café.
stl_decomp_var2 <- stl(variable2_ts, s.window = "periodic")
stl_df_var2 <- data.frame(
Time = rep(time(variable2_ts), 4),
Value = c(stl_decomp_var2$time.series[, "seasonal"],
stl_decomp_var2$time.series[, "trend"],
stl_decomp_var2$time.series[, "remainder"],
variable2_ts),
Component = rep(c("Estacional", "Tendencia", "Residuo", "Serie Original"),
each = length(variable2_ts))
)
p2 <- ggplot(stl_df_var2, aes(x = Time, y = Value, color = Component)) +
geom_line() +
facet_wrap(~Component, scales = "free_y", ncol = 1) +
theme_minimal() +
labs(title = "Descomposición temporal de la variable 2: PICAFE",
x = "Tiempo",
y = "Valor")
ggplotly(p2)
En PICAFE, la descomposición STL resulta especialmente
útil porque permite diferenciar si los aumentos observados en el precio
interno obedecen a una trayectoria persistente o a fluctuaciones más
transitorias. El componente de tendencia ayuda a identificar si el costo
de compra está entrando en una fase estructuralmente más alta, mientras
que el componente estacional permite verificar si existen meses en los
que el precio tiende a comportarse de forma recurrente.
Si la serie presenta un residuo amplio o irregular, ello puede interpretarse como señal de volatilidad adicional no explicada por el patrón estacional ni por la tendencia. En otras palabras, una parte del comportamiento del precio puede estar respondiendo a choques coyunturales, tensiones de mercado o episodios extraordinarios.
Esta lectura es muy importante para una exportadora, porque no es lo mismo enfrentar un alza temporal del precio que un cambio persistente en la estructura de costos. La extracción de señales permite justamente separar esos planos y mejorar la interpretación económica de la serie. ## Extracción señales variable 3
stl_decomp_var3 <- stl(variable3_ts, s.window = "periodic")
stl_df_var3 <- data.frame(
Time = rep(time(variable3_ts), 4),
Value = c(stl_decomp_var3$time.series[, "seasonal"],
stl_decomp_var3$time.series[, "trend"],
stl_decomp_var3$time.series[, "remainder"],
variable3_ts),
Component = rep(c("Estacional", "Tendencia", "Residuo", "Serie Original"),
each = length(variable3_ts))
)
p3 <- ggplot(stl_df_var3, aes(x = Time, y = Value, color = Component)) +
geom_line() +
facet_wrap(~Component, scales = "free_y", ncol = 1) +
theme_minimal() +
labs(title = "Descomposición temporal de la variable 3: XCAF",
x = "Tiempo",
y = "Valor")
ggplotly(p3)
La descomposición de XCAF ayuda a identificar si el
dinamismo exportador responde principalmente a una tendencia de fondo, a
patrones estacionales o a fluctuaciones irregulares. El componente de
tendencia muestra si el valor exportado ha venido ganando fuerza de
manera persistente, mientras que el componente estacional permite
detectar si existen meses con comportamientos recurrentemente más
favorables para el comercio exterior.
El residuo, por su parte, resulta útil para reconocer episodios de variación no explicados por los patrones sistemáticos de la serie. Si este componente presenta oscilaciones amplias, puede sugerir la presencia de shocks externos, cambios de demanda, ajustes de precios internacionales o alteraciones coyunturales en la dinámica exportadora.
En términos de señales, esta descomposición permite no confundir un repunte exportador de corto plazo con una mejora sostenida del mercado externo. Esa diferencia es clave para una empresa como Café Andino Export S.A.S., ya que condiciona decisiones sobre expansión comercial, contratos y planeación de ventas.
variable1_sa <- variable1_ts - stl_decomp_var1$time.series[, "seasonal"]
variable2_sa <- variable2_ts - stl_decomp_var2$time.series[, "seasonal"]
variable3_sa <- variable3_ts - stl_decomp_var3$time.series[, "seasonal"]
fechas_var1 <- cafe$FECHA
grafico_ajustada_var1 <- ggplot() +
geom_line(aes(x = fechas_var1, y = as.numeric(variable1_ts), color = "Serie Original"), linewidth = 0.5) +
geom_line(aes(x = fechas_var1, y = as.numeric(variable1_sa), color = "Serie Ajustada"), linewidth = 0.7) +
scale_color_manual(values = c("Serie Original" = "grey", "Serie Ajustada" = "black")) +
ggtitle("Variable 1: Serie original vs ajustada por estacionalidad") +
xlab("Tiempo") +
ylab("Miles de sacos de 60 kg") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
ggplotly(grafico_ajustada_var1)
La comparación entre la serie original y la serie ajustada por
estacionalidad permite evaluar qué tan importante es el componente
estacional dentro del comportamiento de PNCAFE. Si ambas
trayectorias son relativamente cercanas, la estacionalidad no domina
completamente la serie; si se separan con claridad en ciertos periodos,
entonces el calendario productivo tiene un peso importante sobre la
dinámica observada.
Este contraste es útil porque ayuda a leer la producción con mayor precisión. La serie ajustada muestra mejor el movimiento subyacente de la oferta, eliminando parte de las fluctuaciones repetitivas que podrían dificultar la interpretación de cambios más persistentes. ## Gráfico serie original VS ajustada Variable 2
fechas_var2 <- cafe$FECHA
grafico_ajustada_var2 <- ggplot() +
geom_line(aes(x = fechas_var2, y = as.numeric(variable2_ts), color = "Serie Original"), linewidth = 0.5) +
geom_line(aes(x = fechas_var2, y = as.numeric(variable2_sa), color = "Serie Ajustada"), linewidth = 0.7) +
scale_color_manual(values = c("Serie Original" = "grey", "Serie Ajustada" = "black")) +
ggtitle("Variable 2: Serie original vs ajustada por estacionalidad") +
xlab("Tiempo") +
ylab("Pesos por carga de 125 kg") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
ggplotly(grafico_ajustada_var2)
En el caso de PICAFE, comparar la serie original con la
ajustada por estacionalidad permite identificar si parte de las
oscilaciones del precio responde a patrones recurrentes del año o si,
por el contrario, predominan cambios de tendencia y choques irregulares.
Cuando la diferencia entre ambas series es reducida, ello sugiere que el
precio está más condicionado por movimientos de fondo que por una
estacionalidad fuerte.
Esta lectura resulta útil para la empresa, porque un precio con baja estacionalidad y alta tendencia persistente requiere respuestas distintas a las que exige una serie con oscilaciones recurrentes y predecibles. En otras palabras, el ajuste estacional ayuda a distinguir entre presión estructural de costos y variaciones esperables del calendario.
fechas_var3 <- cafe$FECHA
grafico_ajustada_var3 <- ggplot() +
geom_line(aes(x = fechas_var3, y = as.numeric(variable3_ts), color = "Serie Original"), linewidth = 0.5) +
geom_line(aes(x = fechas_var3, y = as.numeric(variable3_sa), color = "Serie Ajustada"), linewidth = 0.7) +
scale_color_manual(values = c("Serie Original" = "grey", "Serie Ajustada" = "black")) +
ggtitle("Variable 3: Serie original vs ajustada por estacionalidad") +
xlab("Tiempo") +
ylab("Miles de dólares") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
ggplotly(grafico_ajustada_var3)
La comparación entre la serie original y la serie ajustada por
estacionalidad en XCAF permite observar si el
comportamiento exportador responde a ciclos recurrentes del año o si
está dominado por cambios más persistentes del entorno externo. Si la
serie ajustada conserva la mayor parte del movimiento observado en la
serie original, entonces la señal exportadora depende más de la
tendencia que de la estacionalidad.
Esto es especialmente importante porque permite evitar una
interpretación apresurada de los picos exportadores. No todo aumento en
XCAF implica necesariamente un cambio estructural del
mercado; parte de esos movimientos puede obedecer a patrones temporales
que conviene aislar para leer mejor la señal de fondo.
tendencia_var1 <- as.numeric(stl_decomp_var1$time.series[, "trend"])
grafico_tendencia_var1 <- ggplot() +
geom_line(aes(x = fechas_var1, y = as.numeric(variable1_ts), color = "Serie Original"), linewidth = 0.7) +
geom_line(aes(x = fechas_var1, y = tendencia_var1, color = "Tendencia"), linewidth = 0.8) +
scale_color_manual(values = c("Serie Original" = "grey", "Tendencia" = "black")) +
ggtitle("Variable 1: Serie original vs tendencia") +
xlab("Tiempo") +
ylab("Miles de sacos de 60 kg") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
ggplotly(grafico_tendencia_var1)
El contraste entre la serie original y la tendencia de
PNCAFE permite observar con mayor claridad la trayectoria
de fondo de la producción cafetera. Mientras la serie original recoge
oscilaciones mensuales y posibles efectos estacionales, la tendencia
resume el movimiento persistente de la oferta sectorial.
Si la distancia entre ambas líneas se amplía en determinados periodos, ello sugiere la presencia de fluctuaciones transitorias o episodios de volatilidad alrededor del comportamiento tendencial. En cambio, cuando ambas trayectorias se mueven de manera cercana, la serie puede interpretarse como relativamente estable en torno a su tendencia.
Desde la perspectiva económica, esta comparación permite distinguir entre una caída momentánea de la producción y una desaceleración más persistente. Esa diferencia es crucial para una empresa exportadora, porque las decisiones de abastecimiento cambian según se trate de una perturbación temporal o de una señal más estructural.
tendencia_var2 <- as.numeric(stl_decomp_var2$time.series[, "trend"])
grafico_tendencia_var2 <- ggplot() +
geom_line(aes(x = fechas_var2, y = as.numeric(variable2_ts), color = "Serie Original"), linewidth = 0.7) +
geom_line(aes(x = fechas_var2, y = tendencia_var2, color = "Tendencia"), linewidth = 0.8) +
scale_color_manual(values = c("Serie Original" = "grey", "Tendencia" = "black")) +
ggtitle("Variable 2: Serie original vs tendencia") +
xlab("Tiempo") +
ylab("Pesos por carga de 125 kg") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
ggplotly(grafico_tendencia_var2)
En PICAFE, comparar la serie original con la tendencia
es especialmente útil para evaluar si el aumento del precio interno es
un fenómeno persistente o si responde a episodios transitorios de
tensión. La tendencia muestra el movimiento de fondo del costo de
adquisición, mientras que la serie original permite observar qué tan
alejados de ese comportamiento se encuentran los datos mensuales.
Cuando las desviaciones de la serie original frente a la tendencia son grandes, se evidencia mayor volatilidad en el precio interno. Esto implica que el entorno de costos no solo puede estar subiendo, sino también volviéndose más incierto, lo que complica la planeación financiera de la empresa.
Por tanto, esta comparación no solo informa sobre el nivel del precio, sino también sobre su estabilidad relativa. Una tendencia ascendente acompañada de alta dispersión mensual representa un escenario más exigente que una tendencia similar con oscilaciones moderadas. ## Tendencia Variable 3
tendencia_var3 <- as.numeric(stl_decomp_var3$time.series[, "trend"])
grafico_tendencia_var3 <- ggplot() +
geom_line(aes(x = fechas_var3, y = as.numeric(variable3_ts), color = "Serie Original"), linewidth = 0.7) +
geom_line(aes(x = fechas_var3, y = tendencia_var3, color = "Tendencia"), linewidth = 0.8) +
scale_color_manual(values = c("Serie Original" = "grey", "Tendencia" = "black")) +
ggtitle("Variable 3: Serie original vs tendencia") +
xlab("Tiempo") +
ylab("Miles de dólares") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
ggplotly(grafico_tendencia_var3)
La relación entre la serie original y la tendencia en
XCAF permite evaluar si el comportamiento exportador
responde a una expansión sostenida o a episodios más pasajeros. La
tendencia resume la señal persistente del mercado externo, mientras que
la serie original muestra los desvíos de corto plazo alrededor de ese
patrón.
Cuando la serie observada se separa fuertemente de la tendencia, puede interpretarse como señal de volatilidad coyuntural en las exportaciones. En cambio, si ambas líneas guardan cercanía en buena parte del periodo, ello sugiere que el frente externo sigue una trayectoria relativamente consistente.
Para la empresa exportadora, esta lectura es fundamental. Un mercado externo con tendencia favorable pero alta irregularidad exige una estrategia distinta a la de un mercado cuya expansión es más estable y predecible.
tasa_crecimiento_var1 <- (as.numeric(variable1_ts)[13:length(variable1_ts)] / as.numeric(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
fechas_corregidas_var1 <- cafe$FECHA[13:length(cafe$FECHA)]
grafico_crecimiento_var1 <- ggplot() +
geom_line(aes(x = fechas_corregidas_var1, y = tasa_crecimiento_var1), color = "grey", linewidth = 0.7) +
geom_line(aes(x = fechas_corregidas_var1, y = tasa_tendencia_var1), color = "black", linewidth = 0.8, linetype = "dashed") +
ggtitle("Variable 1: Tasa de crecimiento anual de la serie original y la tendencia") +
xlab("Tiempo") +
ylab("% de crecimiento anual") +
theme_minimal()
ggplotly(grafico_crecimiento_var1)
La tasa de crecimiento anual de PNCAFE permite
identificar con mayor nitidez los momentos de aceleración y
desaceleración de la producción. A diferencia del gráfico en niveles,
esta transformación resalta los cambios relativos y facilita detectar
quiebres o giros en la dinámica de oferta.
Cuando la tasa de crecimiento de la serie original fluctúa mucho alrededor de la tendencia de crecimiento, se evidencia la presencia de volatilidad de corto plazo. En cambio, cuando ambas trayectorias convergen, puede inferirse una evolución más estable del ritmo de crecimiento productivo.
Esta herramienta es muy útil dentro del enfoque de extracción de señales porque permite ver no solo cuánto se produce, sino a qué velocidad cambia la producción. Para una firma exportadora, el ritmo de cambio de la oferta puede ser tan importante como su nivel absoluto.
tasa_crecimiento_var2 <- (as.numeric(variable2_ts)[13:length(variable2_ts)] / as.numeric(variable2_ts)[1:(length(variable2_ts)-12)] - 1) * 100
tasa_tendencia_var2 <- (tendencia_var2[13:length(tendencia_var2)] / tendencia_var2[1:(length(tendencia_var2)-12)] - 1) * 100
fechas_corregidas_var2 <- cafe$FECHA[13:length(cafe$FECHA)]
grafico_crecimiento_var2 <- ggplot() +
geom_line(aes(x = fechas_corregidas_var2, y = tasa_crecimiento_var2), color = "grey", linewidth = 0.7) +
geom_line(aes(x = fechas_corregidas_var2, y = tasa_tendencia_var2), color = "black", linewidth = 0.8, linetype = "dashed") +
ggtitle("Variable 2: Tasa de crecimiento anual de la serie original y la tendencia") +
xlab("Tiempo") +
ylab("% de crecimiento anual") +
theme_minimal()
ggplotly(grafico_crecimiento_var2)
La tasa de crecimiento anual de PICAFE permite observar
con claridad los episodios en los que el costo interno se acelera o
desacelera. Esta lectura es particularmente útil porque el problema
empresarial no depende solo del nivel del precio, sino también de la
velocidad con que este cambia.
Si la tasa de crecimiento anual muestra picos pronunciados o movimientos muy erráticos, ello sugiere un entorno de costos volátil y potencialmente difícil de gestionar. Si, en cambio, la tasa tendencial se modera, podría interpretarse como una señal de estabilización relativa del precio interno.
Desde el punto de vista gerencial, esta señal es clave para anticipar necesidades de liquidez, ajustes de inventario y renegociación de condiciones comerciales. Un precio alto puede ser manejable si crece lentamente; un precio que acelera con fuerza suele representar un riesgo mayor.
tasa_crecimiento_var3 <- (as.numeric(variable3_ts)[13:length(variable3_ts)] / as.numeric(variable3_ts)[1:(length(variable3_ts)-12)] - 1) * 100
tasa_tendencia_var3 <- (tendencia_var3[13:length(tendencia_var3)] / tendencia_var3[1:(length(tendencia_var3)-12)] - 1) * 100
fechas_corregidas_var3 <- cafe$FECHA[13:length(cafe$FECHA)]
grafico_crecimiento_var3 <- ggplot() +
geom_line(aes(x = fechas_corregidas_var3, y = tasa_crecimiento_var3), color = "grey", linewidth = 0.7) +
geom_line(aes(x = fechas_corregidas_var3, y = tasa_tendencia_var3), color = "black", linewidth = 0.8, linetype = "dashed") +
ggtitle("Variable 3: Tasa de crecimiento anual de la serie original y la tendencia") +
xlab("Tiempo") +
ylab("% de crecimiento anual") +
theme_minimal()
ggplotly(grafico_crecimiento_var3)
La tasa de crecimiento anual de XCAF permite detectar
con mayor precisión los momentos en que el dinamismo exportador se
fortalece o pierde impulso. Esta transformación resalta los cambios
relativos en el valor exportado y permite distinguir entre una expansión
sostenida y un crecimiento ocasional.
Cuando la tasa observada presenta oscilaciones fuertes frente a la tendencia, la señal exportadora puede considerarse más volátil. Si, por el contrario, ambas líneas se mueven de forma relativamente cercana, el mercado externo puede interpretarse como más estable en su trayectoria de crecimiento.
Para una empresa exportadora, esta lectura es especialmente útil porque permite evaluar no solo el tamaño del mercado externo, sino también su estabilidad. Un entorno exportador creciente pero muy irregular exige más cautela que uno con expansión sostenida y menos volatilidad. # Herramientas complementarias de señal
cafe <- cafe %>%
mutate(
mm12_pncafe = rollmean(PNCAFE, 12, fill = NA, align = "right"),
mm12_picafe = rollmean(PICAFE, 12, fill = NA, align = "right"),
mm12_xcaf = rollmean(XCAF, 12, fill = NA, align = "right")
)
ggplot(cafe, aes(FECHA)) +
geom_line(aes(y = PNCAFE), color = "gray70") +
geom_line(aes(y = mm12_pncafe), color = "#1b7837", linewidth = 1) +
labs(title = "PNCAFE y media móvil de 12 meses", x = "Fecha", y = "Miles de sacos") +
theme_minimal()
ggplot(cafe, aes(FECHA)) +
geom_line(aes(y = PICAFE), color = "gray70") +
geom_line(aes(y = mm12_picafe), color = "#762a83", linewidth = 1) +
labs(title = "PICAFE y media móvil de 12 meses", x = "Fecha", y = "Pesos por carga") +
theme_minimal()
ggplot(cafe, aes(FECHA)) +
geom_line(aes(y = XCAF), color = "gray70") +
geom_line(aes(y = mm12_xcaf), color = "#b2182b", linewidth = 1) +
labs(title = "XCAF y media móvil de 12 meses", x = "Fecha", y = "Miles de dólares") +
theme_minimal()
cafe <- cafe %>%
mutate(
vm_pncafe = 100 * (PNCAFE / lag(PNCAFE) - 1),
vm_picafe = 100 * (PICAFE / lag(PICAFE) - 1),
vm_xcaf = 100 * (XCAF / lag(XCAF) - 1),
va_pncafe = 100 * (PNCAFE / lag(PNCAFE, 12) - 1),
va_picafe = 100 * (PICAFE / lag(PICAFE, 12) - 1),
va_xcaf = 100 * (XCAF / lag(XCAF, 12) - 1)
)
ggplot(cafe, aes(FECHA, va_pncafe)) +
geom_line(color = "#1b7837", linewidth = 0.8) +
geom_hline(yintercept = 0, linetype = 2) +
labs(title = "Variación anual de PNCAFE", x = "Fecha", y = "%") +
theme_minimal()
ggplot(cafe, aes(FECHA, va_picafe)) +
geom_line(color = "#762a83", linewidth = 0.8) +
geom_hline(yintercept = 0, linetype = 2) +
labs(title = "Variación anual de PICAFE", x = "Fecha", y = "%") +
theme_minimal()
ggplot(cafe, aes(FECHA, va_xcaf)) +
geom_line(color = "#b2182b", linewidth = 0.8) +
geom_hline(yintercept = 0, linetype = 2) +
labs(title = "Variación anual de XCAF", x = "Fecha", y = "%") +
theme_minimal()
correlaciones <- cafe %>%
select(PNCAFE, PICAFE, XCAF) %>%
cor(use = "complete.obs")
kable(round(correlaciones, 3), caption = "Matriz de correlaciones entre variables")
| PNCAFE | PICAFE | XCAF | |
|---|---|---|---|
| PNCAFE | 1.000 | 0.091 | 0.238 |
| PICAFE | 0.091 | 1.000 | 0.856 |
| XCAF | 0.238 | 0.856 | 1.000 |
corrplot(correlaciones, method = "color", addCoef.col = "black", tl.col = "black")
cafe_z <- cafe %>%
mutate(
z_PNCAFE = as.numeric(scale(PNCAFE)),
z_PICAFE = as.numeric(scale(PICAFE)),
z_XCAF = as.numeric(scale(XCAF))
) %>%
select(FECHA, z_PNCAFE, z_PICAFE, z_XCAF) %>%
pivot_longer(-FECHA, names_to = "variable", values_to = "valor")
ggplot(cafe_z, aes(FECHA, valor, color = variable)) +
geom_line(linewidth = 0.9) +
labs(title = "Comparación de señales estandarizadas", x = "Fecha", y = "Valor estandarizado") +
theme_minimal()
Un aspecto adicional muy pertinente para comprender la dinámica reciente del sector cafetero colombiano es el efecto del cambio climático sobre la producción y la calidad del café. Este factor no debe considerarse accesorio, ya que afecta directamente la productividad, la estabilidad de la oferta y la planeación de empresas exportadoras.
Diversos reportes recientes han advertido que el aumento de los días con calor perjudicial para el café y la persistencia de eventos climáticos extremos están elevando la vulnerabilidad del cultivo. En el caso colombiano, las lluvias prolongadas también han sido señaladas como un factor que afecta floración, cosecha y rendimiento.
Para una empresa como Café Andino Export S.A.S.,
esto implica que la señal de PNCAFE no depende únicamente
del mercado, sino también de condiciones agroclimáticas que pueden
alterar la disponibilidad de café y la calidad del grano. Por ello, la
lectura de la producción debe complementarse con una visión de riesgo
climático.
Otro tema relevante es la relación entre sostenibilidad y competitividad en la caficultura. La sostenibilidad no debe entenderse como un agregado reputacional, sino como una condición para la permanencia productiva, la estabilidad del ingreso y la capacidad de responder a las exigencias de mercados más sofisticados.
La institucionalidad cafetera ha enfatizado que la sostenibilidad debe abordarse desde dimensiones económicas, ambientales, sociales y de gobernanza. Esto es importante porque muestra que la competitividad del sector no depende únicamente de precios altos o de mayor volumen exportado, sino también de productividad, manejo ambiental, trazabilidad y fortalecimiento de la base productiva.
Desde la perspectiva empresarial, una estrategia sostenible puede fortalecer relaciones con proveedores, reducir vulnerabilidades de la cadena de abastecimiento y mejorar el posicionamiento comercial en mercados exigentes.
Un tercer elemento adicional es la necesidad de avanzar hacia estrategias de mayor valor agregado. Aunque buena parte de las exportaciones cafeteras sigue concentrada en café verde, existen señales de que segmentos diferenciados pueden ofrecer mayores oportunidades de crecimiento y resiliencia.
Reportes sectoriales recientes muestran que el café tostado colombiano creció 16% en exportaciones, lo que sugiere que la competitividad futura no depende solo de vender más volumen, sino también de capturar más valor mediante transformación, diferenciación, calidad y marca.
Para Café Andino Export S.A.S., esto significa que
una estrategia basada exclusivamente en café estándar puede resultar más
vulnerable a la presión de costos. En cambio, diversificar hacia cafés
especiales, tostados o con atributos diferenciados puede mejorar la
capacidad de capturar rentabilidad incluso en entornos de mayor presión
sobre PICAFE.
La variable PNCAFE debe interpretarse como la señal
principal de disponibilidad de oferta del sector cafetero. Cuando la
tendencia de esta serie es ascendente, la empresa enfrenta mejores
condiciones de abastecimiento. Cuando se debilita, aumenta la
probabilidad de restricciones de oferta y mayor competencia por el
grano.
La variable PICAFE constituye la señal más cercana al
costo operativo de la empresa. Un crecimiento persistente de esta serie
puede indicar presión financiera, mayor necesidad de liquidez y
deterioro de márgenes, especialmente si la firma no logra trasladar ese
aumento al precio de venta externo.
La variable XCAF resume la señal del entorno exportador.
Una trayectoria creciente sugiere oportunidades comerciales y mayor
dinamismo del mercado externo. Sin embargo, su lectura aislada sería
insuficiente, porque exportaciones fuertes pueden coexistir con costos
internos elevados o restricciones de oferta.
La combinación de PNCAFE, PICAFE y
XCAF permite construir una lectura económica más completa
del entorno de la empresa. Un escenario favorable para Café
Andino Export S.A.S. sería aquel en el que la producción se
expande o se mantiene estable, el precio interno no presenta aumentos
excesivos y el mercado exportador conserva dinamismo.
En contraste, si la producción cae mientras el precio interno sube, la empresa enfrenta una doble presión: menor disponibilidad de café y mayores costos de compra. Si a esto se suma una desaceleración del frente externo, el deterioro del entorno empresarial sería aún mayor.
Esta lectura conjunta es especialmente coherente con la coyuntura reciente del sector cafetero colombiano, que ha combinado exportaciones fuertes, ingresos cafeteros elevados y restricciones productivas ligadas a factores climáticos y de oferta.
Desde una perspectiva crítica, uno de los errores más comunes sería
evaluar el desempeño del negocio cafetero únicamente a partir del valor
exportado. Esa lectura sería incompleta, porque el crecimiento de
XCAF no implica automáticamente una mejora equivalente en
rentabilidad empresarial.
También sería erróneo interpretar un aumento del precio interno como una señal unívocamente positiva o negativa. Para el productor puede significar mejores ingresos, pero para la empresa exportadora implica mayores costos de adquisición, más necesidad de capital de trabajo y más riesgo financiero.
Además, el peso social de la caficultura obliga a una lectura más amplia. Dado que la base productiva está dominada por pequeños caficultores, las señales del sector también deben leerse en términos de sostenibilidad territorial, estabilidad del ingreso rural y resiliencia del sistema productivo.
Con base en las señales observadas, Café Andino Export S.A.S. debería adoptar una estrategia basada en monitoreo permanente, anticipación, sostenibilidad y diversificación.
Se proponen las siguientes recomendaciones: - Implementar un tablero
mensual de seguimiento de PNCAFE, PICAFE y
XCAF, acompañado por indicadores climáticos y logísticos. -
Reforzar acuerdos de compra anticipada o relaciones estables con
cooperativas y proveedores cuando PNCAFE muestre señales
persistentes de desaceleración o caída. - Ajustar inventarios, liquidez
y política de financiamiento cuando PICAFE entre en fases
de crecimiento acelerado. - Aprovechar fases expansivas de
XCAF para consolidar contratos, ampliar destinos de
exportación y fortalecer la presencia comercial. - Desarrollar líneas de
mayor valor agregado, como cafés especiales, tostados o con trazabilidad
diferenciada. - Incorporar criterios de sostenibilidad económica,
ambiental y social dentro de la estrategia empresarial. - Fortalecer el
monitoreo climático y la gestión de riesgo, dado que las lluvias
prolongadas y otros choques exógenos ya muestran efectos sobre
productividad y estabilidad de la oferta.
Estas recomendaciones responden a un entorno en el que una empresa exportadora ya no puede depender exclusivamente de un buen momento del mercado externo. También necesita capacidad para adaptarse a choques climáticos, presión de costos y cambios en la estructura de demanda internacional.
Aunque las técnicas de extracción de señales permiten identificar patrones relevantes en las series, este ejercicio presenta algunas limitaciones. En primer lugar, el análisis se concentra en tres variables agregadas y no incorpora explícitamente otros factores que también influyen sobre el sector, como tasa de cambio, costos logísticos, precios internacionales de referencia o variables meteorológicas específicas.
En segundo lugar, la interpretación de las señales no debe asumirse como evidencia causal estricta. La descomposición temporal y la lectura de tendencias ofrecen información útil para la toma de decisiones, pero no sustituyen un modelo econométrico estructural.
Finalmente, el caso de Café Andino Export S.A.S. corresponde a una empresa hipotética. En consecuencia, las recomendaciones formuladas deben entenderse como lineamientos estratégicos plausibles y no como un plan operativo cerrado.
El sector cafetero colombiano constituye un caso especialmente
adecuado para aplicar técnicas de extracción de señales porque combina
con claridad una variable de oferta (PNCAFE), una variable
de costo (PICAFE) y una variable de resultado externo
(XCAF).
El análisis realizado muestra que cada serie aporta una dimensión específica del entorno cafetero, pero que la mayor utilidad analítica surge de su interpretación conjunta. Una empresa exportadora no debería tomar decisiones solo con base en el comportamiento de una variable, sino a partir de la interacción entre producción, costo interno, desempeño exportador, sostenibilidad y riesgo climático.
Finalmente, el ejercicio confirma que el café colombiano no puede analizarse únicamente como un commodity exportable. Se trata de una actividad con enorme peso económico, social y territorial, cuya dinámica reciente combina oportunidades externas, tensiones productivas y retos estratégicos de largo plazo.