1 Compresión del Negocio

El sector hotelero es un componente clave en la economía global, impulsado por la alta demanda de servicios de alojamiento en diversas regiones, desde destinos turísticos hasta áreas de negocios. Para los hoteles, maximizar la ocupación de habitaciones es crucial para garantizar la rentabilidad, y lograr esto implica gestionar eficientemente las reservas. Sin embargo, uno de los desafíos más comunes en esta industria son las cancelaciones de reservas, que pueden afectar gravemente tanto los ingresos como la operativa diaria de los establecimientos.

Las cancelaciones, sobre todo las de última hora, generan incertidumbre operativa. Si bien es normal que haya algunas cancelaciones, aquellas que ocurren cerca de la fecha de llegada afectan significativamente la capacidad de un hotel para llenar sus habitaciones, especialmente cuando la demanda es elevada o la capacidad del hotel es limitada. Este tipo de cancelaciones, además, obstaculiza la planificación de recursos como el personal de limpieza, recepción y mantenimiento, lo que puede generar ineficiencias operativas y costos adicionales.

1.0.1 ¿Por qué es importante la predicción de cancelaciones para un hotel?

La predicción de cancelaciones se ha convertido en una herramienta crucial para los hoteles, ya que permite identificar con antelación qué reservas tienen mayor probabilidad de ser canceladas. Esto resulta fundamental para minimizar las pérdidas económicas, ya que las habitaciones de hotel son bienes perecederos; es decir, una vez que pasa una noche, la oportunidad de vender esa habitación se pierde de manera irreversible. Al predecir qué reservas están en riesgo de cancelación, el hotel puede actuar con antelación, tomar decisiones estratégicas y, si es necesario, reubicar o modificar las reservas antes de que se confirme la cancelación.

Además, la capacidad de predecir las cancelaciones también mejora la gestión de recursos. Los hoteles dependen de la planificación anticipada para coordinar eficazmente sus operaciones. Si un hotel puede anticipar una cancelación, puede ajustar su personal y otros recursos (como la limpieza o el mantenimiento) de manera más eficiente, evitando tanto la subutilización como la sobrecarga de recursos.

Por último, la predicción de cancelaciones permite una mejor gestión de relaciones con los clientes. Los hoteles pueden intervenir de manera proactiva con los clientes cuya reserva está en riesgo de ser cancelada, ofreciéndoles incentivos, alternativas o ajustes en las condiciones para reducir la probabilidad de que se cancele la reserva, lo cual mejora la satisfacción del cliente y contribuye a una mayor fidelización.

1.1 ¿Cómo puede afectar esto al negocio?

Las cancelaciones de reservas tienen un impacto directo tanto en los ingresos como en la operativa del hotel. En términos financieros, las cancelaciones tardías representan una pérdida inmediata de ingresos. La incertidumbre que genera la cancelación de una reserva, especialmente cuando ocurre cerca de la fecha de llegada, dificulta la capacidad del hotel para reemplazar la habitación con otro cliente a corto plazo. Esto se convierte en un problema mayor cuando las cancelaciones ocurren en temporadas de alta demanda o cuando el hotel tiene una capacidad limitada.

En el ámbito operativo, las cancelaciones afectan la gestión de recursos humanos y materiales. Los hoteles requieren una programación eficiente de su personal y una logística bien organizada para el mantenimiento de las instalaciones. Cuando una habitación se cancela inesperadamente, se interrumpe la planificación de tareas como la limpieza de habitaciones o la asignación de personal, lo que puede resultar en ineficiencias. Esta ineficiencia operativa no solo aumenta los costos, sino que también puede afectar la calidad del servicio proporcionado a los clientes.

Además, una alta tasa de cancelaciones puede dañar la reputación del hotel. Si las cancelaciones son frecuentes o mal gestionadas, los clientes pueden sentirse desconfiados respecto a las políticas de reservas del hotel, lo que puede impactar negativamente en su percepción del servicio. Esto puede traducirse en una disminución de la fidelidad del cliente y una reducción de los ingresos a largo plazo, ya que los clientes potenciales pueden optar por otros establecimientos con políticas más claras y confiables.

1.2 Transformación del Problema en un Análisis de Datos

El problema de las cancelaciones de reservas en un hotel se puede abordar mediante un análisis de datos para predecir qué reservas tienen mayor probabilidad de ser canceladas. Para esto, transformaremos el problema en una tarea de clasificación binaria, donde el objetivo es predecir si una reserva será cancelada o no, basándonos en diversas características de la reserva y el cliente.

Utilizaremos un modelo de regresión logística, que es ideal para problemas de clasificación binaria. Este modelo nos permitirá no solo predecir si una reserva será cancelada, sino también calcular la probabilidad de cancelación, lo cual es crucial para tomar decisiones informadas y proactivas.

1.2.1 Proceso de Transformación

El primer paso será recopilar datos históricos sobre las reservas del hotel, utilizando para ello la base de datos Hotel Booking Demand disponible en Kaggle. Esta base de datos incluye características clave de las reservas, como el canal de reserva, la fecha de la reserva, la duración de la estancia, el número de personas, el precio, y las políticas de cancelación, entre otras. A continuación, estos datos se prepararán mediante limpieza, manejo de valores faltantes y codificación de variables categóricas, para que el modelo pueda procesar la información de manera eficiente.

Con los datos listos, entrenaremos el modelo de regresión logística. Este modelo aprenderá a partir de las características de las reservas pasadas y sus resultados (cancelada o no cancelada), generando una fórmula matemática que podrá predecir la probabilidad de cancelación de nuevas reservas. La salida será una probabilidad entre 0 y 1, indicando la probabilidad de que una reserva se cancele.

Una vez entrenado el modelo, se evaluará su rendimiento usando métricas como la precisión y el recall, para asegurarse de que las predicciones sean confiables. Finalmente, el modelo se podrá implementar para predecir las cancelaciones de reservas en tiempo real, lo que permitirá al hotel tomar decisiones más informadas, como ajustar precios o contactar a clientes con alta probabilidad de cancelación.

1.2.2 Beneficios

Este enfoque de análisis de datos permitirá al hotel reducir las pérdidas económicas causadas por cancelaciones imprevistas, optimizar el uso de recursos operativos y mejorar la experiencia del cliente mediante intervenciones proactivas. Al predecir las cancelaciones de manera anticipada, el hotel podrá gestionar mejor las operaciones y tomar decisiones estratégicas para aumentar su rentabilidad.

2 Comprensión de los Datos

2.1 Estructura del Conjunto de Datos

El conjunto de datos está compuesto por:

## Número de filas (observaciones): 119390
## Número de columnas (variables): 32

Estas variables se dividen según su tipo de dato en:

## Cantidad de variables numéricas: 16

Que incluyen información como el número de noches reservadas, el número de acompañantes, el tiempo de antelación con el que se realizó la reserva, la tarifa diaria promedio, entre otras.

## Cantidad de variables categóricas: 16

Que representan atributos como el tipo de hotel, el país de procedencia del cliente, el canal de distribución, el estado de la reserva y el tipo de cliente.

A continuación se listan las variables incluidas en el dataset:

## Variables del dataset:
##  [1] "hotel"                          "is_canceled"                   
##  [3] "lead_time"                      "arrival_date_year"             
##  [5] "arrival_date_month"             "arrival_date_week_number"      
##  [7] "arrival_date_day_of_month"      "stays_in_weekend_nights"       
##  [9] "stays_in_week_nights"           "adults"                        
## [11] "children"                       "babies"                        
## [13] "meal"                           "country"                       
## [15] "market_segment"                 "distribution_channel"          
## [17] "is_repeated_guest"              "previous_cancellations"        
## [19] "previous_bookings_not_canceled" "reserved_room_type"            
## [21] "assigned_room_type"             "booking_changes"               
## [23] "deposit_type"                   "agent"                         
## [25] "company"                        "days_in_waiting_list"          
## [27] "customer_type"                  "adr"                           
## [29] "required_car_parking_spaces"    "total_of_special_requests"     
## [31] "reservation_status"             "reservation_status_date"

2.1.1 Variable Objetivo

La variable que se desea predecir es is_canceled, la cual toma el valor:

  • 1 si la reserva fue cancelada.

  • 0 si la reserva se concretó.

Esta variable será tratada como una variable binaria, lo que justifica el uso de un modelo de regresión logística en el desarrollo posterior del proyecto.

2.2 Descripción y Análisis de Variables

A continuación, se presenta una tabla con la descripción de las principales variables del conjunto de datos, su tipo y su significado en el contexto del análisis de cancelaciones:

