1. Introducción

El sector turístico representa una de las actividades económicas más dinámicas y con mayor potencial de crecimiento en Colombia. En particular, la ciudad de Cali se ha posicionado como un destino turístico relevante a nivel nacional e internacional, destacándose por su oferta cultural, gastronómica, deportiva y de eventos. La Feria de Cali, los campeonatos mundiales de salsa, los eventos deportivos y el creciente turismo de negocios han consolidado a la capital del Valle del Cauca como un polo de atracción para visitantes nacionales y extranjeros.

Dentro del sector turístico, la ocupación hotelera constituye un indicador clave para medir el desempeño del sector, ya que refleja directamente la demanda real de alojamiento y, de manera indirecta, el dinamismo de actividades complementarias como restaurantes, transporte, comercio y entretenimiento.

2. Librerías

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.2.0     ✔ readr     2.2.0
## ✔ forcats   1.0.1     ✔ stringr   1.6.0
## ✔ ggplot2   4.0.2     ✔ tibble    3.3.1
## ✔ lubridate 1.9.5     ✔ tidyr     1.3.2
## ✔ purrr     1.2.1     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(readxl)  # Para leer archivos Excel
library(tseries)  # Para pruebas de estacionariedad
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
library(forecast)  # Para modelado ARIMA y pronósticos
library(ggplot2)  # Para visualización de datos
library(plotly)  # Para gráficos interactivos
## 
## Attaching package: 'plotly'
## 
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## 
## The following object is masked from 'package:stats':
## 
##     filter
## 
## The following object is masked from 'package:graphics':
## 
##     layout
library(timetk)   

Cargar base de datos

library(readxl)
data <- read_excel("C:/Users/juand/OneDrive/Desktop/DatosCasoP1.xlsx")

Un paso indispensable es declarar la variable como serie temporal:

ocupacion <- ts(data$OCUP_HOTEL_CALI, start=c(2012,1), frequency=12)

trm <- ts(data$TRM, start=c(2012,1), frequency=12)

ise <- ts(data$ISE, start=c(2012,1), frequency=12)

brent <- ts(data$BRENT, start=c(2012,1), frequency=12)

xcali<- ts(data$X_CALI, start=c(2012,1), frequency=12)

Visualizacion de las series:

La visualización de la serie temporal permite observar la evolución de la ocupación hotelera a lo largo del tiempo. A través de esta gráfica es posible identificar patrones generales como tendencias de crecimiento o disminución, así como posibles fluctuaciones asociadas a factores estacionales o económicos.

La tasa representativa del mercado refleja el valor del peso colombiano frente al dólar. Cambios en esta variable pueden influir en el turismo internacional, ya que una depreciación del peso puede hacer que el país sea un destino más atractivo para visitantes extranjeros.

El índice de seguimiento a la economía es un indicador que permite evaluar el comportamiento general de la actividad económica en el país. Una mayor actividad económica suele estar asociada a un aumento en la demanda de servicios, incluido el turismo.

El precio del petróleo puede influir en los costos de transporte y en el desempeño económico global, lo que a su vez puede afectar indirectamente el flujo turístico.

A partir de la gráfica de la serie temporal se puede observar la evolución de la ocupación hotelera en Cali a lo largo del tiempo. La serie presenta fluctuaciones que pueden estar asociadas a cambios en la demanda turística, condiciones económicas o eventos específicos que afectan el flujo de visitantes a la ciudad. Este tipo de visualización permite identificar posibles tendencias o patrones estacionales.

plot(ocupacion,
     main="Ocupación Hotelera en Cali",
     ylab="Ocupación",
     xlab="Tiempo",
     col="blue")

plot(trm,
main="Tasa Representativa del Mercado",
ylab="TRM",
xlab="Tiempo",
col="darkgreen")

plot(ise,
main="Índice de Seguimiento a la Economía",
ylab="ISE",
xlab="tiempo",
col="purple")

plot(brent,
main="Precio del Petróleo Brent",
ylab="Precio",
xlab="tiempo",
col="orange")

plot(xcali,
     main="Actividad economica",
     ylab="Actividad economica",
     xlab="Tiempo",
     col="yellow")

Decomposicion de la serie:

La descomposición de la serie permite separar su comportamiento en tres componentes principales: tendencia, estacionalidad y componente irregular.

La tendencia refleja el comportamiento de largo plazo de la ocupación hotelera, mientras que el componente estacional muestra patrones que se repiten regularmente dentro del año. En el sector turístico, estos patrones suelen estar relacionados con temporadas vacacionales, eventos turísticos o periodos de mayor actividad económica. Por último, el componente irregular recoge las fluctuaciones aleatorias que no pueden explicarse por los otros componentes.

descomp <- decompose(ocupacion)
descomptrm <- decompose(trm)
descompise <- decompose(ise)
descompbrent <- decompose(brent)
descompxcali <- decompose(xcali)

plot(descomp)

plot(descomptrm)

plot(descompise)

plot(descompbrent)

plot(descompxcali)

Original vs ajustada:

# 1. Ocupación Hotelera
ocupacion_ajustada <- ocupacion - descomp$seasonal # Serie sin estacionalidad
ocupacion_tendencia <- descomp$trend

# Gráfico comparativo: Original vs Ajustada (Desestacionalizada)
plot(ocupacion, col="blue", lwd=1.5, 
     main="Ocupación Hotelera: Original vs Desestacionalizada",
     ylab="Ocupación", xlab="Año")
