Chapter 2 Análisis Exploratorio de Datos
Con el fin de entender los datos realizamos una revisión general de estos (solamente de la base de datos de entrenamiento posterior a haberla dividido en entrenamiento, validación y prueba) y tratamos de identificar aquellas variables que pudieran ser interesantes para nuestro estudio. A continuación se muestra una breve parte de la exploración de datos. Si desea consultar el análisis completo puede encontrarlo en la siguiente liga EDA.
El data set está compuesto por las siguientes variables:
Variable | Tipo | Descripción |
---|---|---|
ADR | Numeric | Tarifa diaria promedio definida por [5] |
Adults | Integer | Número de Adultos |
Agent | Categorical | DNI de la agencia de viajes que realizó la reservaa |
ArrivalDateDayOfMonth | Integer | Día del mes de la fecha de llegada |
ArrivalDateMonth | Categorical | Mes de la fecha de llegada con 12 categorías: “enero” a “diciembre” |
ArrivalDateWeekNumber | Integer | Número de semana de la fecha de llegada |
ArrivalDateYear | Integer | Año de la fecha de llegada |
AssignedRoomType | Categorical | Código del tipo de habitación asignada a la reserva. A veces, el tipo de habitación asignada difiere del tipo de habitación reservada debido a razones de operación del hotel (por ejemplo, overbooking) o por solicitud del cliente. El código se presenta en lugar de la designación por razones de anonimato |
Babies | Integer | Numero de bebes |
BookingChanges | Integer | Número de cambios / modificaciones realizadas a la reserva desde el momento en que se ingresó la reserva en el PMS hasta el momento del check-in o la cancelación |
Children | Integer | Numero de niños |
Company | Categorical | DNI de la empresa / entidad que realizó la reserva o responsable del pago de la reserva. La identificación se presenta en lugar de la designación por razones de anonimato |
Country | Categorical | País de origen. Las categorías están representadas en el formato ISO 3155-3: 2013 [6] |
CustomerType | Categorical | Tipo de reserva, asumiendo una de cuatro categorías: |
DaysInWaitingList | Integer | Número de días que la reserva estuvo en lista de espera antes de que fuera confirmada al cliente |
DepositType | Categorical | Indicación sobre si el cliente realizó un depósito para garantizar la reserva. Esta variable puede asumir tres categorías: |
DistributionChannel | Categorical | Canal de distribución de reservas. El término “TA” significa “Agentes de viajes” y “TO” significa “Operadores turísticos” |
IsCanceled | Categorical | Valor que indica si la reserva fue cancelada (1) o no (0) |
IsRepeatedGuest | Categorical | Valor que indica si el nombre de la reserva fue de un huésped repetido (1) o no (0) |
LeadTime | Integer | Número de días transcurridos entre la fecha de entrada de la reserva en el PMS y la fecha de llegada |
MarketSegment | Categorical | Designación de segmento de mercado. En las categorías, el término “TA” significa “Agentes de viajes” y “TO” significa “Operadores turísticos” |
Meal | Categorical | Tipo de comida reservada. Las categorías se presentan en paquetes de comidas de hospitalidad estándar: |
PreviousBookingsNotCanceled | Integer | Número de reservas anteriores no canceladas por el cliente antes de la reserva actual |
PreviousCancellations | Integer | Número de reservas anteriores que fueron canceladas por el cliente antes de la reserva actual |
RequiredCardParkingSpaces | Integer | Número de plazas de aparcamiento requeridas por el cliente |
ReservationStatus | Categorical | Último estado de la reserva, asumiendo una de tres categorías: |
ReservationStatusDate | Date | Fecha en la que se estableció el último estado. Esta variable se puede utilizar junto con ReservationStatus para comprender cuándo se canceló la reserva o cuándo se registró el cliente en el hotel. |
ReservedRoomType | Categorical | Código del tipo de habitación reservado. El código se presenta en lugar de la designación por razones de anonimato |
StaysInWeekendNights | Integer | Número de noches de fin de semana (sábado o domingo) que el huésped se hospedó o reservó para alojarse en el hotel |
StaysInWeekNights | Integer | Número de noches de la semana (de lunes a viernes) que el huésped se hospedó o reservó para alojarse en el hotel |
TotalOfSpecialRequests | Integer | Número de solicitudes especiales realizadas por el cliente (por ejemplo, dos camas individuales o piso alto) |
Nuestra variable de interés es IsCanceled la cual toma valores de 1 (fue cancelada) y 0 (no fue cancelada). Así que primero veamos la proporción de cancelaciones en los datos.
Cancelado | No cancelado |
---|---|
0.3620854 | 0.6379146 |
Usamos la función skim en la base de datos de entrenamiento para conocer las características generales de cada variable.
Name | data |
Number of rows | 91531 |
Number of columns | 30 |
_______________________ | |
Column type frequency: | |
character | 13 |
numeric | 17 |
________________________ | |
Group variables | None |
Variable type: character
skim_variable | n_missing | complete_rate | min | max | empty | n_unique | whitespace |
---|---|---|---|---|---|---|---|
hotel | 0 | 1 | 10 | 12 | 0 | 2 | 0 |
is_canceled | 0 | 1 | 9 | 12 | 0 | 2 | 0 |
arrival_date_month | 0 | 1 | 3 | 9 | 0 | 12 | 0 |
meal | 0 | 1 | 2 | 9 | 0 | 5 | 0 |
country | 0 | 1 | 2 | 4 | 0 | 164 | 0 |
market_segment | 0 | 1 | 6 | 13 | 0 | 8 | 0 |
distribution_channel | 0 | 1 | 3 | 9 | 0 | 5 | 0 |
reserved_room_type | 0 | 1 | 1 | 1 | 0 | 10 | 0 |
assigned_room_type | 0 | 1 | 1 | 1 | 0 | 12 | 0 |
deposit_type | 0 | 1 | 10 | 10 | 0 | 3 | 0 |
agent | 0 | 1 | 1 | 4 | 0 | 302 | 0 |
company | 0 | 1 | 1 | 4 | 0 | 329 | 0 |
customer_type | 0 | 1 | 5 | 15 | 0 | 4 | 0 |
Variable type: numeric
skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
---|---|---|---|---|---|---|---|---|---|---|
lead_time | 0 | 1 | 96.29 | 105.45 | 0.00 | 15 | 58.0 | 145 | 737 | ▇▂▁▁▁ |
arrival_date_year | 0 | 1 | 2015.90 | 0.61 | 2015.00 | 2016 | 2016.0 | 2016 | 2017 | ▃▁▇▁▂ |
arrival_date_week_number | 0 | 1 | 28.18 | 15.01 | 1.00 | 13 | 31.0 | 41 | 53 | ▆▅▆▇▆ |
arrival_date_day_of_month | 0 | 1 | 15.81 | 8.76 | 1.00 | 8 | 16.0 | 23 | 31 | ▇▇▇▇▆ |
stays_in_weekend_nights | 0 | 1 | 0.90 | 1.00 | 0.00 | 0 | 1.0 | 2 | 19 | ▇▁▁▁▁ |
stays_in_week_nights | 0 | 1 | 2.45 | 1.94 | 0.00 | 1 | 2.0 | 3 | 50 | ▇▁▁▁▁ |
adults | 0 | 1 | 1.84 | 0.61 | 0.00 | 2 | 2.0 | 2 | 55 | ▇▁▁▁▁ |
children | 4 | 1 | 0.09 | 0.37 | 0.00 | 0 | 0.0 | 0 | 10 | ▇▁▁▁▁ |
babies | 0 | 1 | 0.01 | 0.10 | 0.00 | 0 | 0.0 | 0 | 10 | ▇▁▁▁▁ |
is_repeated_guest | 0 | 1 | 0.03 | 0.18 | 0.00 | 0 | 0.0 | 0 | 1 | ▇▁▁▁▁ |
previous_cancellations | 0 | 1 | 0.11 | 0.96 | 0.00 | 0 | 0.0 | 0 | 26 | ▇▁▁▁▁ |
previous_bookings_not_canceled | 0 | 1 | 0.13 | 1.40 | 0.00 | 0 | 0.0 | 0 | 61 | ▇▁▁▁▁ |
booking_changes | 0 | 1 | 0.21 | 0.64 | 0.00 | 0 | 0.0 | 0 | 21 | ▇▁▁▁▁ |
days_in_waiting_list | 0 | 1 | 2.96 | 19.93 | 0.00 | 0 | 0.0 | 0 | 391 | ▇▁▁▁▁ |
adr | 0 | 1 | 92.81 | 46.72 | -6.38 | 65 | 86.4 | 114 | 5400 | ▇▁▁▁▁ |
required_car_parking_spaces | 0 | 1 | 0.07 | 0.25 | 0.00 | 0 | 0.0 | 0 | 8 | ▇▁▁▁▁ |
total_of_special_requests | 0 | 1 | 0.53 | 0.77 | 0.00 | 0 | 0.0 | 1 | 5 | ▇▁▁▁▁ |
Podemos observar que:
Tenemos 13 variables categorías, de las cuales podemos destacar que 3 tienen un número alto de categorías (country, agent, company).
Tenemos 17 variables numéricas.
En este primer acercamiento, podemos identificar que las variables corresponden a:
Variables de tiempo: tiempo previo de reservación, fechas de llegada, duración de la reservación.
Características de reservación: agencia, país, canal de distribución, segmento de mercado, tipo de depósito, tarifa diaria
Características de los clientes y sus preferencias: adultos, bebes, tipo de hotel, tipo de habitación
2.0.1 Cancelaciones EDA
Ahora extraemos el subconjunto de cancelados para hacer una revisión de todas las variables con respecto a las reservaciónes canceladas.
<- subset(train, is_canceled == "cancelado") sub_cancelados
Iniciamos con la revisión de los histogramas de cada variable para ver si podemos identificar algun compartamiento interesante. A continuación se muestran los histogramas de las variables más interesantes a nuestro criterio, nuevamente puede consultar la exploración completa de los datos en EDA.
Lead_time: la distribución de sus datos no tiene un comportamiento lógico, porque el mayor número de cancelaciones proviene de o días previos de reservación, pero luego se mueve a valores de 90 días, 40 días y luego regresa a 2 días. será importante ver si existe algún patrón en esta variable.
Si observamos la variable Lead_time antes de la extracción de los datos de cancelación vemos solamente que existe un sesgo, sin embargo, al graficar la misma variable seleccionando solo donde se hicieron cancelaciones podemos ver más claramente la distribución y los picos que son interesantes para nuestro análisis
Country: esta variable presenta un dato totalmente atípico en la categoría PRT por lo que es importante considerarla ya que podría explicar una porción importante de las cancelaciones.
#
Deposit_type: aqui hay otro caso ilógico, ya que la categoría de no rembolsable está muy por arriba de los rembolsable, uno pensaría que debería ser menos frecuenta la cancelación si no te van a devolver tu dinero. por lo que es otra variable importante.
Analisando la variable deposit_type, se extrae el subset de deposit_type cancelados. Revisamos los porcentajes de cada categoría en las otras variables y observamos que el 97% de las cancelaciones sin rembolso pertenecen al país PRT.
##
## BEL CN ESP FRA GBR NULL
## 0.0014139272 0.0021208908 0.0109579357 0.0007069636 0.0120183811 0.0010604454
## POL PRT
## 0.0038882998 0.9678331566
También se analizó la variable de Agente y se observa que ha una relación del agente 1 con las reservaciones del país PRT y las cancelaciones sin reembolso
2.0.2 Análisis de tendenciás en el tiempo EDA
Para analizar tendencias de cancelación en el timepo se agrupan las cancelaciones por fecha.
Se procede a hacer un análisis de series de tiempo.
En la gráfica de días de la semana podemos observar picos de cancelaciones los días vieres y el más significativo parece ser en el periodo de semana santa lo cual suena lógico
En la siguiente grafica anual se observar dos picos que puede corresponder a las vacaciones de verano.