Resumen estadístico y descripción de las variables
variable tipo faltantes estadisticas descripcion
is_canceled numeric 0 Min: 0 Max: 1 Media: 0.370416282770751 SD: 0.482918226592599 Indica si la reserva fue cancelada (1 = cancelada, 0 = no cancelada)
lead_time numeric 0 Min: 0 Max: 737 Media: 104.01141636653 SD: 106.863097047988 Días entre la reserva y la fecha de llegada
arrival_date_year numeric 0 Min: 2015 Max: 2017 Media: 2016.15655415026 SD: 0.707475944520355 Año de llegada del cliente
stays_in_weekend_nights numeric 0 Min: 0 Max: 19 Media: 0.927598626350616 SD: 0.998613494597877 Número de noches de fin de semana reservadas
stays_in_week_nights numeric 0 Min: 0 Max: 50 Media: 2.50030153279169 SD: 1.90828561504791 Número de noches de la semana reservadas
adults numeric 0 Min: 0 Max: 55 Media: 1.856403383868 SD: 0.579260998832755 Número de adultos en la reserva
children numeric 4 Min: 0 Max: 10 Media: 0.10388990333875 SD: 0.398561444786442 Número de niños en la reserva
babies numeric 0 Min: 0 Max: 10 Media: 0.00794873942541252 SD: 0.0974361913012644 Número de bebés en la reserva
is_repeated_guest numeric 0 Min: 0 Max: 1 Media: 0.0319122204539744 SD: 0.175767145410657 Indica si el cliente es un huésped repetido (1 = sí, 0 = no)
previous_cancellations numeric 0 Min: 0 Max: 26 Media: 0.0871178490660859 SD: 0.844336384154511 Número de cancelaciones anteriores realizadas por el cliente
previous_bookings_not_canceled numeric 0 Min: 0 Max: 72 Media: 0.137096909288885 SD: 1.49743684770768 Número de reservas previas no canceladas realizadas por el cliente
booking_changes numeric 0 Min: 0 Max: 21 Media: 0.221124047240137 SD: 0.652305572674772 Número de cambios de reserva realizados
days_in_waiting_list numeric 0 Min: 0 Max: 391 Media: 2.32114917497278 SD: 17.5947208787762 Número de días en la lista de espera
adr numeric 0 Min: -6.38 Max: 5400 Media: 101.831121534467 SD: 50.5357902855487 Tarifa diaria promedio por habitación
required_car_parking_spaces numeric 0 Min: 0 Max: 8 Media: 0.0625177988106206 SD: 0.245291147467494 Número de espacios de estacionamiento requeridos
total_of_special_requests numeric 0 Min: 0 Max: 5 Media: 0.571362760700226 SD: 0.792798422809411 Número total de solicitudes especiales realizadas por el cliente
hotel character 0 City Hotel : 79330, Resort Hotel : 40060 Tipo de hotel (Resort o City Hotel)
arrival_date_month character 0 April : 11089, August : 13877, December : 6780, February : 8068, January : 5929, July : 12661, June : 10939, March : 9794, May : 11791, November : 6794, October : 11160, September : 10508 Mes de llegada del cliente
arrival_date_week_number factor 0 1 : 1047, 2 : 1218, 3 : 1319, 4 : 1487, 5 : 1387, 6 : 1508, 7 : 2109, 8 : 2216, 9 : 2117, 10 : 2149, 11 : 2070, 12 : 2083, 13 : 2416, 14 : 2264, 15 : 2689, 16 : 2405, 17 : 2805, 18 : 2926, 19 : 2402, 20 : 2785, 21 : 2854, 22 : 2546, 23 : 2621, 24 : 2498, 25 : 2663, 26 : 2391, 27 : 2664, 28 : 2853, 29 : 2763, 30 : 3087, 31 : 2741, 32 : 3045, 33 : 3580, 34 : 3040, 35 : 2593, 36 : 2167, 37 : 2229, 38 : 2661, 39 : 2581, 40 : 2397, 41 : 2699, 42 : 2756, 43 : 2352, 44 : 2272, 45 : 1941, 46 : 1574, 47 : 1685, 48 : 1504, 49 : 1782, 50 : 1505, 51 : 933, 52 : 1195, 53 : 1816 Número de la semana del año en que se hace la llegada
arrival_date_day_of_month factor 0 1 : 3626, 2 : 4055, 3 : 3855, 4 : 3763, 5 : 4317, 6 : 3833, 7 : 3665, 8 : 3921, 9 : 4096, 10 : 3575, 11 : 3599, 12 : 4087, 13 : 3745, 14 : 3819, 15 : 4196, 16 : 4078, 17 : 4406, 18 : 4002, 19 : 4052, 20 : 4032, 21 : 3767, 22 : 3596, 23 : 3616, 24 : 3993, 25 : 4160, 26 : 4147, 27 : 3802, 28 : 3946, 29 : 3580, 30 : 3853, 31 : 2208 Día del mes en que se realiza la llegada
meal character 0 BB : 92310, FB : 798, HB : 14463, SC : 10650, Undefined : 1169 Tipo de comida reservada (por ejemplo, BB, HB, etc.)
country character 0 N/A País de origen del cliente
market_segment character 0 Aviation : 237, Complementary : 743, Corporate : 5295, Direct : 12606, Groups : 19811, Offline TA/TO : 24219, Online TA : 56477, Undefined : 2 Segmento de mercado de la reserva (por ejemplo, agencia, corporativo, etc.)
distribution_channel character 0 Corporate : 6677, Direct : 14645, GDS : 193, TA/TO : 97870, Undefined : 5 Canal de distribución (por ejemplo, web, agencia de viajes, etc.)
reserved_room_type character 0 A : 85994, B : 1118, C : 932, D : 19201, E : 6535, F : 2897, G : 2094, H : 601, L : 6, P : 12 Tipo de habitación reservada
assigned_room_type character 0 A : 74053, B : 2163, C : 2375, D : 25322, E : 7806, F : 3751, G : 2553, H : 712, I : 363, K : 279, L : 1, P : 12 Tipo de habitación asignada
deposit_type character 0 No Deposit : 104641, Non Refund : 14587, Refundable : 162 Tipo de depósito (sin depósito, con depósito, etc.)
agent character 0 N/A Número de agente que realizó la reserva
company character 0 N/A Número de compañía que realizó la reserva
customer_type character 0 Contract : 4076, Group : 577, Transient : 89613, Transient-Party : 25124 Tipo de cliente (nuevo o recurrente)
reservation_status character 0 Canceled : 43017, Check-Out : 75166, No-Show : 1207 Estado final de la reserva (por ejemplo, completada, cancelada, etc.)