lines(ocupacion_ajustada, col="red", lwd=1.5)
legend("topleft", legend=c("Original", "Desestacionalizada"), 
       col=c("blue", "red"), lwd=1.5, cex=0.8)

# Gráfico comparativo: Original vs Tendencia
plot(ocupacion, col="blue", lwd=1.5, 
     main="Ocupación Hotelera: Original vs Tendencia",
     ylab="Ocupación", xlab="Año")
lines(ocupacion_tendencia, col="darkgreen", lwd=2)
legend("topleft", legend=c("Original", "Tendencia"), 
       col=c("blue", "darkgreen"), lwd=1.5, cex=0.8)

# Cálculo de la Tasa de Crecimiento Anual de la Tendencia (%)
# Extraemos la tendencia y calculamos su variación porcentual anual
tendencia_ts <- ocupacion_tendencia
tiempos <- time(tendencia_ts)





# --- Para TRM ---
trm_ajustada <- trm - descomptrm$seasonal
trm_tendencia <- descomptrm$trend

plot(trm, col="darkgreen", lwd=1.5, main="TRM: Original vs Desestacionalizada", ylab="TRM", xlab="Año")
lines(trm_ajustada, col="red", lwd=1.5)
legend("topleft", legend=c("Original", "Desestacionalizada"), col=c("darkgreen", "red"), lwd=1.5, cex=0.8)

plot(trm, col="darkgreen", lwd=1.5, main="TRM: Original vs Tendencia", ylab="TRM", xlab="Año")
lines(trm_tendencia, col="darkorange", lwd=2)
legend("topleft", legend=c("Original", "Tendencia"), col=c("darkgreen", "darkorange"), lwd=1.5, cex=0.8)

# --- Para ISE ---
ise_ajustada <- ise - descompise$seasonal
ise_tendencia <- descompise$trend

plot(ise, col="purple", lwd=1.5, main="ISE: Original vs Desestacionalizada", ylab="ISE", xlab="Año")
lines(ise_ajustada, col="red", lwd=1.5)
legend("topleft", legend=c("Original", "Desestacionalizada"), col=c("purple", "red"), lwd=1.5, cex=0.8)

plot(ise, col="purple", lwd=1.5, main="ISE: Original vs Tendencia", ylab="ISE", xlab="Año")
lines(ise_tendencia, col="brown", lwd=2)
legend("topleft", legend=c("Original", "Tendencia"), col=c("purple", "brown"), lwd=1.5, cex=0.8)

# --- Para BRENT ---
brent_ajustada <- brent - descompbrent$seasonal
brent_tendencia <- descompbrent$trend

plot(brent, col="orange", lwd=1.5, main="BRENT: Original vs Desestacionalizada", ylab="Precio Brent", xlab="Año")
lines(brent_ajustada, col="red", lwd=1.5)
legend("topleft", legend=c("Original", "Desestacionalizada"), col=c("orange", "red"), lwd=1.5, cex=0.8)

plot(brent, col="orange", lwd=1.5, main="BRENT: Original vs Tendencia", ylab="Precio Brent", xlab="Año")
lines(brent_tendencia, col="black", lwd=2)
legend("topleft", legend=c("Original", "Tendencia"), col=c("orange", "black"), lwd=1.5, cex=0.8)

# --- Para XCALI (Actividad Económica) ---
xcali_ajustada <- xcali - descompxcali$seasonal
xcali_tendencia <- descompxcali$trend

plot(xcali, col="gold", lwd=1.5, main="Actividad Económica Cali: Original vs Desestacionalizada", ylab="Actividad", xlab="Año")
lines(xcali_ajustada, col="red", lwd=1.5)
legend("topleft", legend=c("Original", "Desestacionalizada"), col=c("gold", "red"), lwd=1.5, cex=0.8)

plot(xcali, col="gold", lwd=1.5, main="Actividad Económica Cali: Original vs Tendencia", ylab="Actividad", xlab="Año")
lines(xcali_tendencia, col="darkred", lwd=2)
legend("topleft", legend=c("Original", "Tendencia"), col=c("gold", "darkred"), lwd=1.5, cex=0.8)

Conclusiones y recomendaciones estrategicas:

  1. basada en estacionalidad: estrategia de precios dinamicos

Hallazgo: La ocupación hotelera tiene picos en diciembre-enero y Semana Santa, y valles en febrero y septiembre.

Que hacer:

Temporada alta: Incrementar tarifas 15-25%

Temporada baja: Crear paquetes con servicios adicionales (sin bajar precios base)

Programar mantenimiento en febrero y septiembre

2.Basada en TRM: estrategia segun turismo internacional Hallazgo: TRM > $4,000 = peso depreciado = más turistas extranjeros

Acciones:

Intensificar marketing internacional cuando TRM supere $4,000

Crear paquetes en dólares para proteger ingresos

Si TRM baja (< $3,800): comprar insumos importados (tecnología, mobiliario)

  1. Segun costos de transporte y precio brent Hallazgo: Brent alto = tiquetes aéreos caros = menos turistas de larga distancia

Que hacer:

Brent alto: Promover turismo regional (ciudades cercanas vía terrestre)

Brent bajo: Aumentar promoción internacional

Negociar alianzas “Vuelo + Hotel” con aerolíneas

Extrapolacion a otros sectores

Sector y Estrategia aplicable Aerolíneas: Ajustar tarifas según Brent y estacionalidad Restaurantes: Promociones en temporada baja según ISE Comercio: Comprar importados cuando TRM baja Transporte: Expandir flota cuando ISE crece