Introducción

Colombina S.A. es una de las empresas más reconocidas en la industria de alimentos en Colombia y a nivel internacional. Fundada en 1927, ha consolidado su presencia en más de 80 países, ofreciendo una amplia gama de productos, incluyendo confitería, galletas, helados y alimentos procesados. Su crecimiento sostenido, estrategias de diversificación y solidez financiera la han convertido en un referente del sector.

El análisis financiero de Colombina es clave para evaluar su desempeño en el mercado, identificar tendencias y comprender los factores que impulsan su rentabilidad y estabilidad. En este documento, realizaremos un análisis exploratorio de algunas variables financieras clave de la empresa entre 2016 y 2024, utilizando R. Aplicaremos técnicas de estadística descriptiva y visualización de datos para detectar patrones, anomalías y relaciones entre variables, facilitando una mejor interpretación de su evolución financiera.

A través de este análisis, se busca proporcionar una visión más clara de la situación financiera de Colombina, lo cual puede ser útil para inversionistas, analistas financieros y académicos interesados en la industria de alimentos.

Análisis exploratorio

El análisis exploratorio de datos (EDA) es un paso clave para comprender la información financiera de Colombina S.A., identificar patrones y evaluar la distribución de las variables.

En esta sección, analizaremos los siguientes indicadores financieros, destacando su significado e importancia:

EBITDA (Earnings Before Interest, Taxes, Depreciation, and Amortization): Mide la rentabilidad operativa de la empresa antes de considerar gastos financieros y contables, reflejando su capacidad para generar ingresos a partir de sus operaciones.

Quick Ratio: Indica la liquidez de la empresa al medir su capacidad de cubrir pasivos a corto plazo con activos líquidos, sin depender del inventario.

Márgenes Financieros:

Margen EBITDA: Representa la proporción de EBITDA sobre los ingresos, mostrando la eficiencia operativa.

Margen Bruto: Relaciona la utilidad bruta con los ingresos, reflejando la rentabilidad de las ventas después de costos directos.

Margen Operacional: Evalúa la eficiencia en la gestión de costos y gastos operacionales en relación con los ingresos.

ROA (Return on Assets): Mide la rentabilidad de los activos de la empresa, indicando qué tan eficiente es en generar beneficios con sus recursos.

ROE (Return on Equity):Refleja la rentabilidad para los accionistas, mostrando la capacidad de la empresa para generar ganancias en función del capital propio.

Ingresos: Representan el total de ventas de la empresa en un período, siendo un indicador clave del crecimiento del negocio.

Utilidad Operacional:Es la ganancia obtenida después de restar los costos y gastos operacionales de los ingresos, sin incluir impuestos ni gastos financieros.

Activos: Recursos controlados por la empresa que generan valor económico. Su análisis permite evaluar la estructura financiera y el crecimiento del negocio.

Pasivos: Obligaciones financieras de la empresa. Compararlos con los activos y la rentabilidad ayuda a entender su nivel de endeudamiento y sostenibilidad.

A través de estadísticas descriptivas y visualización de datos con R, identificaremos tendencias, relaciones entre variables y posibles anomalías, proporcionando una base sólida para interpretar el desempeño financiero de Colombina en el período 2016-2024.

PASO 1. Instalar y cargar librerias

# Cargar librerías necesarias
library(readxl)
library(dplyr)
library(ggplot2)
library(plotly)
library(knitr)
library(kableExtra)
library(tidyr)

PASO 2: Cargar la base de datos

# Cargar datos desde el archivo Excel
datos <- read_excel("C:/Users/julie/OneDrive - PUJ Cali/Posgrado Finanzas/Maestria Finanzas/Módulo I/Colombina.xlsx")
View(datos)