2.2.1 Análisis de las Variables Numéricas

  1. is_canceled (Cancelación de reserva):
    • La media de esta variable es de 0.37, lo que significa que aproximadamente el 37% de las reservas fueron canceladas. Esta es una tasa relativamente alta, lo que podría indicar que los clientes cancelan las reservas con frecuencia o que la política de cancelación es flexible. La desviación estándar de 0.48 también muestra que no hay una gran variabilidad en esta variable, lo que refuerza que la cancelación es una característica relativamente constante en el conjunto de datos.
  2. lead_time (Anticipación de la reserva):
    • La media de 104 días sugiere que, en promedio, las reservas se hacen con alrededor de tres meses de anticipación. Sin embargo, el valor máximo de 737 días (aproximadamente 2 años) es un valor atípico, lo que sugiere que algunas reservas son realizadas con una anticipación extremadamente larga. Podría ser interesante investigar si estos casos corresponden a reservas corporativas o a eventos especiales con mucho tiempo de antelación.

      La desviación estándar alta de 106.86 indica que hay una gran variabilidad en cuanto a la anticipación de las reservas, lo que podría ser un indicio de que los clientes toman decisiones muy diferentes en cuanto a la planificación de sus viajes.

  3. arrival_date_year (Año de llegada):
    • Los valores en este caso son muy concentrados alrededor del 2016, ya que la media está en 2016.16 y la desviación estándar es mínima (0.71). Esto indica que la mayoría de las reservas son recientes, dentro de un rango de 2015 a 2017. Esto podría indicar que el conjunto de datos proviene de un periodo específico de tiempo, lo cual no es raro en conjuntos de datos de reservas de hoteles.
  4. stays_in_weekend_nights y stays_in_week_nights (Noches de fin de semana y noches entre semana):
    • La variable stays_in_weekend_nights tiene una media baja de 0.93, lo que indica que la mayoría de las reservas no incluyen noches de fin de semana. Esto puede reflejar que los clientes prefieren reservar para estancias más cortas, tal vez por motivos laborales o de negocio. También se observa una alta desviación estándar en esta variable, lo que sugiere que hay algunos clientes que reservan estancias largas durante los fines de semana, mientras que otros no se quedan en fin de semana.
    • La variable stays_in_week_nights tiene una media de 2.5, lo que muestra que, en promedio, las reservas son para estancias de 2 a 3 noches durante la semana. Esto tiene sentido en el contexto de reservas de corta duración, pero el rango de 0 a 50 noches (con una desviación estándar de 1.91) sugiere que hay algunas reservas excepcionales con una duración mucho mayor de lo esperado. Esto puede indicar reservas para grupos grandes o estancias prolongadas, pero vale la pena investigar si estos valores extremos corresponden a clientes corporativos o eventos especiales.
  5. adults (Número de adultos en la reserva):
    • La media de 1.86 es consistente con el hecho de que muchas reservas son para viajeros individuales o parejas. Sin embargo, el valor máximo de 55 adultos en una sola reserva es un valor extremo que probablemente esté relacionado con reservas de grupos grandes o eventos, lo cual es una ocurrencia poco frecuente.
  6. children (Número de niños en la reserva):
    • La media de 0.10 es baja, lo que indica que pocas reservas incluyen niños. Sin embargo, el mínimo es 0 (lo que es esperado) y el máximo es 10. Este rango sugiere que algunas reservas son para familias grandes. La desviación estándar de 0.40 también indica que, aunque la mayoría de las reservas no incluyen niños, algunas de ellas incluyen grupos familiares más grandes.
  7. babies (Número de bebés en la reserva):
    • La media de 0.01 es muy baja, lo cual tiene sentido, ya que las reservas que incluyen bebés deben ser una proporción menor. Sin embargo, al igual que con los niños, el valor máximo de 10 bebés parece un valor atípico y podría indicar errores o entradas incorrectas de datos. Es algo muy poco probable que una reserva incluya tal cantidad de bebés, por lo que podría ser interesante revisar si esos registros son correctos.
  8. adr (Tarifa diaria promedio por habitación):
    • La media de 101.83 es un valor razonable, pero el mínimo de -6.38 es un valor extraño. Este valor negativo podría indicar un error de registro o un descuento o ajuste muy inusual en el precio. De igual forma, el máximo de 5400 es un valor extremadamente alto, lo cual podría estar relacionado con eventos especiales o precios de lujo para ciertas habitaciones. La gran desviación estándar (50.54) sugiere una gran variabilidad en los precios de las habitaciones.

2.2.2 Análisis de las Variables Categóricas

  1. hotel
    • Las City Hotels representan 79,330 reservas y los Resort Hotels 40,060. Los patrones de cancelación pueden variar: los resorts son más estacionales, lo que puede aumentar las cancelaciones en temporada baja.
  2. arrival_date_month
    • Meses como agosto (13,877) y julio (12,661) concentran mayor demanda. En meses como enero (5,929) o noviembre (6,794), las cancelaciones podrían aumentar por menor ocupación o cambios en los planes de viaje.
  3. deposit_type
    • El 84% de las reservas no requieren depósito (No Deposit), mientras que solo un 12% son Non Refund. Las cancelaciones puden ser menos comunes cuando hay penalización.
  4. market_segment
    • Online TA domina con 56,477 reservas, seguido por Offline TA/TO (24,219) y Groups (19,811). Los segmentos grupales y en línea tienden a mostrar más cancelaciones, por su flexibilidad y volumen.
  5. meal
    • La mayoría elige BB (desayuno incluido) con 92,310 reservas, mientras que opciones más completas como HB (14,463) o FB (798) son menos comunes. Los clientes que pagan más por comida podrían estar menos dispuestos a cancelar.
  6. arrival_date_week_number (Semana del año de llegada):
    • Las llegadas están bastante distribuidas a lo largo del año. No obstante, hay algunas reservas en semanas inusuales (por ejemplo, la semana 53, que solo aparece cada 4 años). Puede ser útil investigar si estas reservas corresponden a clientes que están reservando fuera de los períodos pico.
  7. arrival_date_day_of_month (Día del mes de llegada):
    • La mayoría de las llegadas ocurren hacia la mitad del mes, con algunos picos o concentraciones hacia los primeros y últimos días.

2.3 Análisis univariado

En esta etapa se analiza cada variable de forma individual con el objetivo de entender su distribución, identificar valores atípicos y detectar posibles problemas en los datos. Esto es esencial para preparar correctamente las variables antes de evaluar su relación con la cancelación de reservas y construir modelos predictivos más robustos.

2.4 Análisis bivariado

En esta etapa se analiza la relación entre las variables y la variable objetivo is_canceled. Esto ayuda a identificar patrones significativos que puedan influir en la cancelación de reservas, lo que es crucial para mejorar la precisión de los modelos predictivos y tomar decisiones informadas en la gestión de reservas.

2.4.1 Gráfico de correlaciones (heatmap)

Uno de los hallazgos más relevantes es la correlación positiva moderada entre el lead_time (tiempo de anticipación) y la variable de cancelación. Con una correlación de 0.29, esto sugiere que a medida que aumenta el tiempo de anticipación de una reserva, también lo hace la probabilidad de que sea cancelada. Es probable que los clientes que realizan reservas con muchos meses de antelación cambien sus planes, lo que incrementa el riesgo de cancelación. Este dato es clave, ya que permite a los hoteles tomar medidas proactivas para gestionar esas reservas con mayor antelación, ofreciendo incentivos para mantener la reserva o hacer ajustes en la política de cancelación.

Otra variable con correlación moderada es previous_cancellations (cancelaciones previas), con una correlación de 0.11. Este valor indica que los clientes que han cancelado reservas en el pasado tienen más probabilidades de cancelar nuevamente. Esta es una observación importante, ya que sugiere que un comportamiento repetitivo de cancelación puede ser un predictor confiable de futuras cancelaciones. A través de este análisis, los hoteles pueden identificar y monitorear a estos clientes, implementando estrategias de fidelización o condiciones más estrictas en sus reservas.

La variable required_car_parking_spaces (espacios de estacionamiento requeridos) muestra una correlación negativa moderada de -0.20 con la cancelación. Esto implica que los clientes que requieren espacio de estacionamiento tienen menos probabilidades de cancelar. Este hallazgo podría reflejar que los clientes que buscan estos servicios adicionales están más comprometidos con su estancia y, por lo tanto, menos inclinados a cancelar sus reservas. Los hoteles que ofrecen estacionamiento pueden usar este dato para crear paquetes o incentivos que promuevan la permanencia de los clientes.

Adicionalmente, total_of_special_requests (solicitudes especiales) presenta una correlación negativa de -0.23. A mayor número de solicitudes especiales, menor es la probabilidad de cancelación. Esto sugiere que los clientes que hacen solicitudes especiales, como habitaciones específicas o servicios adicionales, tienden a estar más comprometidos con su reserva y, por lo tanto, tienen menos probabilidades de cancelarla. Este es un dato útil para los hoteles, ya que las solicitudes especiales pueden ser una indicación de un cliente más comprometido.

Aunque algunas variables cumplen con las expectativas, hay algunas que resultan sorprendentes. Por ejemplo, adr (tarifa diaria promedio) tiene una correlación muy baja de 0.05 con la cancelación, lo que indica que la relación entre la tarifa y la probabilidad de cancelación no es significativa. Esto desafía la intuición, ya que se podría suponer que los clientes que pagan tarifas más altas tendrían menos incentivos para cancelar. Sin embargo, los datos sugieren que factores como la flexibilidad de la reserva o las políticas de cancelación podrían tener un impacto más significativo que la tarifa misma.

Además, las variables relacionadas con la duración de la estancia, como stays_in_weekend_nights y stays_in_week_nights, tienen correlaciones muy bajas, cerca de cero (-0.00 y 0.02, respectivamente), lo que sugiere que la duración de la estancia no es un factor relevante a la hora de predecir cancelaciones. Este hallazgo es contrario a la expectativa común de que los clientes que reservan estancias más largas puedan estar más comprometidos con sus planes. Sin embargo, los datos no muestran una relación significativa entre la duración de la estancia y la cancelación.

2.4.1.1 Conclusión

El análisis de las correlaciones ha permitido identificar varios factores clave que influyen en la probabilidad de cancelación de una reserva. Variables como el tiempo de anticipación de la reserva, el historial de cancelaciones previas, y las solicitudes especiales son importantes para predecir la cancelación de una reserva. Por otro lado, algunos factores que comúnmente se asumirían relevantes, como la tarifa diaria o la duración de la estancia, tienen una correlación casi nula con las cancelaciones.

