Análisis de cancelación de reservas de hotel
Scenario Link to heading
Una cadena de hoteles de renombre, ha observado una alta tasa de cancelación de reservas, lo que ha generado preocupación en la dirección. Con el objetivo de mejorar la eficiencia operativa y la experiencia del cliente, se plantea la siguiente tarea empresarial.
Tarea Empresarial Link to heading
Identificar los principales factores que influyen en la tasa de cancelación de las reservas de hotel y utilizar esta información para generar recomendaciones para optimizar los procesos y brinden una experiencia única al cliente en el marco de la transformación digital.
Para este análisis haré uso de R, comenzando por configurara el entorno, importar el dataset, después limpiar, analizar, y visualizar los resultados obtenidos para finalmente mostrar un resumen del análisis, como también una presentación a los stakeholders.
.
Configurando el entorno en R Link to heading
Cargando pakages de la colección Tidyverse usando R , para la importación, limpieza, transformación y visualización de los datos.
library(readr)
library(tidyr)
library(dplyr)
library(skimr)
library(ggplot2)
library(lubridate)
Importando el Dataset Link to heading
hotel_bookings_df <- read_csv("hotel_bookings.csv")
Entendiendo la estructura del dataset
glimpse(hotel_bookings_df)
skim_without_charts(hotel_bookings_df)
Calculando el rango de años de los datos históricos, usando la columna “reservation_status_date” .
max(hotel_bookings_df$reservation_status_date)
min(hotel_bookings_df$reservation_status_date)
summary(hotel_bookings_df)
Limpiando los datos Link to heading
Partiendo del dataset se selecciona y añade algunas columnas relevantes para responder a la pregunta empresarial:
hotel_bookings_df <- hotel_bookings_df %>%
mutate(adults_with_children =
ifelse(adults & children | babies,1,0))
Seleccionando columnas relevantes y generando un nuevo dataframe:
trimmed_hotel_booking_df <- hotel_bookings_df %>%
select(hotel,adults_with_children,lead_time,market_segment,reservation_status,reservation_status_date)
Reemplazando datos Na :
trimmed_hotel_booking_df <- replace_na(trimmed_hotel_booking_df,
list(hotel=0,adults_with_children= 0,lead_time=0,market_segment=0,
reservation_status=0,reservation_status_date=0))
Filtrando los datos relevantes que para este caso son las reservas canceladas:
cancells_hotel_booking <- trimmed_hotel_booking_df %>%
filter(reservation_status == "Canceled")
Analizando Link to heading
Calculando la tasa de cancelación:
nrow(cancells_hotel_booking) / nrow(trimmed_hotel_booking_df)
Para los hoteles de la marca la tasa de cancelacion total es del 36%.
Buscando alguno de los factores de esta alta tasa de cancelación planteo la siguiente pregunta:
Usando el data frame generado “cancells_hotel_booking”
cancells_booking_by_marketSegment_df <- cancells_hotel_booking %>%
arrange(market_segment) %>%
group_by(market_segment) %>%
summarize(cancellation_rate =round(n()/nrow(trimmed_hotel_booking_df), digits = 5), .groups = "drop") %>%
arrange(desc(cancellation_rate))
head(arrange(cancells_booking_by_marketSegment_df, desc(cancellation_rate)), n = 5)
Los resultados revelan que la tasa de cancelación de reservas es más alta en las agencias de viaje en línea, seguida de las reservas realizadas por grupos o eventos, como tours y conferencias, donde se reservan múltiples habitaciones. Además, se observa que las reservas generadas por agencias de viajes físicas u operadores de viajes también presentan una tasa de cancelación significativa.
El análisis del tiempo de espera en diferentes estados de reserva, como la cancelación, salida o no presentación al hotel, permite comprender las diferencias en la antelación de la reserva.
reservation_status_summarize_df <- trimmed_hotel_booking_df %>%
arrange(reservation_status) %>%
group_by(reservation_status) %>%
summarize(avg_lead_time = mean(lead_time))
head(reservation_status_summarize_df)
Los clientes que reservan con antelación son los que tienen más posibilidad de cancelar la reserva.
La siguiente pregunta tiene como objetivo identificar las características del cliente que tiende más a cancelar las reservas:
cancells_booking_by_client <- cancells_hotel_booking %>%
arrange(adults_with_children) %>%
group_by(adults_with_children) %>%
summarize(cancellations_reservation_count = n(), avg_lead_time = mean(lead_time))
head(cancells_booking_by_client)
Los adultos sin niños, presenta un número de cancelaciones de 39938, respecto a los adultos con niño con solo, 3079. Respecto a la duración promedio del tiempo de espera, los clientes sin niños tiene una media de 150.1 días, que es un poco menos con las familias con hijos con una media de 111.307.
trimmed_hotel_booking_df %>%
group_by(adults_with_children) %>%
summarize(procentaje_de_reservas =n()/nrow(trimmed_hotel_booking_df))
Aunque el número de cancelaciones es mayor en los adultos sin hijo, esto es porque son los que más reservaciones realiza, por lo tanto, es conveniente calcular la tasa de cancelación por adulto con y sin hijos:
rate_cancells_by_cliente <- trimmed_hotel_booking_df %>%
group_by(adults_with_children) %>%
summarize(rate_cancellations = sum(reservation_status == "Canceled")/ n())
head(rate_cancells_by_cliente)
El 33.8% de los clientes con hijo y el 36.7% que no los tiene cancelan las reservaciones.
Otra pregunta a responder es:
cancellations_by_month_df <- cancells_hotel_booking %>%
group_by(trimestre = quarter(reservation_status_date)) %>%
summarize(cancellation_count = n(), .groups = "drop") %>%
arrange(desc(cancellation_count))
head(cancellations_by_month_df)
El mayor número de cancelaciones se producen en el primer trimestre, y el más bajo número de cancelaciones se produce en el segundo trimestre.
Visualización Link to heading
Número de cancelaciones por segmento de mercado y tipo de hotel
ggplot( data = hotel_bookings) +
geom_bar(mapping = aes(x = market_segment)) +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
labs(x = "Segmento de Mercado", y = "Numero de cancelaciones", caption = "Data from 2014 to 2017")+
ggtitle("Numero de cancelaciones por segmento de mercado ") +
facet_wrap(~hotel)
Visualización, de la relación de segmento y tasa de cancelaciones de reservas de hotel.
ggplot(data = cancells_booking_by_marketSegment_df) +
geom_col(mapping = aes(x = reorder(market_segment, cancellation_rate), y = cancellation_rate)) +
labs(x = "Segmento de Mercado", y = "Tasa de Cancelacion") +
ggtitle("Relación Segmentos de Mercado y Tasa de Cancelaciones de reservas de hotel") +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
Visualización por cancelaciones por trimestre
ggplot(data = cancellations_by_month_df) +
geom_col(mapping = aes(x = reorder(trimestre,cancellation_count), y = cancellation_count )) +
labs(x = "Trimestres",y = "Numero de cancelaciones", caption = "Data from 2014 to 2017") +
ggtitle("Cancelaciones por trimestre ")
Reumen del Análsis Link to heading
Las cancelaciones de reservas de hotel están influenciadas en gran medida por las agencias de viajes en línea, con un significante número de cancelaciones por parte de clientes adultos sin hijos. Se observa que los períodos de cancelación más altos ocurren en el primer y cuarto trimestre del año.
Algunas métricas destacadas sobre las cancelaciones de reservas son las siguientes:
-
La tasa de cancelación durante el período de 2014 a 2017 alcanzó el 36%, lo cual es considerado un porcentaje significativo.
-
Las agencias de viajes en línea representan el 16% de las cancelaciones, seguidas por las reservas realizadas para grupos como eventos o conferencias con un 10%, y las agencias de viajes fuera de línea con un 6%.
-
Los adultos sin hijos tienen una tasa de cancelación 2.4% mayor, que en comparación con los adultos con hijos.
-
Se observa que los períodos de mayor cancelación de reservas se encuentran en el primer y cuarto trimestre del año.
Como recomendación, la cadena de hoteles debe enfocarse en el segmento de agencias de viajes en línea (Online TA), especialmente dirigido a clientes adultos sin hijos, quienes representan el 92.4% de las reservas. Es importante optimizar los procesos durante el primer y segundo trimestre del año, ya que se registran más de 10,000 cancelaciones en estos períodos, con el objetivo de reducir la tasa de cancelación y mejorar la eficiencia en el manejo de reservas.
Presentación Link to heading
En la Presentacion puede verse los resusltados y las conclusiones presentadas a los stakeholders