# Ver las primeras filas de los datos
class(datos)  
## [1] "tbl_df"     "tbl"        "data.frame"
colnames(datos)  
##  [1] "Fecha"        "EBITDA"       "RATIO"        "MEBITDA"      "MBRUTO"      
##  [6] "MOPERACIONAL" "ROA"          "ROE"          "INGRESOS"     "UTILIDADOPER"
## [11] "ACTIVOS"      "PASIVOS"
head(datos)
Fecha EBITDA RATIO MEBITDA MBRUTO MOPERACIONAL ROA ROE INGRESOS UTILIDADOPER ACTIVOS PASIVOS
2016-01-01 47789382 0.46 11.92 33.48 7.66 3.75 22.90 400871238 134228489 1394448794 1195743931
2016-04-01 36523618 0.61 9.18 33.19 4.88 3.77 23.15 398002762 132113511 1383049000 1192835000
2016-07-01 55165000 0.59 11.47 34.03 8.05 3.79 23.40 480807000 163638000 1401579000 1204776000
2016-10-01 78004000 0.50 16.61 33.70 13.71 4.18 23.50 469500000 158209000 1416316000 1179764000
2017-01-01 49863000 0.54 12.56 34.83 8.74 3.57 26.64 397086000 138297000 1427549000 1240232000
2017-04-01 43652000 0.56 10.95 34.15 6.29 3.36 25.92 398514000 136094000 1460785000 1268580000
# Ver las primeras filas para explorar la estructura
glimpse(datos)
## Rows: 35
## Columns: 12
## $ Fecha        <dttm> 2016-01-01, 2016-04-01, 2016-07-01, 2016-10-01, 2017-01-…
## $ EBITDA       <dbl> 47789382, 36523618, 55165000, 78004000, 49863000, 4365200…
## $ RATIO        <dbl> 0.46, 0.61, 0.59, 0.50, 0.54, 0.56, 0.60, 0.57, 0.51, 0.4…
## $ MEBITDA      <dbl> 11.92, 9.18, 11.47, 16.61, 12.56, 10.95, 13.68, 7.34, 11.…
## $ MBRUTO       <dbl> 33.48, 33.19, 34.03, 33.70, 34.83, 34.15, 36.25, 34.38, 3…
## $ MOPERACIONAL <dbl> 7.66, 4.88, 8.05, 13.71, 8.74, 6.29, 9.67, 4.27, 8.11, 6.…
## $ ROA          <dbl> 3.75, 3.77, 3.79, 4.18, 3.57, 3.36, 4.06, 2.34, 2.40, 2.4…
## $ ROE          <dbl> 22.90, 23.15, 23.40, 23.50, 26.64, 25.92, 29.62, 15.16, 2…
## $ INGRESOS     <dbl> 400871238, 398002762, 480807000, 469500000, 397086000, 39…
## $ UTILIDADOPER <dbl> 134228489, 132113511, 163638000, 158209000, 138297000, 13…
## $ ACTIVOS      <dbl> 1394448794, 1383049000, 1401579000, 1416316000, 142754900…
## $ PASIVOS      <dbl> 1195743931, 1192835000, 1204776000, 1179764000, 124023200…
# Convertir la columna Fecha a formato Date si tiene información solo de fecha
datos <- datos %>% mutate(Fecha = as.Date(Fecha))

# Si tiene fecha y hora, conviértela a formato POSIXct
datos <- datos %>% mutate(Fecha = as.POSIXct(Fecha, format = "%Y-%m-%d %H:%M:%S"))
colnames(datos)
##  [1] "Fecha"        "EBITDA"       "RATIO"        "MEBITDA"      "MBRUTO"      
##  [6] "MOPERACIONAL" "ROA"          "ROE"          "INGRESOS"     "UTILIDADOPER"
## [11] "ACTIVOS"      "PASIVOS"
# Ver primeras filas
glimpse(datos)
## Rows: 35
## Columns: 12
## $ Fecha        <dttm> 2015-12-31 19:00:00, 2016-03-31 19:00:00, 2016-06-30 19:…
## $ EBITDA       <dbl> 47789382, 36523618, 55165000, 78004000, 49863000, 4365200…
## $ RATIO        <dbl> 0.46, 0.61, 0.59, 0.50, 0.54, 0.56, 0.60, 0.57, 0.51, 0.4…
## $ MEBITDA      <dbl> 11.92, 9.18, 11.47, 16.61, 12.56, 10.95, 13.68, 7.34, 11.…
## $ MBRUTO       <dbl> 33.48, 33.19, 34.03, 33.70, 34.83, 34.15, 36.25, 34.38, 3…
## $ MOPERACIONAL <dbl> 7.66, 4.88, 8.05, 13.71, 8.74, 6.29, 9.67, 4.27, 8.11, 6.…
## $ ROA          <dbl> 3.75, 3.77, 3.79, 4.18, 3.57, 3.36, 4.06, 2.34, 2.40, 2.4…
## $ ROE          <dbl> 22.90, 23.15, 23.40, 23.50, 26.64, 25.92, 29.62, 15.16, 2…
## $ INGRESOS     <dbl> 400871238, 398002762, 480807000, 469500000, 397086000, 39…
## $ UTILIDADOPER <dbl> 134228489, 132113511, 163638000, 158209000, 138297000, 13…
## $ ACTIVOS      <dbl> 1394448794, 1383049000, 1401579000, 1416316000, 142754900…
## $ PASIVOS      <dbl> 1195743931, 1192835000, 1204776000, 1179764000, 124023200…