Estos hallazgos permiten a los hoteles tomar decisiones informadas sobre cómo gestionar las reservas y reducir las cancelaciones. Las políticas de cancelación podrían adaptarse para aquellos con un historial de cancelaciones, o bien, ofrecer incentivos para mantener las reservas de aquellos que las hagan con mucha antelación. Además, los hoteles podrían beneficiarse de identificar a los clientes que hacen solicitudes especiales, ya que estos tienden a ser más comprometidos con sus reservas.

3 Preparación de los datos

En esta sección, se detalla el proceso de preparación de los datos, basado en el análisis previo de las variables. Este paso es crucial para garantizar que el modelo predictivo sea robusto y confiable. Según la Descripción y Análisis de Variables, se identificaron las siguientes acciones necesarias para preparar los datos:

3.1 Eliminar Variables

Se eliminaron variables que no aportan información relevante al modelo o que podrían introducir ruido en el análisis. En este caso, se eliminaron las siguientes variables:

  • reservation_status: Representa información redundante o derivada de la variable objetivo is_canceled.

  • reservation_status_date: Información redundante que no aporta valor predictivo directo.

  • arrival_date_year: No se considera relevante para el análisis, ya que las diferencias entre años no son significativas en este contexto.

Además, para manejar los valores faltantes en las variables numéricas, se reemplazaron con el promedio de cada columna. Este enfoque asegura que no se pierda información valiosa debido a la eliminación de filas y que las distribuciones de las variables se mantengan estables.

## Número de valores faltantes después de reemplazar con el promedio:
##                          hotel                    is_canceled 
##                              0                              0 
##                      lead_time             arrival_date_month 
##                              0                              0 
##       arrival_date_week_number      arrival_date_day_of_month 
##                              0                              0 
##        stays_in_weekend_nights           stays_in_week_nights 
##                              0                              0 
##                         adults                       children 
##                              0                              0 
##                         babies                           meal 
##                              0                              0 
##                        country                 market_segment 
##                              0                              0 
##           distribution_channel              is_repeated_guest 
##                              0                              0 
##         previous_cancellations previous_bookings_not_canceled 
##                              0                              0 
##             reserved_room_type             assigned_room_type 
##                              0                              0 
##                booking_changes                   deposit_type 
##                              0                              0 
##                          agent                        company 
##                              0                              0 
##           days_in_waiting_list                  customer_type 
##                              0                              0 
##                            adr    required_car_parking_spaces 
##                              0                              0 
##      total_of_special_requests 
##                              0

3.2 Eliminación de datos atipicos y valores repetidos

Se identificaron y eliminaron valores atípicos en variables clave como adr (tarifa diaria promedio), babies (número de bebés), stays_in_weekend_nights (noches de fin de semana) y stays_in_week_nights (noches entre semana). Para ello, se utilizó el rango intercuartílico (IQR), eliminando los valores que se encontraban fuera del rango [Q1 - 1.5 * IQR, Q3 + 1.5 * IQR]. Este procedimiento permite reducir el impacto de valores extremos que podrían sesgar los resultados del modelo.

## Dimensiones después de la limpieza: 79766 filas y 29 columnas

3.3 Transformación de variables categoricas grandes

Conteo de valores únicos en variables categóricas
Variable Valores_Unicos
hotel hotel 2
arrival_date_month arrival_date_month 12
arrival_date_week_number arrival_date_week_number 53
arrival_date_day_of_month arrival_date_day_of_month 31
meal meal 5
country country 176
market_segment market_segment 8
distribution_channel distribution_channel 5
reserved_room_type reserved_room_type 10
assigned_room_type assigned_room_type 12
deposit_type deposit_type 3
agent agent 324
company company 348
customer_type customer_type 4

3.3.1 Codificación binaria de variables diversas:

Las variables categóricas con un alto número de categorías, como countryagentcompany, arrival_date_week_number, y arrival_date_day_of_month fueron transformadas mediante codificación binaria. Este método convierte cada categoría en una representación binaria, lo que permite al modelo procesar estas variables de manera eficiente.

## Número de columnas antes de la codificación: 29
## Número de columnas después de la codificación: 61
## Número de columnas nuevas generadas: 32

3.4 Conclusión

La preparación de los datos incluyó la eliminación de variables irrelevantes, el manejo de valores faltantes, la eliminación de datos atípicos y la transformación de variables categóricas. Estas acciones garantizaron que el conjunto de datos estuviera limpio, consistente y listo para ser utilizado en el modelo predictivo. Este proceso es fundamental para mejorar la calidad de las predicciones y minimizar el impacto de posibles sesgos en los resultados.

4 Modelado

El proceso de modelado se llevó a cabo en varias etapas, con el objetivo de construir un modelo predictivo robusto y eficiente para identificar las reservas con mayor probabilidad de cancelación. Para ello, se seleccionaron y evaluaron diferentes grupos de variables, lo que permitió identificar las más relevantes para el análisis.

4.1 Selección de Grupos de Variables

Dado que el conjunto de datos contenía un gran número de variables, se decidió dividirlas en tres grupos de aproximadamente 20 variables cada uno. Esta división permitió:

  • Reducir la complejidad computacional al ajustar los modelos.

  • Evaluar el impacto de diferentes subconjuntos de variables en la predicción de cancelaciones.

  • Identificar las variables más relevantes en cada grupo.

Cada grupo fue utilizado para ajustar un modelo de regresión logística, evaluando su desempeño y los coeficientes de las variables incluidas.

