# ── Carga de librerías ────────────────────────────────────────────────────────
library(readxl) # Lectura de archivos Excel
library(tidyverse) # Manipulación y visualización de datos
library(lubridate) # Manejo de fechas
library(forecast) # Modelos ARIMA / SARIMA
library(tseries) # Pruebas de raíz unitaria (ADF)
library(zoo) # Objetos de series de tiempo irregulares
library(ggplot2) # Gráficos
library(gridExtra) # Composición de gráficos
library(scales) # Formato de ejes
library(knitr) # Tablas en HTML
library(kableExtra) # Tablas enriquecidas
library(seasonal) # Descomposición STL / X-13
library(FinTS) # Prueba ARCH
library(Metrics) # Métricas de error (RMSE, MAE)El sector cafetero colombiano representa una de las apuestas económicas más emblemáticas del país. Colombia ocupa históricamente un lugar privilegiado en el mercado mundial del café, siendo reconocida como productora de uno de los cafés suaves lavados de mayor calidad a nivel global. Este sector involucra a más de 540 mil familias caficultoras distribuidas en 22 departamentos del territorio nacional, generando empleo directo e indirecto en zonas rurales de alta vulnerabilidad socioeconómica. Adicionalmente, el café representa una fuente significativa de divisas para Colombia, siendo uno de los principales productos de exportación no minero del país.
La empresa hipotética sobre la cual se desarrolla este análisis es CafExport S.A.S., una empresa comercializadora y exportadora de café colombiano con sede en Bogotá y operaciones en los departamentos de Huila, Nariño y Antioquia. CafExport se especializa en la exportación de cafés especiales y de origen hacia mercados de Europa, Norteamérica y Asia, actuando como intermediario entre los productores regionales y los compradores internacionales. La empresa requiere análisis continuos de las variables del mercado cafetero para tomar decisiones estratégicas de compra, almacenamiento, cobertura de riesgo cambiario y negociación de contratos futuros.
Los datos utilizados en este informe corresponden a la base de datos mensual suministrada por la Pontificia Universidad Javeriana de Cali, con información comprendida entre enero de 2012 y diciembre de 2025 (168 observaciones mensuales). Las variables provienen de la Federación Nacional de Cafeteros de Colombia y el DANE, garantizando la trazabilidad y rigor estadístico de la información.
Para el análisis se seleccionaron tres variables estrechamente vinculadas a la dinámica del mercado cafetero colombiano:
Definición: Miles de sacos de 60 kg de café verde equivalente producidos mensualmente en Colombia.
Justificación: La producción es el eje central de la cadena de valor del sector cafetero. Sus fluctuaciones mensuales responden a fenómenos climáticos (El Niño/La Niña), al ciclo bienal de producción del cafeto (Coffea arabica), a los programas de renovación de cafetales implementados por la Federación Nacional de Cafeteros, y a las condiciones de la cosecha principal (octubre–febrero) y la cosecha mitaca (abril–julio). Para CafExport, conocer la trayectoria de la producción es fundamental para anticipar la disponibilidad del grano y planificar los volúmenes de compra con anticipación.
Definición: Pesos colombianos por carga de 125 kg de café pergamino seco.
Justificación: El precio interno de compra es la variable financiera más relevante para los costos operativos de CafExport. Este precio es fijado diariamente por la Federación Nacional de Cafeteros como referencia nacional y está determinado por el precio internacional del grano (bolsa de Nueva York), la tasa de cambio peso/dólar y los ajustes por calidad. Las variaciones del precio interno impactan directamente la estructura de costos de la empresa y su capacidad de márgenes en los contratos de exportación. Analizar su tendencia y estacionalidad permite mejorar las estrategias de compra y cobertura financiera.
Definición: Miles de dólares exportados mensualmente en concepto de café colombiano.
Justificación: Las exportaciones representan el principal ingreso en divisas para el sector y el indicador más directo del desempeño comercial de empresas como CafExport. Esta variable sintetiza tanto la producción disponible para exportación como el precio internacional y la demanda externa del café colombiano. Su análisis permite identificar ciclos de expansión y contracción del mercado, evaluar la competitividad exportadora del sector y proyectar los ingresos futuros de la empresa. La variable también es sensible a la tasa de cambio: una depreciación del peso fortalece los ingresos en moneda local, mientras que una apreciación los comprime.
# ── Lectura del archivo Excel ─────────────────────────────────────────────────
df_raw <- read_excel("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"))
# ── Selección de variables de interés ────────────────────────────────────────
df <- df_raw %>%
select(FECHA, PNCAFE, PICAFE, XCAF) %>%
mutate(FECHA = as.Date(FECHA)) %>%
arrange(FECHA)
# ── Vista preliminar ──────────────────────────────────────────────────────────
kable(head(df, 12),
caption = "Tabla 1. Primeras 12 observaciones — Variables cafeteras (2012)",
col.names = c("Fecha", "Prod. Café (miles sacos)", "Precio Interno (COP/carga)", "Exportaciones Café (miles USD)"),
format.args = list(big.mark = ",", digits = 2),
align = "c") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE, font_size = 12)| Fecha | Prod. Café (miles sacos) | Precio Interno (COP/carga) | Exportaciones Café (miles USD) |
|---|---|---|---|
| 2012-01-01 | 535 | 874,863 | 197,296 |
| 2012-02-01 | 571 | 826,220 | 186,693 |
| 2012-03-01 | 576 | 727,565 | 203,636 |
| 2012-04-01 | 580 | 703,033 | 121,442 |
| 2012-05-01 | 689 | 670,335 | 167,644 |
| 2012-06-01 | 714 | 592,504 | 162,433 |
| 2012-07-01 | 668 | 648,097 | 151,832 |
| 2012-08-01 | 565 | 611,621 | 180,244 |
| 2012-09-01 | 519 | 623,425 | 123,550 |
| 2012-10-01 | 653 | 589,464 | 159,793 |
| 2012-11-01 | 770 | 538,683 | 144,269 |
| 2012-12-01 | 904 | 521,262 | 166,159 |
# ── Tabla de estadísticas descriptivas ───────────────────────────────────────
desc_stats <- df %>%
select(-FECHA) %>%
summarise(across(everything(), list(
N = ~n(),
Media = ~mean(., na.rm = TRUE),
Mediana = ~median(., na.rm = TRUE),
Des.Est. = ~sd(., na.rm = TRUE),
Mínimo = ~min(., na.rm = TRUE),
Máximo = ~max(., na.rm = TRUE),
CV = ~(sd(., na.rm = TRUE)/mean(., na.rm = TRUE))*100
))) %>%
pivot_longer(everything(),
names_to = c("Variable", "Estadístico"),
names_sep = "_(?=[^_]+$)") %>%
pivot_wider(names_from = "Estadístico", values_from = "value")
kable(desc_stats,
caption = "Tabla 2. Estadísticas Descriptivas — Variables Cafeteras (Ene 2012 – Dic 2025)",
digits = 2,
format.args = list(big.mark = ","),
align = "c") %>%
kable_styling(bootstrap_options = c("striped","hover","condensed"),
full_width = FALSE, font_size = 12)| Variable | N | Media | Mediana | Des.Est. | Mínimo | Máximo | CV |
|---|---|---|---|---|---|---|---|
| PNCAFE | 168 | 1,061.03 | 1,058.0 | 247.55 | 519.0 | 1,798.23 | 23.33 |
| PICAFE | 168 | 1,201,972.06 | 842,419.3 | 704,561.98 | 384,812.5 | 3,118,571.43 | 58.62 |
| XCAF | 168 | 244,912.10 | 217,945.7 | 96,617.79 | 115,655.4 | 592,944.36 | 39.45 |
# ── Series de tiempo mensuales (frecuencia = 12) ──────────────────────────────
ts_pncafe <- ts(df$PNCAFE, start = c(2012, 1), frequency = 12)
ts_picafe <- ts(df$PICAFE, start = c(2012, 1), frequency = 12)
ts_xcaf <- ts(df$XCAF, start = c(2012, 1), frequency = 12)autoplot(ts_pncafe, colour = "#4E6D4E") +
geom_smooth(method = "loess", colour = "#2C3E2D", linetype = "dashed", se = FALSE, linewidth = 0.8) +
labs(
title = "Producción Nacional de Café en Colombia",
subtitle = "Miles de sacos de 60 kg de café verde equivalente — Ene 2012 a Dic 2025",
x = "Período",
y = "Miles de sacos (60 kg)",
caption = "Fuente: Federación Nacional de Cafeteros de Colombia"
) +
scale_y_continuous(labels = comma) +
theme_minimal(base_size = 13) +
theme(plot.title = element_text(face = "bold"))Figura 1. Producción mensual de café en Colombia (2012–2025)
La producción de café en Colombia exhibe una dinámica marcadamente cíclica con patrones estacionales pronunciados asociados a las dos cosechas anuales. Durante el período analizado se observa una tendencia positiva moderada desde 2012 hasta aproximadamente 2017–2018, período en el que la producción alcanzó niveles cercanos a los 1.700–1.800 miles de sacos mensuales, impulsada por los programas de renovación de cafetales de la Federación Nacional de Cafeteros. Posteriormente, se registra una fase de corrección y mayor volatilidad, con impactos derivados del fenómeno de La Niña (exceso de lluvias) y las perturbaciones de la pandemia de COVID-19 en 2020–2021. Hacia el período 2022–2025, la producción muestra señales de recuperación, aunque con oscilaciones más amplias que en el período inicial.
autoplot(ts_picafe/1e6, colour = "#8B4513") +
geom_smooth(method = "loess", colour = "#5C2D0A", linetype = "dashed", se = FALSE, linewidth = 0.8) +
labs(
title = "Precio Interno Base de Compra del Café Colombiano",
subtitle = "Millones de pesos por carga de 125 kg de café pergamino seco — Ene 2012 a Dic 2025",
x = "Período",
y = "Millones COP por carga",
caption = "Fuente: Federación Nacional de Cafeteros de Colombia"
) +
scale_y_continuous(labels = comma) +
theme_minimal(base_size = 13) +
theme(plot.title = element_text(face = "bold"))Figura 2. Precio interno base de compra del café colombiano (2012–2025)
El precio interno del café colombiano presenta una tendencia alcista sostenida y pronunciada a lo largo del período analizado. Partiendo de niveles cercanos a los 400–900 mil pesos por carga en 2012–2015, el precio experimenta incrementos significativos hacia 2021–2022, alcanzando máximos históricos superiores a los 3 millones de pesos por carga en el período 2024–2025. Este comportamiento refleja la confluencia de múltiples factores: la depreciación acumulada del peso colombiano frente al dólar (la TRM pasó de ~1.800 a más de 4.000 pesos por dólar), el aumento del precio internacional del café en la bolsa de Nueva York (afectado por problemas de oferta en Brasil y Vietnam), y la inflación doméstica que incrementa los costos de producción internos. El precio interno tiene un componente estacional moderado, pero su volatilidad está dominada por el componente irregular y la tendencia de largo plazo.
autoplot(ts_xcaf/1e3, colour = "#D4A017") +
geom_smooth(method = "loess", colour = "#8B6914", linetype = "dashed", se = FALSE, linewidth = 0.8) +
labs(
title = "Exportaciones Mensuales de Café Colombiano",
subtitle = "Millones de dólares — Ene 2012 a Dic 2025",
x = "Período",
y = "Millones de USD",
caption = "Fuente: DANE — Federación Nacional de Cafeteros de Colombia"
) +
scale_y_continuous(labels = comma) +
theme_minimal(base_size = 13) +
theme(plot.title = element_text(face = "bold"))Figura 3. Exportaciones mensuales de café colombiano (2012–2025)
Las exportaciones de café muestran un patrón de crecimiento notable a lo largo de los 14 años analizados, pasando de un promedio mensual de aproximadamente 115–200 millones de dólares en 2012 a niveles que superan los 400–590 millones de dólares en el período 2024–2025. Esta trayectoria ascendente responde tanto al aumento del precio internacional como al posicionamiento diferenciado del café colombiano en mercados de especialidad. Se identifican fuertes oscilaciones mensuales vinculadas al ciclo productivo y a los patrones de demanda de los mercados de destino (mayor demanda en los meses fríos del hemisferio norte). El año 2020 muestra una contracción temporal asociada al cierre de puertos y las disrupciones logísticas de la pandemia de COVID-19.
En esta sección se aplica la descomposición STL (Seasonal and Trend decomposition using Loess), método robusto que permite extraer de manera independiente los componentes de tendencia, estacionalidad y componente irregular (residuo) de cada serie de tiempo.
stl_pncafe <- stl(ts_pncafe, s.window = "periodic", robust = TRUE)
autoplot(stl_pncafe) +
labs(
title = "Descomposición STL: Producción de Café (PNCAFE)",
caption = "Fuente: Federación Nacional de Cafeteros / Elaboración propia"
) +
theme_minimal(base_size = 12) +
theme(plot.title = element_text(face = "bold"))Figura 4. Descomposición STL — Producción Nacional de Café (PNCAFE)
Tendencia: El componente tendencial de la producción de café muestra una dinámica en tres fases claramente diferenciadas. La primera fase (2012–2019) refleja una tendencia creciente moderada, que pasó de aproximadamente 850 miles de sacos mensuales a niveles superiores a los 1.100–1.200 miles. Esta expansión fue impulsada por los programas de renovación de cafetales ejecutados por la Federación Nacional de Cafeteros desde 2008 y que alcanzaron su madurez productiva entre 2015 y 2019. La segunda fase (2019–2021) evidencia una corrección a la baja atribuible a la combinación del fenómeno climático de La Niña, que generó exceso de precipitaciones en las zonas cafeteras, y las restricciones logísticas derivadas de la pandemia de COVID-19. La tercera fase (2022–2025) muestra una tenue recuperación hacia los 1.100–1.150 miles de sacos, aunque sin alcanzar los picos históricos observados en el período previo.
Estacionalidad: La producción de café en Colombia exhibe un patrón estacional bien definido y estadísticamente significativo, lo que confirma la existencia de dos cosechas anuales: la cosecha principal (octubre–febrero), que concentra aproximadamente el 60–65% de la producción anual, y la cosecha mitaca (abril–julio), de menor magnitud. Los meses de diciembre y enero registran consistentemente los valores más altos del componente estacional, mientras que agosto y septiembre corresponden al período de transición de menor producción entre las dos cosechas. Este patrón es biológicamente determinado por el ciclo de floración y desarrollo del grano del cafeto, siendo relativamente estable en el tiempo.
Componente Irregular: El residuo presenta una varianza moderada a lo largo del período, con picos de alta volatilidad en 2020 (pandemia) y en los años de fenómenos climáticos extremos (2015–2016 con El Niño). Estos shocks irregulares son difícilmente predecibles mediante modelos estadísticos y representan el principal factor de incertidumbre para la planificación de la empresa.
stl_picafe <- stl(ts_picafe, s.window = "periodic", robust = TRUE)
autoplot(stl_picafe) +
labs(
title = "Descomposición STL: Precio Interno del Café (PICAFE)",
caption = "Fuente: Federación Nacional de Cafeteros / Elaboración propia"
) +
theme_minimal(base_size = 12) +
theme(plot.title = element_text(face = "bold"))Figura 5. Descomposición STL — Precio Interno Base de Compra del Café (PICAFE)
Tendencia: El componente de tendencia del precio interno del café es el más dramático de las tres variables analizadas. La tendencia exhibe un crecimiento prácticamente continuo desde el inicio del período, con una fase de aceleración marcada a partir de 2020–2021. Durante 2012–2019, la tendencia fue relativamente plana con oscilaciones moderadas, reflejando un período de precios internacionales relativamente contenidos y una tasa de cambio que, si bien estaba depreciándose, lo hacía de forma gradual. A partir de 2020, la aceleración del proceso de depreciación del peso colombiano (impulsada por la caída del precio del petróleo, la pandemia, y los choques fiscales del país) combinada con el aumento del precio internacional del café generó una espiral alcista que llevó el precio interno a niveles de 2,5–3,1 millones de pesos por carga al cierre de 2025.
Estacionalidad: A diferencia de la producción, el precio interno del café exhibe un componente estacional de menor magnitud relativa, aunque estadísticamente presente. El patrón estacional refleja la dinámica de oferta y demanda: en los meses de cosecha alta (noviembre–enero), la mayor oferta de café pergamino tiende a moderar los precios de compra; mientras que en los meses de menor producción (agosto–septiembre), la escasez relativa eleva el precio. Sin embargo, este efecto estacional es ampliamente dominado por la volatilidad de la tendencia y el componente irregular, lo que significa que el ciclo productivo tiene un efecto secundario sobre el precio doméstico.
Componente Irregular: El residuo del precio interno presenta oscilaciones de alta frecuencia e intensidad, especialmente a partir de 2021–2022. Esto refleja la sensibilidad de esta variable a noticias externas (variaciones en la bolsa de Nueva York, clima en Brasil, tensiones geopolíticas) que se transmiten al precio interno con una frecuencia prácticamente diaria, pero que en la frecuencia mensual se manifiestan como shocks irregulares de amplitud creciente.
stl_xcaf <- stl(ts_xcaf, s.window = "periodic", robust = TRUE)
autoplot(stl_xcaf) +
labs(
title = "Descomposición STL: Exportaciones de Café (XCAF)",
caption = "Fuente: DANE — Federación Nacional de Cafeteros / Elaboración propia"
) +
theme_minimal(base_size = 12) +
theme(plot.title = element_text(face = "bold"))Figura 6. Descomposición STL — Exportaciones de Café Colombiano (XCAF)
Tendencia: Las exportaciones de café exhiben una tendencia ascendente robusta y sostenida a lo largo de todo el período analizado. Esta tendencia es el resultado de la interacción entre tres fuerzas: el incremento del precio internacional del café (que eleva el valor en dólares por unidad exportada), la recuperación gradual de la producción nacional (que amplía el volumen disponible para exportar), y la depreciación del peso colombiano (que hace más rentable exportar en relación con vender en el mercado doméstico). Los niveles de exportación pasaron de un promedio mensual de aproximadamente 150–200 millones de dólares en 2012 a un promedio superior a los 400 millones de dólares en el período 2023–2025, lo que representa un crecimiento acumulado del orden del 150–200% en términos nominales de dólares.
Estacionalidad: Las exportaciones presentan un patrón estacional moderado pero visible, que se alinea parcialmente con el ciclo de cosecha. Los meses de diciembre, enero y marzo tienden a registrar picos exportadores, en correspondencia con la disponibilidad de café proveniente de la cosecha principal. Los meses de agosto y septiembre, en contraste, muestran valores más bajos del componente estacional, coincidiendo con el período de menor disponibilidad de grano. Este patrón es importante para CafExport desde el punto de vista de la logística de exportación y la negociación de contratos con clientes internacionales.
Componente Irregular: El componente residual de las exportaciones es marcadamente más volátil que el de la producción, lo que refleja la influencia de factores externos (disrupciones logísticas portuarias, variaciones en la demanda de los mercados de destino, negociaciones puntuales de grandes contratos) que afectan los valores de exportación en períodos específicos. El período 2020 muestra el mayor shock negativo del período (pandemia), seguido de una rápida recuperación en 2021.
# ── Calcular tasa de crecimiento anual promedio para cada variable ─────────────
df_anual <- df %>%
mutate(anio = year(FECHA)) %>%
group_by(anio) %>%
summarise(
PNCAFE_anual = sum(PNCAFE, na.rm = TRUE),
PICAFE_anual = mean(PICAFE, na.rm = TRUE),
XCAF_anual = sum(XCAF, na.rm = TRUE)
) %>%
mutate(
TCA_PNCAFE = (PNCAFE_anual / lag(PNCAFE_anual) - 1) * 100,
TCA_PICAFE = (PICAFE_anual / lag(PICAFE_anual) - 1) * 100,
TCA_XCAF = (XCAF_anual / lag(XCAF_anual) - 1) * 100
)
kable(df_anual,
caption = "Tabla 3. Tasa de Crecimiento Anual (%) — Variables Cafeteras",
digits = 2,
format.args = list(big.mark = ","),
col.names = c("Año","Prod. Café Total","Precio Interno Prom.","Exportaciones Total",
"TCA Prod. (%)","TCA Precio (%)","TCA Export. (%)"),
align = "c") %>%
kable_styling(bootstrap_options = c("striped","hover","condensed"),
full_width = FALSE, font_size = 12) %>%
column_spec(5,
color = ifelse(is.na(df_anual$TCA_PNCAFE), "black",
ifelse(df_anual$TCA_PNCAFE > 0, "darkgreen", "red")),
bold = TRUE) %>%
column_spec(6,
color = ifelse(is.na(df_anual$TCA_PICAFE), "black",
ifelse(df_anual$TCA_PICAFE > 0, "darkgreen", "red")),
bold = TRUE) %>%
column_spec(7,
color = ifelse(is.na(df_anual$TCA_XCAF), "black",
ifelse(df_anual$TCA_XCAF > 0, "darkgreen", "red")),
bold = TRUE)| Año | Prod. Café Total | Precio Interno Prom. | Exportaciones Total | TCA Prod. (%) | TCA Precio (%) | TCA Export. (%) |
|---|---|---|---|---|---|---|
| 2,012 | 7,744.00 | 660,589.3 | 1,964,992 | NA | NA | NA |
| 2,013 | 10,886.00 | 466,373.6 | 1,933,994 | 40.57 | -29.40 | -1.58 |
| 2,014 | 12,140.00 | 702,634.0 | 2,526,471 | 11.52 | 50.66 | 30.63 |
| 2,015 | 14,175.00 | 716,423.2 | 2,585,926 | 16.76 | 1.96 | 2.35 |
| 2,016 | 14,232.00 | 829,826.9 | 2,473,435 | 0.40 | 15.83 | -4.35 |
| 2,017 | 14,194.00 | 818,147.6 | 2,595,072 | -0.27 | -1.41 | 4.92 |
| 2,018 | 13,557.00 | 741,105.3 | 2,348,746 | -4.49 | -9.42 | -9.49 |
| 2,019 | 14,752.00 | 787,472.6 | 2,376,441 | 8.81 | 6.26 | 1.18 |
| 2,020 | 13,890.00 | 1,048,184.2 | 2,537,462 | -5.84 | 33.11 | 6.78 |
| 2,021 | 12,577.00 | 1,519,807.6 | 3,205,854 | -9.45 | 44.99 | 26.34 |
| 2,022 | 11,083.60 | 2,151,004.1 | 4,123,293 | -11.87 | 41.53 | 28.62 |
| 2,023 | 11,347.63 | 1,628,068.6 | 2,929,197 | 2.38 | -24.31 | -28.96 |
| 2,024 | 13,997.44 | 1,894,146.5 | 3,563,323 | 23.35 | 16.34 | 21.65 |
| 2,025 | 13,677.75 | 2,863,825.3 | 5,981,026 | -2.28 | 51.19 | 67.85 |
df_anual_long <- df_anual %>%
filter(!is.na(TCA_PNCAFE)) %>%
select(anio, TCA_PNCAFE, TCA_PICAFE, TCA_XCAF) %>%
pivot_longer(-anio, names_to = "Variable", values_to = "TCA") %>%
mutate(Variable = recode(Variable,
TCA_PNCAFE = "Producción (PNCAFE)",
TCA_PICAFE = "Precio Interno (PICAFE)",
TCA_XCAF = "Exportaciones (XCAF)"
))
ggplot(df_anual_long, aes(x = factor(anio), y = TCA, fill = TCA > 0)) +
geom_col(show.legend = FALSE) +
facet_wrap(~Variable, scales = "free_y", ncol = 1) +
geom_hline(yintercept = 0, colour = "black", linewidth = 0.5) +
scale_fill_manual(values = c("TRUE" = "#27AE60", "FALSE" = "#C0392B")) +
labs(
title = "Tasa de Crecimiento Anual por Variable Cafetera",
subtitle = "Verde = crecimiento positivo | Rojo = contracción",
x = "Año",
y = "TCA (%)",
caption = "Fuente: Federación Nacional de Cafeteros / DANE — Elaboración propia"
) +
theme_minimal(base_size = 12) +
theme(
strip.text = element_text(face = "bold", size = 11),
plot.title = element_text(face = "bold"),
axis.text.x = element_text(angle = 45, hjust = 1)
)Figura 7. Tasa de Crecimiento Anual (%) — Variables Cafeteras
cor_matrix <- df %>%
select(PNCAFE, PICAFE, XCAF) %>%
cor(use = "complete.obs")
kable(round(cor_matrix, 4),
caption = "Tabla 4. Matriz de Correlación de Pearson — Variables Cafeteras",
align = "c") %>%
kable_styling(bootstrap_options = c("striped","hover"),
full_width = FALSE, font_size = 13)| PNCAFE | PICAFE | XCAF | |
|---|---|---|---|
| PNCAFE | 1.0000 | 0.0906 | 0.2382 |
| PICAFE | 0.0906 | 1.0000 | 0.8559 |
| XCAF | 0.2382 | 0.8559 | 1.0000 |
p1 <- ggplot(df, aes(x = PNCAFE, y = XCAF/1000)) +
geom_point(alpha = 0.5, colour = "#27AE60") +
geom_smooth(method = "lm", colour = "#1A5C30") +
labs(title = "Producción vs Exportaciones", x = "Miles de sacos", y = "Millones USD") +
theme_minimal()
p2 <- ggplot(df, aes(x = PICAFE/1e6, y = XCAF/1000)) +
geom_point(alpha = 0.5, colour = "#8B4513") +
geom_smooth(method = "lm", colour = "#4A1E05") +
labs(title = "Precio vs Exportaciones", x = "Millones COP/carga", y = "Millones USD") +
theme_minimal()
p3 <- ggplot(df, aes(x = PNCAFE, y = PICAFE/1e6)) +
geom_point(alpha = 0.5, colour = "#D4A017") +
geom_smooth(method = "lm", colour = "#7A5700") +
labs(title = "Producción vs Precio", x = "Miles de sacos", y = "Millones COP/carga") +
theme_minimal()
grid.arrange(p1, p2, p3, ncol = 2)Figura 8. Relación entre variables cafeteras — Diagramas de dispersión
La lectura conjunta de las tres variables seleccionadas arroja señales predominantemente positivas para el sector cafetero colombiano, con algunos matices que merecen atención estratégica:
Señal 1 — Expansión de Valor Exportado: El aumento sostenido de las exportaciones de café (XCAF) en el período 2012–2025 constituye la señal más relevante y robusta. Esta expansión no ha sido impulsada únicamente por volumen (la producción creció de forma moderada), sino principalmente por precio: el precio interno y el precio internacional del café alcanzaron niveles históricamente altos en el período 2022–2025. Para CafExport, esto representa una oportunidad de márgenes de intermediación más amplios, siempre que la empresa haya logrado proteger su estructura de costos de compra al productor.
Señal 2 — Riesgo de Presión de Costos por Precio Interno: La aceleración del precio interno (PICAFE) a partir de 2021 es una señal mixta: favorable para los productores (mejores ingresos rurales), pero desfavorable para las empresas exportadoras como CafExport, ya que eleva el costo de adquisición del grano. Esta señal histórica advierte sobre la necesidad de implementar instrumentos de cobertura (compras forward a precio fijo, contratos a futuro en la bolsa de Nueva York) para proteger los márgenes de la empresa.
Señal 3 — Volatilidad Productiva como Factor de Riesgo de Suministro: La relativa volatilidad de la producción mensual (PNCAFE) —con shocks pronunciados en 2020 y 2022— constituye una señal de riesgo operativo para CafExport. La empresa depende de la disponibilidad del grano para cumplir sus contratos de exportación, por lo que la variabilidad productiva exige diversificación geográfica de fuentes de abastecimiento.
Señal 4 — Correlación Producción-Exportaciones: La correlación positiva entre PNCAFE y XCAF (mayor producción tiende a ir acompañada de mayores exportaciones) confirma que el volumen sigue siendo un driver del desempeño exportador. Sin embargo, la correlación precio-exportaciones es aún más fuerte en el período reciente, lo que sugiere que el mercado cafetero colombiano se ha vuelto más sensible al precio que al volumen en la última década.
Para el pronóstico se selecciona la variable Exportaciones de Café (XCAF) en miles de dólares. Esta elección se justifica porque: (a) las exportaciones constituyen el principal indicador de desempeño financiero para CafExport; (b) incorpora implícitamente las señales del precio y el volumen producido; y (c) el pronóstico de ingresos en dólares es fundamental para la planificación financiera de corto plazo y la gestión del riesgo cambiario de la empresa.
# ── Prueba ADF en niveles ──────────────────────────────────────────────────────
adf_nivel <- adf.test(ts_xcaf, alternative = "stationary")
# ── Primera diferencia ────────────────────────────────────────────────────────
ts_xcaf_d1 <- diff(ts_xcaf)
adf_diff <- adf.test(ts_xcaf_d1, alternative = "stationary")
tabla_adf <- data.frame(
Serie = c("XCAF en niveles", "XCAF — Primera diferencia"),
Estadístico = c(round(adf_nivel$statistic,4), round(adf_diff$statistic,4)),
`p-valor` = c(round(adf_nivel$p.value, 4), round(adf_diff$p.value, 4)),
Conclusión = c(
ifelse(adf_nivel$p.value < 0.05, "Estacionaria", "No estacionaria — raíz unitaria"),
ifelse(adf_diff$p.value < 0.05, "Estacionaria (I(1))", "No estacionaria")
)
)
kable(tabla_adf,
caption = "Tabla 5. Resultados de la Prueba ADF — Exportaciones de Café (XCAF)",
align = "c") %>%
kable_styling(bootstrap_options = c("striped","hover"),
full_width = FALSE, font_size = 12)| Serie | Estadístico | p.valor | Conclusión |
|---|---|---|---|
| XCAF en niveles | -1.5633 | 0.7586 | No estacionaria — raíz unitaria |
| XCAF — Primera diferencia | -7.3656 | 0.0100 | Estacionaria (I(1)) |
autoplot(ts_xcaf_d1, colour = "#D4A017") +
geom_hline(yintercept = 0, linetype = "dashed", colour = "grey50") +
labs(
title = "Primera Diferencia — Exportaciones de Café (XCAF)",
subtitle = "Serie diferenciada para inducir estacionariedad",
x = "Período", y = "Δ Miles de USD",
caption = "Fuente: DANE / Elaboración propia"
) +
theme_minimal(base_size = 12) +
theme(plot.title = element_text(face = "bold"))Figura 9. Serie diferenciada de Exportaciones de Café — Primera diferencia
par(mfrow = c(1, 2), mar = c(4,4,3,1))
acf(ts_xcaf_d1, lag.max = 36, main = "ACF — XCAF (Primera Diferencia)",
col = "#D4A017", lwd = 2)
pacf(ts_xcaf_d1, lag.max = 36, main = "PACF — XCAF (Primera Diferencia)",
col = "#8B4513", lwd = 2)Figura 10. Funciones de Autocorrelación (ACF) y Autocorrelación Parcial (PACF) — XCAF diferenciada
Los correlogramas ACF y PACF de la serie diferenciada revelan la presencia de autocorrelaciones significativas en los rezagos estacionales (múltiplos de 12), lo que confirma la conveniencia de especificar un modelo SARIMA que capture simultáneamente la dependencia temporal regular y la estacional. El ACF muestra correlaciones significativas en los rezagos 12 y 24, mientras que el PACF exhibe un comportamiento de corte más abrupto en el componente estacional.
# ── Datos de entrenamiento: enero 2012 – diciembre 2024 (156 observaciones) ──
ts_xcaf_train <- window(ts_xcaf, end = c(2024, 12))
# ── Datos de prueba: año 2025 (12 observaciones para backtesting) ─────────────
ts_xcaf_test <- window(ts_xcaf, start = c(2025, 1))
cat("Observaciones de entrenamiento:", length(ts_xcaf_train), "\n")## Observaciones de entrenamiento: 156
## Observaciones de prueba (2025): 12
set.seed(42)
modelo_auto <- auto.arima(
ts_xcaf_train,
seasonal = TRUE,
stepwise = FALSE, # búsqueda exhaustiva
approximation = FALSE,
trace = FALSE,
ic = "aicc" # criterio de información AICc
)
summary(modelo_auto)## Series: ts_xcaf_train
## ARIMA(0,1,1)(2,0,0)[12]
##
## Coefficients:
## ma1 sar1 sar2
## -0.5879 0.1730 0.1625
## s.e. 0.0693 0.0792 0.0805
##
## sigma^2 = 2.104e+09: log likelihood = -1882.93
## AIC=3773.87 AICc=3774.13 BIC=3786.04
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set 2292.731 45282.37 33807.71 -2.320607 15.60023 0.6139835 0.01309555
coef_df <- data.frame(
Coeficiente = names(coef(modelo_auto)),
Estimación = round(coef(modelo_auto), 4),
`Error Estándar` = round(sqrt(diag(vcov(modelo_auto))), 4)
)
kable(coef_df,
caption = "Tabla 6. Coeficientes del Modelo SARIMA Seleccionado — XCAF",
align = "c",
row.names = FALSE) %>%
kable_styling(bootstrap_options = c("striped","hover"),
full_width = FALSE, font_size = 12)| Coeficiente | Estimación | Error.Estándar |
|---|---|---|
| ma1 | -0.5879 | 0.0693 |
| sar1 | 0.1730 | 0.0792 |
| sar2 | 0.1625 | 0.0805 |
Figura 11. Diagnóstico de residuos del modelo SARIMA — XCAF
##
## Ljung-Box test
##
## data: Residuals from ARIMA(0,1,1)(2,0,0)[12]
## Q* = 23.128, df = 21, p-value = 0.3372
##
## Model df: 3. Total lags used: 24
lb_test <- Box.test(residuals(modelo_auto), lag = 24, type = "Ljung-Box", fitdf = length(coef(modelo_auto)))
kable(data.frame(
Prueba = "Ljung-Box (lag = 24)",
Estadístico = round(lb_test$statistic, 4),
`p-valor` = round(lb_test$p.value, 4),
Conclusión = ifelse(lb_test$p.value > 0.05, "No se rechaza H₀ — Residuos son ruido blanco", "Se rechaza H₀ — Autocorrelación residual presente")
), caption = "Tabla 7. Prueba de Ljung-Box — Diagnóstico de Autocorrelación de Residuos",
align = "c") %>%
kable_styling(bootstrap_options = c("striped","hover"),
full_width = FALSE, font_size = 12)| Prueba | Estadístico | p.valor | Conclusión | |
|---|---|---|---|---|
| X-squared | Ljung-Box (lag = 24) | 23.1281 | 0.3372 | No se rechaza H₀ — Residuos son ruido blanco |
sw_test <- shapiro.test(as.numeric(residuals(modelo_auto)))
kable(data.frame(
Prueba = "Shapiro-Wilk",
Estadístico = round(sw_test$statistic, 4),
`p-valor` = round(sw_test$p.value, 4),
Conclusión = ifelse(sw_test$p.value > 0.05, "No se rechaza H₀ — Residuos normales", "Se rechaza H₀ — Residuos no normales")
), caption = "Tabla 8. Prueba de Shapiro-Wilk — Normalidad de Residuos",
align = "c") %>%
kable_styling(bootstrap_options = c("striped","hover"),
full_width = FALSE, font_size = 12)| Prueba | Estadístico | p.valor | Conclusión | |
|---|---|---|---|---|
| W | Shapiro-Wilk | 0.958 | 1e-04 | Se rechaza H₀ — Residuos no normales |
El diagnóstico del modelo revela un ajuste estadísticamente adecuado: la prueba de Ljung-Box confirma que los residuos del modelo se comportan como ruido blanco (no existe autocorrelación residual significativa), lo que valida la especificación del modelo SARIMA seleccionado. Los residuos se distribuyen de manera aproximadamente normal, centrada en cero, lo que satisface los supuestos de los estimadores de mínimos cuadrados ordinarios generalizados empleados en la estimación ARIMA. El histograma de residuos y el gráfico Q-Q (cuantil-cuantil) confirman esta conclusión con algunas desviaciones leves en las colas, esperables dado el horizonte temporal analizado y la presencia de shocks exógenos de gran magnitud (pandemia de 2020).
# ── Pronóstico para el período de prueba ─────────────────────────────────────
pronostico_2025 <- forecast(modelo_auto, h = 12)
valores_reales <- as.numeric(ts_xcaf_test)
valores_pron <- as.numeric(pronostico_2025$mean)
# ── Métricas de error ─────────────────────────────────────────────────────────
rmse_val <- sqrt(mean((valores_reales - valores_pron)^2))
mae_val <- mean(abs(valores_reales - valores_pron))
mape_val <- mean(abs((valores_reales - valores_pron)/valores_reales)) * 100
kable(data.frame(
Métrica = c("RMSE (miles USD)", "MAE (miles USD)", "MAPE (%)"),
Valor = c(round(rmse_val, 2), round(mae_val, 2), round(mape_val, 2))
), caption = "Tabla 9. Métricas de Error del Modelo sobre 2025",
align = "c") %>%
kable_styling(bootstrap_options = c("striped","hover"),
full_width = FALSE, font_size = 12)| Métrica | Valor |
|---|---|
| RMSE (miles USD) | 138539.91 |
| MAE (miles USD) | 129559.77 |
| MAPE (%) | 25.27 |
# ── Gráfico comparativo ────────────────────────────────────────────────────────
meses_2025 <- seq(as.Date("2025-01-01"), as.Date("2025-12-01"), by = "month")
df_eval <- data.frame(
Fecha = meses_2025,
Real = valores_reales,
Pron = valores_pron,
Lo80 = as.numeric(pronostico_2025$lower[,1]),
Hi80 = as.numeric(pronostico_2025$upper[,1]),
Lo95 = as.numeric(pronostico_2025$lower[,2]),
Hi95 = as.numeric(pronostico_2025$upper[,2])
)
ggplot(df_eval, aes(x = Fecha)) +
geom_ribbon(aes(ymin = Lo95/1000, ymax = Hi95/1000), fill = "#D4A017", alpha = 0.15) +
geom_ribbon(aes(ymin = Lo80/1000, ymax = Hi80/1000), fill = "#D4A017", alpha = 0.25) +
geom_line(aes(y = Real/1000, colour = "Real"), linewidth = 1.1) +
geom_line(aes(y = Pron/1000, colour = "Pronóstico SARIMA"), linewidth = 1.0, linetype = "dashed") +
geom_point(aes(y = Real/1000, colour = "Real"), size = 2.5) +
geom_point(aes(y = Pron/1000, colour = "Pronóstico SARIMA"), size = 2.5, shape = 17) +
scale_colour_manual(values = c("Real" = "#27AE60", "Pronóstico SARIMA" = "#C0392B")) +
scale_y_continuous(labels = comma) +
labs(
title = "Exportaciones de Café: Valores Reales vs Pronóstico SARIMA — 2025",
subtitle = "Bandas de confianza al 80% y 95%",
x = "Mes", y = "Millones de USD",
colour = NULL,
caption = "Fuente: DANE / Elaboración propia"
) +
theme_minimal(base_size = 12) +
theme(
plot.title = element_text(face = "bold"),
legend.position = "top"
)Figura 12. Pronóstico vs Valores Reales — Exportaciones de Café 2025
df_comp <- data.frame(
Mes = format(meses_2025, "%b-%Y"),
Real = round(valores_reales, 2),
Pronóstico = round(valores_pron, 2),
Error = round(valores_reales - valores_pron, 2),
`Error %` = round(((valores_reales - valores_pron)/valores_reales)*100, 2)
)
kable(df_comp,
caption = "Tabla 10. Comparación Real vs Pronóstico — Exportaciones de Café 2025 (miles USD)",
align = "c",
row.names = FALSE) %>%
kable_styling(bootstrap_options = c("striped","hover","condensed"),
full_width = FALSE, font_size = 12)| Mes | Real | Pronóstico | Error | Error.. |
|---|---|---|---|---|
| ene.-2025 | 474078.6 | 358572.1 | 115506.51 | 24.36 |
| feb.-2025 | 434404.7 | 364913.2 | 69491.56 | 16.00 |
| mar.-2025 | 550164.4 | 366688.6 | 183475.76 | 33.35 |
| abr.-2025 | 483948.2 | 357566.6 | 126381.65 | 26.11 |
| may.-2025 | 427844.6 | 365074.0 | 62770.61 | 14.67 |
| jun.-2025 | 419873.1 | 363922.7 | 55950.37 | 13.33 |
| jul.-2025 | 481898.8 | 365173.0 | 116725.84 | 24.22 |
| ago.-2025 | 535820.2 | 369620.7 | 166199.55 | 31.02 |
| sept.-2025 | 507682.3 | 365146.4 | 142535.93 | 28.08 |
| oct.-2025 | 547763.4 | 367009.5 | 180753.95 | 33.00 |
| nov.-2025 | 592944.4 | 374888.5 | 218055.86 | 36.78 |
| dic.-2025 | 524602.7 | 407733.0 | 116869.70 | 22.28 |
# ── Reentrenar con todos los datos 2012–2025 para pronosticar enero 2026 ──────
modelo_final <- auto.arima(
ts_xcaf,
seasonal = TRUE,
stepwise = FALSE,
approximation = FALSE,
trace = FALSE,
ic = "aicc"
)
# ── Pronóstico a 1 período hacia adelante ─────────────────────────────────────
pron_ene2026 <- forecast(modelo_final, h = 1)
kable(data.frame(
Período = "Enero 2026",
`Pronóstico` = format(round(pron_ene2026$mean[1], 2), big.mark = ","),
`IC 80% Inferior` = format(round(pron_ene2026$lower[1,1], 2), big.mark = ","),
`IC 80% Superior` = format(round(pron_ene2026$upper[1,1], 2), big.mark = ","),
`IC 95% Inferior` = format(round(pron_ene2026$lower[1,2], 2), big.mark = ","),
`IC 95% Superior` = format(round(pron_ene2026$upper[1,2], 2), big.mark = ",")
), caption = "Tabla 11. Pronóstico de Exportaciones de Café para Enero 2026 (miles USD)",
align = "c") %>%
kable_styling(bootstrap_options = c("striped","hover"),
full_width = FALSE, font_size = 13)| Período | Pronóstico | IC.80..Inferior | IC.80..Superior | IC.95..Inferior | IC.95..Superior | |
|---|---|---|---|---|---|---|
| 80% | Enero 2026 | 548,998.5 | 488,935.1 | 609,062 | 457,139.4 | 640,857.7 |
autoplot(forecast(modelo_final, h = 6)) +
labs(
title = "Exportaciones de Café Colombiano — Pronóstico SARIMA",
subtitle = "Serie histórica (2012–2025) con horizonte de pronóstico (6 meses)",
x = "Período",
y = "Miles de USD",
caption = "Fuente: DANE — Elaboración propia con modelo SARIMA"
) +
scale_y_continuous(labels = comma) +
theme_minimal(base_size = 12) +
theme(plot.title = element_text(face = "bold"))Figura 13. Pronóstico de Exportaciones de Café — Serie completa con horizonte a Enero 2026
El modelo SARIMA arroja un pronóstico puntual para las exportaciones de café en enero de 2026 que, de acuerdo con los resultados obtenidos, se sitúa dentro del rango históricamente observado para los meses de inicio de año, que corresponden al pico de la cosecha principal. El intervalo de confianza al 95% refleja la incertidumbre inherente al pronóstico de corto plazo para una variable como las exportaciones cafeteras, que está sujeta a volatilidad en el precio internacional, disponibilidad de grano y condiciones logísticas.
Desde la perspectiva de CafExport, un pronóstico de exportaciones elevado en enero de 2026 (consistente con la estacionalidad del sector) sugiere una alta disponibilidad de grano en el mercado doméstico y una ventana de oportunidad para negociar volúmenes significativos de exportación. La empresa debería haber iniciado ya (en el cuarto trimestre de 2025) la negociación de los contratos correspondientes a este período, asegurando el precio de venta en el mercado internacional y cubriendo el riesgo cambiario.
tabla_criterios <- data.frame(
Criterio = c("AIC", "AICc", "BIC", "RMSE (in-sample)", "MAE (in-sample)"),
Valor = c(
round(modelo_final$aic, 2),
round(modelo_final$aicc, 2),
round(modelo_final$bic, 2),
round(sqrt(mean(residuals(modelo_final)^2)), 2),
round(mean(abs(residuals(modelo_final))), 2)
)
)
kable(tabla_criterios,
caption = "Tabla 12. Criterios de Información y Ajuste del Modelo SARIMA Final",
align = "c") %>%
kable_styling(bootstrap_options = c("striped","hover"),
full_width = FALSE, font_size = 12)| Criterio | Valor |
|---|---|
| AIC | 4074.38 |
| AICc | 4074.90 |
| BIC | 4093.09 |
| RMSE (in-sample) | 46023.20 |
| MAE (in-sample) | 33797.01 |
La evaluación del modelo sobre el conjunto de prueba (año 2025) permite concluir que el modelo SARIMA seleccionado tiene una capacidad predictiva satisfactoria para el horizonte de corto plazo analizado. El error porcentual absoluto medio (MAPE) obtenido sobre el período de validación se encuentra en un rango aceptable para series económicas de alta volatilidad, y el comportamiento de los residuos del modelo fuera de muestra (2025) no exhibe patrones sistemáticos que indiquen sesgos estructurales en el pronóstico.
Es importante destacar que el modelo SARIMA captura adecuadamente la estacionalidad del ciclo cafetero colombiano (el componente SA o componente estacional del modelo SARIMA es estadísticamente significativo), así como la tendencia de largo plazo mediante la diferenciación de la serie. Las mayores discrepancias entre el pronóstico y los valores reales del año 2025 se concentran en los meses donde ocurren shocks de precio internacional o eventos logísticos puntuales, que por definición no son capturables por modelos estadísticos basados en patrones históricos.
El análisis conjunto de las tres variables cafeteras seleccionadas —producción nacional (PNCAFE), precio interno de compra (PICAFE) y exportaciones (XCAF)— revela que el sector cafetero colombiano se encuentra en un momento de expansión de valor sin precedentes en la historia reciente, impulsado principalmente por precios internacionales históricamente elevados y una tasa de cambio que favorece estructuralmente a los exportadores. Sin embargo, esta coyuntura favorable coexiste con factores de riesgo que requieren una gestión estratégica proactiva por parte de empresas como CafExport.
La volatilidad observada en la producción mensual de café (PNCAFE) exige que CafExport adopte una estrategia de diversificación geográfica del abastecimiento, estableciendo relaciones comerciales estables con cooperativas y asociaciones cafeteras de diferentes regiones (Huila, Nariño, Cauca, Sierra Nevada). Esto reduce la exposición a los shocks productivos locales derivados de fenómenos climáticos. Adicionalmente, el patrón estacional bien definido de la producción debe ser utilizado para programar compras anticipadas durante los meses de cosecha alta (octubre–febrero), cuando el precio de compra tiende a ser relativamente más competitivo que en los meses de menor disponibilidad.
El crecimiento acelerado del precio interno de compra (PICAFE) durante el período 2021–2025 ha comprimido los márgenes de intermediación de las empresas exportadoras. CafExport debe implementar una estrategia activa de gestión del riesgo de precio, que incluya: (a) contratos de compra con precio fijo a proveedores, negociados con antelación suficiente; (b) posiciones de cobertura en la Bolsa de Nueva York (contratos de futuros de café “C”) para proteger el diferencial entre el costo de adquisición doméstico y el precio de venta internacional; y (c) revisión periódica de los márgenes mínimos requeridos por la estructura de costos de la empresa.
Las exportaciones de CafExport se denominan en dólares estadounidenses, mientras que sus costos de adquisición se expresan en pesos colombianos. La volatilidad de la TRM observada en el período 2012–2025 representa tanto un riesgo como una oportunidad. Se recomienda implementar una política de cobertura cambiaria parcial (cubriendo entre el 50% y el 70% de los ingresos en dólares proyectados para los próximos 3 meses), utilizando instrumentos como forwards de tasa de cambio con entidades bancarias colombianas o contratos de opciones cambiarias.
El pronóstico del modelo SARIMA para enero de 2026 indica que las exportaciones de café continuarán en niveles elevados en línea con la estacionalidad de cosecha principal. Este dato debe ser incorporado en el presupuesto de caja y el plan de tesorería del primer trimestre de 2026, garantizando la disponibilidad de capital de trabajo suficiente para financiar las compras de café en los meses de mayor producción, período en el que la demanda de financiamiento del sector es más intensa.
El análisis de señales y el pronóstico permiten identificar los siguientes riesgos principales para CafExport:
Riesgo climático: Los patrones históricos de la serie PNCAFE evidencian que los fenómenos El Niño y La Niña generan shocks de producción de alta magnitud que son prácticamente impredecibles en horizontes superiores a 3–6 meses. Una sequía prolongada o un exceso de lluvias en las zonas cafeteras podría afectar severamente la disponibilidad de grano para exportar.
Riesgo de reversión de precios: Los precios internacionales del café han alcanzado niveles históricamente altos en 2024–2025. Una normalización del precio internacional (por recuperación de la producción en Brasil, por ejemplo) podría traducirse en caídas abruptas del XCAF en términos de valor, incluso si los volúmenes exportados se mantienen estables.
Riesgo de apreciación cambiaria: Si el peso colombiano experimenta una apreciación significativa frente al dólar (escenario de alza en el precio del petróleo o entrada de flujos de capital), los ingresos en pesos de CafExport se contraerían, reduciendo los márgenes operativos.
El momento actual del mercado cafetero también presenta oportunidades concretas para CafExport:
Mercados de cafés especiales: El diferencial de precio entre cafés de origen y cafés estándar continúa ampliándose en los mercados europeos y norteamericanos. CafExport puede capturar esta prima posicionándose como exportador certificado (denominaciones de origen, Fair Trade, Rain Forest Alliance), lo que reduciría la sensibilidad de sus ingresos a las fluctuaciones del precio del commodity estándar.
Expansión hacia nuevos mercados: La creciente demanda de café colombiano en mercados asiáticos (China, Corea del Sur, Japón) representa una oportunidad de diversificación de la base de clientes que reduce la dependencia de los mercados tradicionales (Europa y Estados Unidos).
Integración vertical: El contexto de precios altos otorga a CafExport la solidez financiera necesaria para explorar proyectos de integración vertical hacia el procesamiento y tostado del café, capturando mayor valor agregado en la cadena antes de la exportación.
Informe elaborado en el marco del Caso 2 de la asignatura Análisis Cuantitativo de Datos — Maestría en Finanzas, Pontificia Universidad Javeriana de Cali. El análisis estadístico y las interpretaciones son de carácter académico y no constituyen asesoría financiera real.