PASO 3. Obtener estadisticas descriptivas

# Resumen estadístico de las variables numéricas
summary(datos)
##      Fecha                            EBITDA              RATIO       
##  Min.   :2015-12-31 19:00:00.00   Min.   : 19556000   Min.   :0.3900  
##  1st Qu.:2018-02-14 19:00:00.00   1st Qu.: 50363000   1st Qu.:0.4550  
##  Median :2020-03-31 19:00:00.00   Median : 61485000   Median :0.5100  
##  Mean   :2020-03-31 16:56:34.28   Mean   : 68257714   Mean   :0.5191  
##  3rd Qu.:2022-05-16 07:00:00.00   3rd Qu.: 79529500   3rd Qu.:0.5850  
##  Max.   :2024-06-30 19:00:00.00   Max.   :125447000   Max.   :0.6500  
##     MEBITDA          MBRUTO       MOPERACIONAL         ROA       
##  Min.   : 4.85   Min.   :29.05   Min.   :-0.540   Min.   :1.830  
##  1st Qu.:10.88   1st Qu.:33.26   1st Qu.: 6.815   1st Qu.:2.785  
##  Median :11.92   Median :34.15   Median : 8.110   Median :3.570  
##  Mean   :11.75   Mean   :34.21   Mean   : 8.012   Mean   :3.629  
##  3rd Qu.:13.05   3rd Qu.:35.16   3rd Qu.: 9.465   3rd Qu.:4.315  
##  Max.   :16.61   Max.   :36.86   Max.   :13.710   Max.   :5.770  
##       ROE           INGRESOS          UTILIDADOPER          ACTIVOS         
##  Min.   :13.98   Min.   :397086000   Min.   :117049000   Min.   :1.383e+09  
##  1st Qu.:23.02   1st Qu.:457554500   1st Qu.:153991500   1st Qu.:1.465e+09  
##  Median :25.92   Median :498207000   Median :174979000   Median :1.678e+09  
##  Mean   :28.36   Mean   :570795229   Mean   :195623514   Mean   :1.780e+09  
##  3rd Qu.:32.52   3rd Qu.:709237000   3rd Qu.:240252000   3rd Qu.:2.124e+09  
##  Max.   :51.97   Max.   :871052000   Max.   :318313000   Max.   :2.571e+09  
##     PASIVOS         
##  Min.   :1.180e+09  
##  1st Qu.:1.279e+09  
##  Median :1.465e+09  
##  Mean   :1.556e+09  
##  3rd Qu.:1.827e+09  
##  Max.   :2.273e+09

Cálculo de descriptivas individual

Estas estadísticas resumen los ingresos de Colombina en términos de tendencia central, dispersión y rangos. Aquí está su interpretación:

  1. Medidas de tendencia central: Media (Media_Ingresos): 57,079,5229 → En promedio, los ingresos de Colombina son aproximadamente 570.8 millones. Mediana (Mediana_Ingresos): 498,207,000 → El valor central de los ingresos es 498.2 millones, lo que significa que el 50% de los ingresos están por debajo de este valor y el otro 50% por encima. 💡 Interpretación: Como la media es mayor que la mediana, esto sugiere que hay algunos valores altos que están elevando el promedio (posible asimetría a la derecha).

  2. Medidas de dispersión: Mínimo (Min_Ingresos): 397,086,000 → El ingreso más bajo registrado fue 397.1 millones. Máximo (Max_Ingresos): 871,052,000 → El ingreso más alto fue 871.1 millones. Desviación estándar (SD_Ingresos): 163,091,152 → Indica una variabilidad alta en los ingresos, ya que los valores pueden alejarse bastante del promedio. 💡 Interpretación:

Existe una alta variabilidad en los ingresos, como se observa en la desviación estándar. El rango de ingresos es amplio (máximo - mínimo = 473.9 millones), lo que indica que Colombina ha tenido periodos de crecimiento y fluctuaciones en sus ingresos. Conclusión: La tendencia general muestra que los ingresos han aumentado, con algunos valores significativamente altos que elevan la media. La empresa tiene una alta variabilidad en sus ingresos, lo que puede estar influenciado por factores como estacionalidad, estrategias de mercado o cambios en la demanda. Sería útil analizar las causas de esta variabilidad y observar si el crecimiento en ingresos ha sido sostenido o si ha tenido fluctuaciones bruscas.

# Calcular estadísticas descriptivas
stats <- datos %>% 
  summarise(
    Media_Ingresos = mean(INGRESOS, na.rm = TRUE),
    Mediana_Ingresos = median(INGRESOS, na.rm = TRUE),
    Min_Ingresos = min(INGRESOS, na.rm = TRUE),
    Max_Ingresos = max(INGRESOS, na.rm = TRUE),
    SD_Ingresos = sd(INGRESOS, na.rm = TRUE)
  )
print(stats)
## # A tibble: 1 × 5
##   Media_Ingresos Mediana_Ingresos Min_Ingresos Max_Ingresos SD_Ingresos
##            <dbl>            <dbl>        <dbl>        <dbl>       <dbl>
## 1     570795229.        498207000    397086000    871052000  163091152.

Representación e interpretación de datos

Gráfico de barras para ingresos

Tendencia general: Se observa un crecimiento sostenido de los ingresos a lo largo de los años, con un aumento más pronunciado a partir de 2021. Variabilidad: Antes de 2021, los ingresos parecen tener fluctuaciones, con períodos de crecimiento y ligeras caídas. Pico reciente: Para julio de 2024, los ingresos alcanzan su punto más alto Patrón estacional o coyuntural: Es posible que haya factores económicos o estrategias de la empresa que hayan impulsado el crecimiento más marcado en los últimos años.

# Gráfico de barras para INGRESOS
plot_ingresos <- ggplot(datos, aes(x = Fecha, y = INGRESOS)) + 
  geom_bar(stat = "identity", fill = "steelblue") +
  theme_minimal() +
  labs(title = "Ingresos a lo largo del tiempo")
ggplotly(plot_ingresos)
# Gráfico de líneas para INGRESOS y UTILIDADOPER
plot_line <- ggplot(datos, aes(x = Fecha)) +
  geom_line(aes(y = INGRESOS, color = "Ingresos")) +
  geom_line(aes(y = UTILIDADOPER, color = "Utilidad Operativa")) +
  theme_minimal() +
  labs(title = "Ingresos y Utilidad Operativa")
ggplotly(plot_line)

BOxplot

Interpretación del gráfico: 1. INGRESOS (en azul) Mínimo: 397,086,000 Primer cuartil (Q1, 25% de los datos): 455,238,750 Mediana (Q2, 50% de los datos): 498,207,000 Tercer cuartil (Q3, 75% de los datos): 729,041,500 Máximo: 871,052,000 Conclusión: La variabilidad en los ingresos es alta, con un rango amplio entre el mínimo y el máximo. La mediana indica que la mayoría de los ingresos se concentran alrededor de los 498 millones, pero con valores que pueden llegar hasta 871 millones, mostrando un crecimiento importante.

2. EBITDA (en rojo) Tiene una escala mucho menor en comparación con los ingresos. La dispersión es más reducida, lo que sugiere que los valores del EBITDA son más estables en el tiempo. Conclusión: A pesar del crecimiento de los ingresos, el EBITDA es significativamente menor, lo que sugiere que los costos operativos también han aumentado o que los márgenes de ganancia son reducidos.