## 
## Resumen del Modelo para Grupo 1 :
## 
## Call:
## glm(formula = formula_grupo, family = binomial, data = data_final)
## 
## Coefficients: (2 not defined because of singularities)
##                                  Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                    -1.889e+00  1.934e-01  -9.769  < 2e-16 ***
## hotelResort Hotel              -5.944e-02  2.227e-02  -2.669 0.007617 ** 
## lead_time                       4.509e-03  1.206e-04  37.389  < 2e-16 ***
## arrival_date_monthAugust       -1.232e-01  3.736e-02  -3.298 0.000973 ***
## arrival_date_monthDecember     -1.597e-02  4.554e-02  -0.351 0.725816    
## arrival_date_monthFebruary     -8.591e-02  4.362e-02  -1.970 0.048879 *  
## arrival_date_monthJanuary      -1.634e-01  4.888e-02  -3.344 0.000826 ***
## arrival_date_monthJuly         -1.861e-01  3.752e-02  -4.960 7.05e-07 ***
## arrival_date_monthJune         -1.287e-01  3.953e-02  -3.255 0.001132 ** 
## arrival_date_monthMarch        -1.297e-01  4.050e-02  -3.204 0.001357 ** 
## arrival_date_monthMay          -6.617e-02  3.867e-02  -1.711 0.087082 .  
## arrival_date_monthNovember     -2.224e-01  4.770e-02  -4.662 3.13e-06 ***
## arrival_date_monthOctober      -1.858e-01  4.246e-02  -4.376 1.21e-05 ***
## arrival_date_monthSeptember    -1.722e-01  4.314e-02  -3.992 6.54e-05 ***
## stays_in_weekend_nights         4.790e-03  1.049e-02   0.456 0.648088    
## stays_in_week_nights            4.697e-02  6.562e-03   7.157 8.23e-13 ***
## adults                          1.169e-01  1.782e-02   6.561 5.33e-11 ***
## children                        2.604e-01  2.653e-02   9.817  < 2e-16 ***
## babies                                 NA         NA      NA       NA    
## mealFB                          5.602e-01  1.706e-01   3.283 0.001027 ** 
## mealHB                          4.996e-02  3.339e-02   1.496 0.134597    
## mealSC                          1.540e-01  2.761e-02   5.577 2.45e-08 ***
## mealUndefined                   1.174e-01  1.616e-01   0.726 0.467729    
## market_segmentComplementary    -3.874e-01  2.438e-01  -1.589 0.112033    
## market_segmentCorporate        -2.407e-01  1.885e-01  -1.277 0.201485    
## market_segmentDirect           -7.126e-01  2.197e-01  -3.243 0.001182 ** 
## market_segmentGroups           -5.634e-01  2.080e-01  -2.708 0.006765 ** 
## market_segmentOffline TA/TO    -1.294e+00  2.104e-01  -6.148 7.83e-10 ***
## market_segmentOnline TA        -2.156e-01  2.089e-01  -1.032 0.301863    
## market_segmentUndefined         9.809e+00  8.439e+01   0.116 0.907471    
## distribution_channelDirect     -1.432e-01  1.251e-01  -1.145 0.252410    
## distribution_channelGDS        -1.578e-01  2.310e-01  -0.683 0.494697    
## distribution_channelTA/TO       2.506e-01  1.072e-01   2.338 0.019375 *  
## distribution_channelUndefined   2.464e+00  1.279e+00   1.926 0.054093 .  
## is_repeated_guest              -8.060e-01  9.516e-02  -8.469  < 2e-16 ***
## previous_cancellations          1.562e+00  6.621e-02  23.588  < 2e-16 ***
## previous_bookings_not_canceled -3.064e-01  2.486e-02 -12.327  < 2e-16 ***
## reserved_room_typeB             7.049e-01  1.126e-01   6.258 3.91e-10 ***
## reserved_room_typeC             1.269e+00  1.460e-01   8.692  < 2e-16 ***
## reserved_room_typeD             1.207e+00  4.841e-02  24.937  < 2e-16 ***
## reserved_room_typeE             2.016e+00  9.881e-02  20.405  < 2e-16 ***
## reserved_room_typeF             2.334e+00  1.393e-01  16.758  < 2e-16 ***
## reserved_room_typeG             3.040e+00  2.055e-01  14.790  < 2e-16 ***
## reserved_room_typeH             2.226e+00  4.007e-01   5.556 2.77e-08 ***
## reserved_room_typeL             1.662e+00  1.179e+00   1.409 0.158709    
## reserved_room_typeP             1.266e+01  5.009e+01   0.253 0.800459    
## assigned_room_typeB            -7.232e-01  9.361e-02  -7.725 1.12e-14 ***
## assigned_room_typeC            -1.278e+00  1.100e-01 -11.617  < 2e-16 ***
## assigned_room_typeD            -1.226e+00  4.676e-02 -26.215  < 2e-16 ***
## assigned_room_typeE            -2.085e+00  9.581e-02 -21.762  < 2e-16 ***
## assigned_room_typeF            -2.653e+00  1.316e-01 -20.152  < 2e-16 ***
## assigned_room_typeG            -3.222e+00  1.980e-01 -16.273  < 2e-16 ***
## assigned_room_typeH            -2.145e+00  3.880e-01  -5.528 3.23e-08 ***
## assigned_room_typeI            -4.445e+00  5.226e-01  -8.505  < 2e-16 ***
## assigned_room_typeK            -2.250e+00  3.124e-01  -7.200 6.00e-13 ***
## assigned_room_typeL             9.913e+00  1.195e+02   0.083 0.933875    
## assigned_room_typeP                    NA         NA      NA       NA    
## booking_changes                -2.931e-01  1.652e-02 -17.744  < 2e-16 ***
## deposit_typeNon Refund          4.016e+00  1.625e-01  24.721  < 2e-16 ***
## deposit_typeRefundable          5.757e-01  2.707e-01   2.127 0.033425 *  
## days_in_waiting_list           -1.973e-03  1.081e-03  -1.825 0.067983 .  
## customer_typeGroup             -2.189e-01  1.869e-01  -1.171 0.241607    
## customer_typeTransient          7.520e-01  5.998e-02  12.538  < 2e-16 ***
## customer_typeTransient-Party   -4.916e-02  6.886e-02  -0.714 0.475234    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 92622  on 79765  degrees of freedom
## Residual deviance: 79040  on 79704  degrees of freedom
## AIC: 79164
## 
## Number of Fisher Scoring iterations: 9
## 
## Resumen del Modelo para Grupo 2 :
## 
## Call:
## glm(formula = formula_grupo, family = binomial, data = data_final)
## 
## Coefficients:
##                               Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                 -2.076e+00  6.895e-02 -30.103  < 2e-16 ***
## adr                          6.196e-03  2.201e-04  28.157  < 2e-16 ***
## required_car_parking_spaces -1.666e+01  4.460e+01  -0.374    0.709    
## total_of_special_requests   -6.340e-01  1.257e-02 -50.459  < 2e-16 ***
## country.country_1            6.050e-01  3.252e-02  18.604  < 2e-16 ***
## country.country_2           -1.455e-02  3.244e-02  -0.449    0.654    
## country.country_3           -4.600e-01  2.770e-02 -16.603  < 2e-16 ***
## country.country_4           -4.145e-02  2.917e-02  -1.421    0.155    
## country.country_5           -3.735e-01  2.544e-02 -14.684  < 2e-16 ***
## country.country_6            1.688e-02  2.832e-02   0.596    0.551    
## country.country_7            1.926e-02  3.033e-02   0.635    0.525    
## country.country_8            1.168e-01  2.704e-02   4.319 1.57e-05 ***
## agent.agent_1                1.602e-01  3.170e-02   5.053 4.35e-07 ***
## agent.agent_2               -4.129e-01  4.740e-02  -8.710  < 2e-16 ***
## agent.agent_3                1.701e-01  3.282e-02   5.184 2.17e-07 ***
## agent.agent_4                8.110e-01  2.566e-02  31.608  < 2e-16 ***
## agent.agent_5                3.572e-01  3.008e-02  11.874  < 2e-16 ***
## agent.agent_6               -1.784e-01  2.741e-02  -6.506 7.72e-11 ***
## agent.agent_7                3.082e-02  2.916e-02   1.057    0.291    
## agent.agent_8                5.413e-01  2.712e-02  19.958  < 2e-16 ***
## agent.agent_9               -9.779e-01  2.812e-02 -34.776  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 92622  on 79765  degrees of freedom
## Residual deviance: 77246  on 79745  degrees of freedom
## AIC: 77288
## 
## Number of Fisher Scoring iterations: 16
## 
## 
## Resumen del Modelo para Grupo 3 :
## 
## Call:
## glm(formula = formula_grupo, family = binomial, data = data_final)
## 
## Coefficients:
##                                                        Estimate Std. Error
## (Intercept)                                           -2.848396   0.138628
## company.company_1                                      0.763001   0.102747
## company.company_2                                      0.180355   0.111821
## company.company_3                                     -0.016316   0.103265
## company.company_4                                      0.197006   0.104876
## company.company_5                                      0.100925   0.093497
## company.company_6                                      0.197521   0.091264
## company.company_7                                     -0.116092   0.091656
## company.company_8                                      0.143807   0.088114
## company.company_9                                      0.584993   0.090258
## arrival_date_week_number.arrival_date_week_number_1   -0.038691   0.019051
## arrival_date_week_number.arrival_date_week_number_2    0.223316   0.017822
## arrival_date_week_number.arrival_date_week_number_3    0.036203   0.016595
## arrival_date_week_number.arrival_date_week_number_4    0.001662   0.016319
## arrival_date_week_number.arrival_date_week_number_5   -0.019603   0.016177
## arrival_date_week_number.arrival_date_week_number_6   -0.005436   0.016143
## arrival_date_day_of_month.arrival_date_day_of_month_1  0.008017   0.016262
## arrival_date_day_of_month.arrival_date_day_of_month_2  0.021555   0.016202
## arrival_date_day_of_month.arrival_date_day_of_month_3  0.018358   0.016223
## arrival_date_day_of_month.arrival_date_day_of_month_4  0.008393   0.016177
## arrival_date_day_of_month.arrival_date_day_of_month_5  0.002168   0.016119
##                                                       z value Pr(>|z|)    
## (Intercept)                                           -20.547  < 2e-16 ***
## company.company_1                                       7.426 1.12e-13 ***
## company.company_2                                       1.613   0.1068    
## company.company_3                                      -0.158   0.8745    
## company.company_4                                       1.878   0.0603 .  
## company.company_5                                       1.079   0.2804    
## company.company_6                                       2.164   0.0304 *  
## company.company_7                                      -1.267   0.2053    
## company.company_8                                       1.632   0.1027    
## company.company_9                                       6.481 9.09e-11 ***
## arrival_date_week_number.arrival_date_week_number_1    -2.031   0.0423 *  
## arrival_date_week_number.arrival_date_week_number_2    12.530  < 2e-16 ***
## arrival_date_week_number.arrival_date_week_number_3     2.182   0.0291 *  
## arrival_date_week_number.arrival_date_week_number_4     0.102   0.9189    
## arrival_date_week_number.arrival_date_week_number_5    -1.212   0.2256    
## arrival_date_week_number.arrival_date_week_number_6    -0.337   0.7363    
## arrival_date_day_of_month.arrival_date_day_of_month_1   0.493   0.6220    
## arrival_date_day_of_month.arrival_date_day_of_month_2   1.330   0.1834    
## arrival_date_day_of_month.arrival_date_day_of_month_3   1.132   0.2578    
## arrival_date_day_of_month.arrival_date_day_of_month_4   0.519   0.6039    
## arrival_date_day_of_month.arrival_date_day_of_month_5   0.134   0.8930    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 92622  on 79765  degrees of freedom
## Residual deviance: 91550  on 79745  degrees of freedom
## AIC: 91592
## 
## Number of Fisher Scoring iterations: 4

