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.
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.
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.
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.
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.
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.
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"
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.
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:
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.) |
is_canceled
(Cancelación de reserva):
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.
arrival_date_year
(Año de llegada):
stays_in_weekend_nights
y
stays_in_week_nights
(Noches de fin de semana y noches
entre semana):
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.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.adults
(Número de adultos en la
reserva):
children
(Número de niños en la
reserva):
babies
(Número de bebés en la
reserva):
adr
(Tarifa diaria promedio por
habitación):
hotel
arrival_date_month
deposit_type
market_segment
meal
arrival_date_week_number
(Semana del año de
llegada):
arrival_date_day_of_month
(Día del mes de
llegada):
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.
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.
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.
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.
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:
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
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
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 |
Las variables categóricas con un alto número de categorías,
como country
, agent
, company, 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
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.
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.
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
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
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))
}
##
## 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
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:
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.
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.
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.
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.
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
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.