Conclusión general: Los ingresos han crecido de manera significativa, pero también presentan variabilidad. El EBITDA es mucho más estable y de menor magnitud, lo que puede indicar desafíos en rentabilidad o altos costos operativos. Este análisis sugiere que, aunque la empresa está facturando más, es importante evaluar si esos ingresos se están traduciendo en mayores utilidades.

# Boxplot para INGRESOS, EBITDA
plot_box <- ggplot(datos, aes(x = variable, y = value, fill = variable)) +
  geom_boxplot() +
  theme_minimal() +
  labs(title = "Boxplot de INGRESOS y EBITDA")

data_melted <- datos %>% 
  select(INGRESOS, EBITDA) %>%
  tidyr::pivot_longer(cols = everything(), names_to = "variable", values_to = "value")

ggplotly(ggplot(data_melted, aes(x = variable, y = value, fill = variable)) +
  geom_boxplot() +
  theme_minimal() +
  labs(title = "Boxplot de INGRESOS y EBITDA"))

Interpretación del gráfico de dispersión:

Relación positiva: Se observa una clara tendencia creciente, lo que indica que a medida que aumentan los ingresos, también lo hace la utilidad operativa. Esto sugiere que la empresa está generando más beneficios operativos conforme crecen sus ventas.

Correlación fuerte: La distribución de los puntos sugiere que existe una correlación positiva fuerte entre los ingresos y la utilidad operativa. No se observan valores atípicos ni una dispersión grande, lo que indica un patrón estable.

Crecimiento no lineal: Aunque la relación es positiva, algunos puntos muestran un crecimiento más acelerado en la utilidad operativa a medida que los ingresos aumentan. Esto podría significar mejoras en la eficiencia operativa o en los márgenes de rentabilidad.

Conclusión: La empresa genera más utilidad operativa a medida que aumentan sus ingresos, lo que es un buen indicador financiero.

Si esta tendencia se mantiene, significa que el crecimiento de ingresos es saludable y no está siendo opacado por un aumento proporcional de costos operativos.

Sería útil complementar este análisis con el margen operativo para evaluar si la rentabilidad sobre las ventas se mantiene o mejora con el tiempo.

# Gráfico de dispersión para INGRESOS vs UTILIDADOPER
scatter_plot <- ggplot(datos, aes(x = INGRESOS, y = UTILIDADOPER)) +
  geom_point(color = "blue", alpha = 0.6) +
  theme_minimal() +
  labs(title = "Dispersión de INGRESOS vs UTILIDADOPER")
ggplotly(scatter_plot)

OPCIONAL: Calculamos desviación estandar de un grupo de variables

# Filtrar solo columnas numéricas (excepto la fecha)
data_num <- datos %>% select(where(is.numeric))

# Calcular la desviación estándar de cada variable
stats <- data_num %>%
  summarise(across(everything(), sd, .names = "{.col}_DesvEstandar")) %>%
  pivot_longer(cols = everything(), names_to = "Variable", values_to = "Desviación Estándar") %>%
  mutate(Variable = sub("_DesvEstandar", "", Variable))
# Calcular la desviación estándar de cada variable
stats <- data_num %>%
  summarise(across(everything(), sd, .names = "{.col}_DesvEstandar")) %>%
  pivot_longer(cols = everything(), names_to = "Variable", values_to = "Desviación Estándar") %>%
  mutate(Variable = sub("_DesvEstandar", "", Variable))
 #Mostrar la tabla en un formato sencillo con kable
stats %>%
  kable("html", digits = 2, caption = "Desviación Estándar de las Variables") %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed"))
Desviación Estándar de las Variables
Variable Desviación Estándar
EBITDA 26398121.57
RATIO 0.07
MEBITDA 2.14
MBRUTO 1.51
MOPERACIONAL 2.57
ROA 1.10
ROE 9.65
INGRESOS 163091151.62
UTILIDADOPER 58066416.84
ACTIVOS 354025293.39
PASIVOS 320346089.34