4.2 Identificación de Variables Representativas

Tras ajustar los modelos para cada grupo, se analizaron los coeficientes de las variables incluidas. Se seleccionaron aquellas variables que resultaron estadísticamente significativas (valor p ≤ 0.05) y que mostraron una relación clara con la probabilidad de cancelación. Estas variables fueron seleccionadas porque:

## 
## Coeficientes Significativos del Grupo_1 :
## 
## 
## Table: Coeficientes Significativos del Grupo_1
## 
## |                               |Variable                       |   Estimate| Std_Error|    Z_value|   P_value|Stars |
## |:------------------------------|:------------------------------|----------:|---------:|----------:|---------:|:-----|
## |(Intercept)                    |(Intercept)                    | -1.8890657| 0.1933720|  -9.769075| 0.0000000|***   |
## |hotelResort Hotel              |hotelResort Hotel              | -0.0594411| 0.0222742|  -2.668612| 0.0076165|**    |
## |lead_time                      |lead_time                      |  0.0045094| 0.0001206|  37.388682| 0.0000000|***   |
## |arrival_date_monthAugust       |arrival_date_monthAugust       | -0.1232149| 0.0373580|  -3.298222| 0.0009730|***   |
## |arrival_date_monthFebruary     |arrival_date_monthFebruary     | -0.0859129| 0.0436185|  -1.969646| 0.0488790|*     |
## |arrival_date_monthJanuary      |arrival_date_monthJanuary      | -0.1634343| 0.0488758|  -3.343872| 0.0008262|***   |
## |arrival_date_monthJuly         |arrival_date_monthJuly         | -0.1860760| 0.0375164|  -4.959859| 0.0000007|***   |
## |arrival_date_monthJune         |arrival_date_monthJune         | -0.1286959| 0.0395332|  -3.255391| 0.0011324|**    |
## |arrival_date_monthMarch        |arrival_date_monthMarch        | -0.1297488| 0.0405015|  -3.203556| 0.0013574|**    |
## |arrival_date_monthNovember     |arrival_date_monthNovember     | -0.2223671| 0.0476978|  -4.662004| 0.0000031|***   |
## |arrival_date_monthOctober      |arrival_date_monthOctober      | -0.1858168| 0.0424632|  -4.375951| 0.0000121|***   |
## |arrival_date_monthSeptember    |arrival_date_monthSeptember    | -0.1722176| 0.0431378|  -3.992265| 0.0000654|***   |
## |stays_in_week_nights           |stays_in_week_nights           |  0.0469660| 0.0065620|   7.157239| 0.0000000|***   |
## |adults                         |adults                         |  0.1169284| 0.0178210|   6.561276| 0.0000000|***   |
## |children                       |children                       |  0.2604079| 0.0265273|   9.816608| 0.0000000|***   |
## |mealFB                         |mealFB                         |  0.5601712| 0.1706226|   3.283101| 0.0010267|**    |
## |mealSC                         |mealSC                         |  0.1539746| 0.0276111|   5.576542| 0.0000000|***   |
## |market_segmentDirect           |market_segmentDirect           | -0.7125994| 0.2197180|  -3.243246| 0.0011818|**    |
## |market_segmentGroups           |market_segmentGroups           | -0.5633971| 0.2080348|  -2.708186| 0.0067652|**    |
## |market_segmentOffline TA/TO    |market_segmentOffline TA/TO    | -1.2937303| 0.2104166|  -6.148424| 0.0000000|***   |
## |distribution_channelTA/TO      |distribution_channelTA/TO      |  0.2506336| 0.1071895|   2.338229| 0.0193754|*     |
## |is_repeated_guest              |is_repeated_guest              | -0.8059654| 0.0951644|  -8.469186| 0.0000000|***   |
## |previous_cancellations         |previous_cancellations         |  1.5618545| 0.0662130|  23.588352| 0.0000000|***   |
## |previous_bookings_not_canceled |previous_bookings_not_canceled | -0.3063948| 0.0248563| -12.326662| 0.0000000|***   |
## |reserved_room_typeB            |reserved_room_typeB            |  0.7048932| 0.1126440|   6.257709| 0.0000000|***   |
## |reserved_room_typeC            |reserved_room_typeC            |  1.2687979| 0.1459731|   8.691996| 0.0000000|***   |
## |reserved_room_typeD            |reserved_room_typeD            |  1.2073183| 0.0484148|  24.936963| 0.0000000|***   |
## |reserved_room_typeE            |reserved_room_typeE            |  2.0162566| 0.0988115|  20.405089| 0.0000000|***   |
## |reserved_room_typeF            |reserved_room_typeF            |  2.3344229| 0.1392999|  16.758253| 0.0000000|***   |
## |reserved_room_typeG            |reserved_room_typeG            |  3.0398340| 0.2055272|  14.790422| 0.0000000|***   |
## |reserved_room_typeH            |reserved_room_typeH            |  2.2262824| 0.4007250|   5.555637| 0.0000000|***   |
## |assigned_room_typeB            |assigned_room_typeB            | -0.7231503| 0.0936083|  -7.725283| 0.0000000|***   |
## |assigned_room_typeC            |assigned_room_typeC            | -1.2776597| 0.1099811| -11.617082| 0.0000000|***   |
## |assigned_room_typeD            |assigned_room_typeD            | -1.2258306| 0.0467607| -26.214973| 0.0000000|***   |
## |assigned_room_typeE            |assigned_room_typeE            | -2.0850575| 0.0958106| -21.762294| 0.0000000|***   |
## |assigned_room_typeF            |assigned_room_typeF            | -2.6528264| 0.1316438| -20.151543| 0.0000000|***   |
## |assigned_room_typeG            |assigned_room_typeG            | -3.2220951| 0.1980010| -16.273125| 0.0000000|***   |
## |assigned_room_typeH            |assigned_room_typeH            | -2.1451669| 0.3880313|  -5.528335| 0.0000000|***   |
## |assigned_room_typeI            |assigned_room_typeI            | -4.4445062| 0.5225525|  -8.505377| 0.0000000|***   |
## |assigned_room_typeK            |assigned_room_typeK            | -2.2495382| 0.3124172|  -7.200431| 0.0000000|***   |
## |booking_changes                |booking_changes                | -0.2930829| 0.0165172| -17.744069| 0.0000000|***   |
## |deposit_typeNon Refund         |deposit_typeNon Refund         |  4.0161293| 0.1624590|  24.720886| 0.0000000|***   |
## |deposit_typeRefundable         |deposit_typeRefundable         |  0.5757234| 0.2706817|   2.126939| 0.0334252|*     |
## |customer_typeTransient         |customer_typeTransient         |  0.7520059| 0.0599790|  12.537812| 0.0000000|***   |
## 
## Coeficientes Significativos del Grupo_2 :
## 
## 
## Table: Coeficientes Significativos del Grupo_2
## 
## |                          |Variable                  |   Estimate| Std_Error|    Z_value|  P_value|Stars |
## |:-------------------------|:-------------------------|----------:|---------:|----------:|--------:|:-----|
## |(Intercept)               |(Intercept)               | -2.0755440| 0.0689481| -30.102976| 0.00e+00|***   |
## |adr                       |adr                       |  0.0061964| 0.0002201|  28.156947| 0.00e+00|***   |
## |total_of_special_requests |total_of_special_requests | -0.6340326| 0.0125652| -50.459462| 0.00e+00|***   |
## |country.country_1         |country.country_1         |  0.6049998| 0.0325198|  18.604069| 0.00e+00|***   |
## |country.country_3         |country.country_3         | -0.4599737| 0.0277039| -16.603219| 0.00e+00|***   |
## |country.country_5         |country.country_5         | -0.3735180| 0.0254364| -14.684377| 0.00e+00|***   |
## |country.country_8         |country.country_8         |  0.1167754| 0.0270407|   4.318507| 1.57e-05|***   |
## |agent.agent_1             |agent.agent_1             |  0.1601545| 0.0316961|   5.052812| 4.00e-07|***   |
## |agent.agent_2             |agent.agent_2             | -0.4128624| 0.0473998|  -8.710217| 0.00e+00|***   |
## |agent.agent_3             |agent.agent_3             |  0.1701356| 0.0328186|   5.184127| 2.00e-07|***   |
## |agent.agent_4             |agent.agent_4             |  0.8109900| 0.0256580|  31.607725| 0.00e+00|***   |
## |agent.agent_5             |agent.agent_5             |  0.3572260| 0.0300836|  11.874448| 0.00e+00|***   |
## |agent.agent_6             |agent.agent_6             | -0.1783540| 0.0274143|  -6.505867| 0.00e+00|***   |
## |agent.agent_8             |agent.agent_8             |  0.5412801| 0.0271216|  19.957545| 0.00e+00|***   |
## |agent.agent_9             |agent.agent_9             | -0.9778736| 0.0281190| -34.776196| 0.00e+00|***   |
## 
## Coeficientes Significativos del Grupo_3 :
## 
## 
## Table: Coeficientes Significativos del Grupo_3
## 
## |                                                    |Variable                                            |   Estimate| Std_Error|    Z_value|   P_value|Stars |
## |:---------------------------------------------------|:---------------------------------------------------|----------:|---------:|----------:|---------:|:-----|
## |(Intercept)                                         |(Intercept)                                         | -2.8483959| 0.1386283| -20.547000| 0.0000000|***   |
## |company.company_1                                   |company.company_1                                   |  0.7630013| 0.1027469|   7.426028| 0.0000000|***   |
## |company.company_6                                   |company.company_6                                   |  0.1975211| 0.0912642|   2.164279| 0.0304430|*     |
## |company.company_9                                   |company.company_9                                   |  0.5849934| 0.0902585|   6.481311| 0.0000000|***   |
## |arrival_date_week_number.arrival_date_week_number_1 |arrival_date_week_number.arrival_date_week_number_1 | -0.0386913| 0.0190515|  -2.030880| 0.0422671|*     |
## |arrival_date_week_number.arrival_date_week_number_2 |arrival_date_week_number.arrival_date_week_number_2 |  0.2233161| 0.0178219|  12.530432| 0.0000000|***   |
## |arrival_date_week_number.arrival_date_week_number_3 |arrival_date_week_number.arrival_date_week_number_3 |  0.0362032| 0.0165952|   2.181543| 0.0291433|*     |
  • Tienen un impacto directo en la probabilidad de cancelación: Por ejemplo, variables como lead_time (días entre la reserva y la llegada) y adr (tarifa diaria promedio) mostraron una relación significativa con la cancelación.

  • Representan características clave del cliente o la reserva: Variables como deposit_type (tipo de depósito) y total_of_special_requests (número de solicitudes especiales) reflejan el compromiso del cliente con la reserva.

  • Capturan patrones de comportamiento relevantes: Variables como previous_cancellations (cancelaciones previas) y is_repeated_guest (si el cliente es recurrente) ayudan a identificar tendencias en el comportamiento del cliente.

## 
## Resumen del Modelo Depurado:
## 
## Call:
## glm(formula = is_canceled ~ ., family = binomial, data = nueva_bd)
## 
## Coefficients: (1 not defined because of singularities)
##                                                       Estimate Std. Error
## (Intercept)                                         -3.513e+00  1.275e-01
## lead_time                                            6.165e-03  1.267e-04
## arrival_date_monthAugust                            -2.582e-01  8.334e-02
## arrival_date_monthDecember                           3.540e-01  1.505e-01
## arrival_date_monthFebruary                          -7.147e-02  6.336e-02
## arrival_date_monthJanuary                           -1.814e-01  7.298e-02
## arrival_date_monthJuly                              -2.853e-01  7.120e-02
## arrival_date_monthJune                              -1.746e-01  6.005e-02
## arrival_date_monthMarch                             -1.185e-01  4.767e-02
## arrival_date_monthMay                               -3.981e-02  5.367e-02
## arrival_date_monthNovember                           2.354e-01  1.274e-01
## arrival_date_monthOctober                            4.612e-02  1.223e-01
## arrival_date_monthSeptember                         -2.537e-01  9.479e-02
## stays_in_week_nights                                 9.746e-02  6.714e-03
## assigned_room_typeB                                 -8.708e-01  9.759e-02
## assigned_room_typeC                                 -1.310e+00  1.127e-01
## assigned_room_typeD                                 -1.277e+00  4.858e-02
## assigned_room_typeE                                 -2.186e+00  9.979e-02
## assigned_room_typeF                                 -2.770e+00  1.362e-01
## assigned_room_typeG                                 -3.356e+00  2.066e-01
## assigned_room_typeH                                 -2.194e+00  4.043e-01
## assigned_room_typeI                                 -4.308e+00  5.269e-01
## assigned_room_typeK                                 -2.370e+00  3.171e-01
## assigned_room_typeL                                  1.159e+01  1.195e+02
## assigned_room_typeP                                  1.393e+01  5.163e+01
## reserved_room_typeB                                  6.321e-01  1.153e-01
## reserved_room_typeC                                  1.502e+00  1.483e-01
## reserved_room_typeD                                  1.185e+00  5.076e-02
## reserved_room_typeE                                  2.041e+00  1.034e-01
## reserved_room_typeF                                  2.456e+00  1.432e-01
## reserved_room_typeG                                  3.130e+00  2.130e-01
## reserved_room_typeH                                  1.847e+00  4.184e-01
## reserved_room_typeL                                  8.755e-01  1.170e+00
## reserved_room_typeP                                         NA         NA
## deposit_typeNon Refund                               3.781e+00  1.538e-01
## deposit_typeRefundable                               4.102e-01  2.802e-01
## adr                                                  6.219e-03  3.056e-04
## country.country_1                                    6.950e-01  2.816e-02
## country.country_3                                   -5.149e-01  2.400e-02
## country.country_5                                   -4.811e-01  2.278e-02
## country.country_8                                    1.380e-01  2.257e-02
## agent.agent_1                                        5.440e-01  3.606e-02
## agent.agent_2                                       -4.836e-01  5.422e-02
## agent.agent_3                                        2.401e-01  3.675e-02
## agent.agent_4                                        7.802e-01  2.885e-02
## agent.agent_5                                        2.617e-01  3.330e-02
## agent.agent_6                                       -2.288e-01  2.944e-02
## agent.agent_7                                        5.031e-02  3.217e-02
## agent.agent_8                                        7.819e-01  3.028e-02
## agent.agent_9                                       -9.996e-01  3.002e-02
## arrival_date_week_number.arrival_date_week_number_1 -2.310e-01  1.239e-01
## arrival_date_week_number.arrival_date_week_number_2 -1.641e-01  7.273e-02
## arrival_date_week_number.arrival_date_week_number_3 -8.592e-02  4.688e-02
## company.company_1                                    1.151e-01  9.053e-02
## company.company_6                                    2.076e-01  9.224e-02
## company.company_9                                    4.197e-01  9.765e-02
## total_of_special_requests                           -6.740e-01  1.299e-02
## booking_changes                                     -3.642e-01  1.725e-02
##                                                     z value Pr(>|z|)    
## (Intercept)                                         -27.563  < 2e-16 ***
## lead_time                                            48.648  < 2e-16 ***
## arrival_date_monthAugust                             -3.098  0.00195 ** 
## arrival_date_monthDecember                            2.352  0.01867 *  
## arrival_date_monthFebruary                           -1.128  0.25937    
## arrival_date_monthJanuary                            -2.485  0.01294 *  
## arrival_date_monthJuly                               -4.007 6.16e-05 ***
## arrival_date_monthJune                               -2.908  0.00364 ** 
## arrival_date_monthMarch                              -2.486  0.01290 *  
## arrival_date_monthMay                                -0.742  0.45829    
## arrival_date_monthNovember                            1.848  0.06467 .  
## arrival_date_monthOctober                             0.377  0.70618    
## arrival_date_monthSeptember                          -2.676  0.00745 ** 
## stays_in_week_nights                                 14.515  < 2e-16 ***
## assigned_room_typeB                                  -8.923  < 2e-16 ***
## assigned_room_typeC                                 -11.623  < 2e-16 ***
## assigned_room_typeD                                 -26.288  < 2e-16 ***
## assigned_room_typeE                                 -21.900  < 2e-16 ***
## assigned_room_typeF                                 -20.340  < 2e-16 ***
## assigned_room_typeG                                 -16.246  < 2e-16 ***
## assigned_room_typeH                                  -5.426 5.76e-08 ***
## assigned_room_typeI                                  -8.177 2.91e-16 ***
## assigned_room_typeK                                  -7.475 7.74e-14 ***
## assigned_room_typeL                                   0.097  0.92273    
## assigned_room_typeP                                   0.270  0.78733    
## reserved_room_typeB                                   5.480 4.26e-08 ***
## reserved_room_typeC                                  10.127  < 2e-16 ***
## reserved_room_typeD                                  23.344  < 2e-16 ***
## reserved_room_typeE                                  19.737  < 2e-16 ***
## reserved_room_typeF                                  17.159  < 2e-16 ***
## reserved_room_typeG                                  14.692  < 2e-16 ***
## reserved_room_typeH                                   4.413 1.02e-05 ***
## reserved_room_typeL                                   0.748  0.45418    
## reserved_room_typeP                                      NA       NA    
## deposit_typeNon Refund                               24.590  < 2e-16 ***
## deposit_typeRefundable                                1.464  0.14327    
## adr                                                  20.350  < 2e-16 ***
## country.country_1                                    24.677  < 2e-16 ***
## country.country_3                                   -21.454  < 2e-16 ***
## country.country_5                                   -21.117  < 2e-16 ***
## country.country_8                                     6.113 9.75e-10 ***
## agent.agent_1                                        15.084  < 2e-16 ***
## agent.agent_2                                        -8.921  < 2e-16 ***
## agent.agent_3                                         6.533 6.43e-11 ***
## agent.agent_4                                        27.043  < 2e-16 ***
## agent.agent_5                                         7.860 3.83e-15 ***
## agent.agent_6                                        -7.769 7.92e-15 ***
## agent.agent_7                                         1.564  0.11786    
## agent.agent_8                                        25.819  < 2e-16 ***
## agent.agent_9                                       -33.293  < 2e-16 ***
## arrival_date_week_number.arrival_date_week_number_1  -1.865  0.06224 .  
## arrival_date_week_number.arrival_date_week_number_2  -2.256  0.02408 *  
## arrival_date_week_number.arrival_date_week_number_3  -1.833  0.06681 .  
## company.company_1                                     1.271  0.20362    
## company.company_6                                     2.250  0.02442 *  
## company.company_9                                     4.298 1.73e-05 ***
## total_of_special_requests                           -51.886  < 2e-16 ***
## booking_changes                                     -21.114  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 92622  on 79765  degrees of freedom
## Residual deviance: 72860  on 79709  degrees of freedom
## AIC: 72974
## 
## Number of Fisher Scoring iterations: 9

5 Optimización del Umbral

calc_metricas <- function(umbral, bd, proba) {
  # Crear las predicciones basadas en el umbral
  cancelacion_modelo <- proba > umbral
  cancelacion_real <- bd$is_canceled
  
  # Crear la tabla de contingencia
  tabla <- table(cancelacion_real, cancelacion_modelo)
  
  # Verificar las dimensiones de la tabla
  if (nrow(tabla) < 2 || ncol(tabla) < 2) {
    return(c(NA, NA, NA, NA))
  }
  
  # Calcular métricas
  desempenio <- (tabla[1, 1] + tabla[2, 2]) / sum(tabla) # Accuracy
  sensibilidad <- ifelse(sum(tabla[2, ]) > 0, tabla[2, 2] / sum(tabla[2, ]), NA) # Sensibilidad
  especificidad <- ifelse(sum(tabla[1, ]) > 0, tabla[1, 1] / sum(tabla[1, ]), NA) # Especificidad
  ponderado <- (desempenio + sensibilidad + especificidad) / 3
  
  return(c(desempenio, sensibilidad, especificidad, ponderado))
}

5.1 Gráfico de Métricas

## 
## Modelo: Grupo_1 
## Umbral donde las métricas son más parecidas: 0.31 
## Diferencias entre métricas:
##   Desempeño (Accuracy): 0.7034451 
##   Sensibilidad: 0.6980398 
##   Especificidad: 0.7054173 
##   Métrica Ponderada: 0.7023007 
## Umbral donde la métrica ponderada es máxima: 0.32 
## Métrica ponderada máxima: 0.7030288 
## Número de variables en Modelo: 20
## 
## Modelo: Grupo_2 
## Umbral donde las métricas son más parecidas: 0.29 
## Diferencias entre métricas:
##   Desempeño (Accuracy): 0.6990949 
##   Sensibilidad: 0.7038079 
##   Especificidad: 0.6973752 
##   Métrica Ponderada: 0.7000926 
## Umbral donde la métrica ponderada es máxima: 0.32 
## Métrica ponderada máxima: 0.7017519 
## Número de variables en Modelo: 20

## 
## Modelo: Grupo_3 
## Umbral donde las métricas son más parecidas: 0.265 
## Diferencias entre métricas:
##   Desempeño (Accuracy): 0.5448437 
##   Sensibilidad: 0.5328269 
##   Especificidad: 0.5492283 
##   Métrica Ponderada: 0.5422996 
## Umbral donde la métrica ponderada es máxima: 0.33 
## Métrica ponderada máxima: 0.5775461 
## Número de variables en Modelo: 20
## 
## Modelo: Modelo Depurado 
## Umbral donde las métricas son más parecidas: 0.28 
## Diferencias entre métricas:
##   Desempeño (Accuracy): 0.7328185 
##   Sensibilidad: 0.7373382 
##   Especificidad: 0.7311694 
##   Métrica Ponderada: 0.7337754 
## Umbral donde la métrica ponderada es máxima: 0.315 
## Métrica ponderada máxima: 0.7385478 
## Número de variables en Modelo: 28

5.2 Conclusiones

En el proceso de búsqueda de hiperparámetros, se evaluaron diferentes modelos ajustados con grupos de variables y un modelo depurado que incluye las variables más representativas. A continuación, se presentan las conclusiones basadas en los resultados obtenidos:

5.2.1 Comparación de Modelos

5.2.1.1 Modelo Grupo_1:

  • Umbral donde las métricas son más parecidas: 0.31.

  • Métrica ponderada: 0.7023.

  • Métrica ponderada máxima: 0.7030 (umbral 0.32).

  • Número de variables: 20.

5.2.1.2 Modelo Grupo_2:

  • Umbral donde las métricas son más parecidas: 0.29.

  • Métrica ponderada: 0.7001.

  • Métrica ponderada máxima: 0.7018 (umbral 0.32).

  • Número de variables: 20.

5.2.1.3 Modelo Grupo_3:

  • Umbral donde las métricas son más parecidas: 0.265.

  • Métrica ponderada: 0.5423.

  • Métrica ponderada máxima: 0.5775 (umbral 0.33).

  • Número de variables: 20.

5.2.1.4 Modelo Depurado:

  • Umbral donde las métricas son más parecidas: 0.285.

  • Métrica ponderada: 0.7337.

  • Métrica ponderada máxima: 0.7385 (umbral 0.315).

  • Número de variables: 28.

5.2.1.5 2. Interpretación del Modelo Depurado

El Modelo Depurado mostró el mejor desempeño general, con una métrica ponderada de 0.7337en el umbral donde las métricas son más equilibradas y una métrica ponderada máxima de 0.7385. Este modelo utiliza 28 variables, lo que podría parecer un número elevado. Sin embargo, es importante destacar que este número incluye variables que fueron transformadas mediante codificación binaria, lo que incrementa artificialmente el número de columnas.

Las siguientes variables fueron originalmente una sola columna, pero se expandieron debido a la codificación binaria:

  • company: Transformada en 3 columnas.

  • arrival_date_week_number: Transformada en 3 columnas.

  • agent: Transformada en 9 columnas.

  • country: Transformada en 4 columnas.

En total, estas 4 variables originales se transformaron en 19 columnas. Por lo tanto, de las 27 variables utilizadas en el modelo depurado, 19 corresponden a estas transformaciones, lo que significa que el modelo realmente está utilizando:

## Número de variables originales utilizadas: 13

5.2.2 Conclusión Final

El Modelo Depurado es el más eficiente y representativo, ya que logra un equilibrio entre desempeño y simplicidad. Aunque utiliza 27 columnas, en realidad solo está aprovechando 13 variables originales de la base de datos inicial. La codificación binaria permitió capturar información detallada de variables categóricas complejas, como company, agent, country y arrival_date_week_number, sin perder información valiosa.

El Modelo Depurado desarrollado en este estudio representa una solución viable para la predicción de cancelaciones de reservas, al equilibrar un desempeño predictivo aceptable (73%) con una estructura interpretable y eficiente. No obstante, se identifica un margen de mejora relevante, con el objetivo de superar el umbral del 80% en las métricas clave, lo cual aumentaría significativamente su aplicabilidad en contextos operativos reales.

Para alcanzar este objetivo, se propone profundizar el análisis del modelo mediante la exploración de interacciones entre variables, la aplicación de métodos avanzados de selección, y la optimización de hiperparámetros. Además, se sugiere implementar validación cruzada para garantizar la generalización y revisar variables previamente descartadas. Estas acciones permitirían robustecer el modelo actual y dotar al sector hotelero de una herramienta predictiva más precisa y estratégica.