La predicción de demanda y la fijación de precios adecuados son dos factores clave en cualquier negocio. En el contexto hotelero en particular, y más concretamente en el sector online, esta tarea es de vital importancia debido al carácter dinámico de los precios y la alta competitividad. Automatizar este proceso es clave para una rápida adaptación, por lo que cada vez más hoteles apoyan sus decisiones en sistemas de recomendación o RMS.
En este artículo, presentamos un modelo de predicción de demanda hotelera y una estrategia de elección del precio óptimo con el fin de maximizar los beneficios esperados.
La estructura del documento se resume a continuación. En la sección 2 describimos el conjunto de datos usados. En la sección 3 presentamos el modelo para la predicción de la demanda a futuro, basado en series temporales. En la sección 4, explicamos cómo se usa la predicción anterior para generar posibles escenarios futuros mediante simulaciones de Monte Carlo. En la sección 5, estudiaremos el efecto que tiene el precio sobre la demanda a partir de los datos históricos.
Estos resultados serán usados en la sección 6 para calcular el precio óptimo sobre las simulaciones generadas en la sección 4. En la sección 7 presentamos los resultados obtenidos en cada una de las secciones anteriores. Finalmente, en la sección 8 resumimos el trabajo realizado y proponemos posibles líneas de mejora.
El conjunto de datos que usamos es una simulación de tres años de reservas en cierto hotel, en cuyos datos se ha incluido el efecto de la estacionalidad semanal y anual. Usaremos los datos hasta cierta fecha, el periodo de muestra, para predecir la demanda futura y proponer un precio óptimo sobre el resto de las fechas, el periodo de estudio.
Se asume que el hotel acepta reservas para un día de llegada concreto a partir de 𝑇 = 10 días antes, hasta el mismo día de llegada. Los precios se fijan una vez al día, por lo que al inicio de cada día el director del hotel decide los precios para el día actual y los próximos 𝑇 días. Estos precios se mantendrán durante todo el día, por lo que todas las reservas que se realicen en dicho día de reserva se atenderán a ellos.
Sin embargo, al día siguiente se volverán a fijar los 𝑇 + 1 precios correspondientes, que pueden ser diferentes a los fijados el día anterior. Se considera que el hotel tiene una capacidad de 𝐶 = 100 habitaciones.
Tenemos información desglosada del precio y de la demanda total para cada día de llegada y cada día de reserva. El dataset proporciona también el periodo o temporada en el cual se engloba cada día de check-in, tanto de los datos históricos como de las fechas que se quieren predecir. En este caso existen cuatro periodos diferenciados:
Temporada muy baja (Very Low): meses de diciembre, enero y febrero.
Temporada baja(Low): meses de marzo, octubre y noviembre.
Temporada alta (High): meses de abril, mayo y septiembre.
Temporada muy alta (Very High): meses de junio, julio y agosto.
Así pues, el conjunto de datos cuenta con las siguientes columnas:
ReservationDate: el día en el que se produce la reserva.
CheckInDate: el día de check-in.
ADR: el precio fijado en el día de reserva para dicho día de check-in, en dólares.
Demand: número de reservas en la fecha de reserva para la fecha de check-in.
Season: el periodo en el que se engloba el día de check-in.
Figura 1. Arriba, evolución de la demanda total y el precio promedio para cada día de check-in en nuestro dataset, en el que se puede observar la estacionalidad anual y la correlación positiva entre demanda y precio. Abajo, detalle del gráfico anterior, donde se puede apreciar la estacionalidad semanal.
En la Figura 1 se observa tanto la estacionalidad anual mencionada como una estacionalidad semanal, así como una ligera tendencia creciente tanto en la demanda como en el precio a lo largo del tiempo. Se observa asimismo una fuerte correlación positiva entre precio y demanda, como ocurre frecuentemente en el contexto de la hostelería.
Predicción de reservas a futuro
A continuación definimos el proceso mediante el cual predecimos la demanda a futuro. Sea 𝑅(𝑖, 𝑡) el número total de reservas realizadas para un día de check-in concreto 𝑡 con un número de días de antelación 𝑖. Notemos que este número es una realización de la variable aleatoria de reservas, que expresamos como 𝐵(𝑖, 𝑡). Modelamos esta variable aleatoria como el producto de dos funciones independientes
como se detalla a continuación. Por un lado, la magnitud de la demanda según el día de llegada, 𝑠(𝑡), representa el número total de reservas esperadas para un día de check-in 𝑡. Por otro lado, la formade la demanda en función de la antelación, 𝐵'(𝑖), representa la fracción del número total de reservas para un día de llegada concreto que se realizan con 𝑖 días de antelación.
Forma de la demanda
Asumimos que la forma de la demanda depende de la temporada (o periodo) en el que se engloba el día de llegada 𝑡. Como hemos mencionado en la sección 2, en nuestros datos existen cuatro temporadas, correspondientes a periodos de actividad muy baja, baja, alta o muy alta, respectivamente. Entonces, para cada temporada 𝑘, consideramos el conjunto 𝑆𝑘 de todos los días que se engloban en ese periodo, y podemos estimar la forma de la demanda en función de la antelación de la siguiente manera
Es decir, para cada día de llegada del periodo en cuestión se calcula la fracción de reservas realizadas con una antelación de 𝑖 días, y finalmente se calcula la media sobre todos los días. De esta forma se tiene el promedio de la forma de la demanda según la antelación para el periodo 𝑘. Se asume que este patrón no varía en el corto plazo, por lo que en la estimación de la demanda a futuro se usará la forma de la demanda correspondiente según la temporada.
Magnitud de la demanda
La magnitud de la reserva representa la demanda total esperada para cada día de check-in. Así pues, se estima a partir de los datos de muestra como el número total de reservas realizadas para cada día de check-in concreto, esto es,
Recordemos que nuestros datos presentan estacionalidad tanto anual como semanal. Para hacer la proyección a futuro de la serie y así poder estimar la demanda total para cada día de llegada en el futuro, desestacionalizamos la serie de la siguiente manera.
En primer lugar, vamos a calcular el índice estacional de cada temporada 𝑘 (temporada muy baja, baja, alta o muy alta), según la fórmula
donde el denominador representa el promedio de la serie 𝑠(𝑡) en el año en el que se encuentra el día 𝑡. Como vemos, el índice estacional del periodo 𝑘 no es más que el promedio de la demanda para este periodo, donde cada valor está normalizado por su promedio anual. Así, sea 𝑘𝑡 el periodo al que pertenece el día 𝑡 , calculamos la serie sin estacionalidad anual, como
donde el subíndice 𝑌 representa que es una desestacionalización por año. Para eliminar la estacionalidad semanal, se sigue un proceso similar al anterior, esta vez tomando como base la serie 𝑠𝑑𝑒𝑠,𝑌(𝑡) y cambiando el periodo 𝑘 por el día de la semana 𝑑. En lugar de usar el promedio, usamos la mediana para representar el índice estacional del día de la semana. Esta técnica es común en la literatura para poder preservar los picos pronunciados que presenta la estacionalidad semanal. Así, calcularemos el índice estacional del día de la semana 𝑑 como
donde 𝐷𝑑 representa el conjunto de todos los días que son del tipo 𝑑 (e.g. todos los lunes). Aquí, el denominador representa el promedio de la serie 𝑠𝑑𝑒𝑠,𝑌(𝑡) en la semana en la que se encuentra el día 𝑡. Finalmente, la serie desestacionalizada se calcula como
donde 𝑑𝑡 representa el día de la semana de cada día 𝑡.
Una vez que tenemos la serie desestacionalizada, la proyectamos a futuro usando el modelo de suavizamiento exponencial de Holt-Winters, cuyos parámetros se estiman a partir de los datos de muestra. Otra opción es usar modelos SARIMA, que exigen encontrar los hiperparámetros (p, d, q, P, D, Q, m) que mejor se ajustan a los datos disponibles. En nuestro caso, debido a que ya hemos desestacionalizado la serie, no hemos encontrado grandes mejoras en los resultados a la hora de usar estos modelos. Por esta razón y debido a su relativa complejidad computacional, usamos el modelo de Holt-Winters.
Tras hacer la proyección de la serie desestacionalizada, para obtener la demanda total estimada para cada día de llegada, debemos deshacer los cambios hechos anteriormente. Es decir, para cada día 𝑡 del período a predecir, debemos multiplicar el valor de 𝑠𝑑𝑒𝑠,𝑌(𝑡) por sus respectivos índices estacionales y , siendo 𝑑𝑡 y 𝑘𝑡 el día de la semana y el periodo correspondientes al día 𝑡. De esta manera, obtenemos la estimación de la magnitud de la demanda a futuro. Los resultados se muestran en la sección 7.
Simulación de demanda
A continuación, simulamos la proyección de la demanda esperada a futuro asumiendo que la política de precio no cambiará a futuro. Así pues, la demanda simulada es un valor de referencia que se verá afectado por la política de precio que se decida seguir.
En la sección 2, hemos modelado la demanda como un producto de dos funciones independientes, la magnitud y la forma de la demanda. Para cada día en el periodo a predecir, hemos predicho la magnitud de la demanda ŝ(𝑡) mediante la proyección de la serie desestacionalizada ŝ𝑑𝑒𝑠(𝑡) , multiplicando posteriormente el valor por los índices de estacionalidad correspondientes. Por otro lado, hemos obtenido una estimación de la forma de la demanda Ḃ𝑘(𝑡) para cada periodo 𝑘 a partir de los datos históricos. Así, podemos estimar el número de reservas para cierto día de llegada 𝑡 con una antelación de 𝑖 días mediante el producto
siendo 𝑘𝑡 el periodo en el que se engloba el día 𝑡 . Para poder simular los datos, necesitamos también conocer la varianza de la variable aleatoria, que calculamos a partir del histórico. Como no tenemos el valor real de las reservas en el día 𝑡 que queremos predecir, aproximamos la varianza de 𝐵(𝑖,𝑡) como la suma cuadrática de los errores de los días pertenecientes a la misma categoría, esto es, el mismo día de la semana y el mismo periodo, para la antelación 𝑖. Así, calculamos la varianza de la variable de reservas como
donde 𝑆𝑘𝑡 y 𝐷𝑑𝑡 representan, respectivamente, el conjunto de días pertenecientes al mismo periodo 𝑘𝑡 , y el conjunto de días del mismo día de la semana 𝑑𝑡 , que el día 𝑡 .
A partir de estos estadísticos, simulamos la demanda a futuro para cada par (𝑖, 𝑡) como una distribución normal con media B(𝑖,𝑡) y varianza Var( B(𝑖,𝑡) ). Dicha distribución se trunca por la izquierda en cero, pues no es posible tener valores de demanda negativos. Cabe remarcar que se podría testear el supuesto de normalidad y, en caso de ser refutado, proponerse un modelo distinto. Sin embargo, este no es nuestro objetivo principal y hemos considerado suficiente controlar el promedio y el grado de dispersión de la demanda.
A continuación, mediante el método de Monte Carlo simulamos 𝑀 posibles trayectorias de la demanda para el periodo de estudio. Así, para cada día 𝑡 y cada antelación 𝑖 desde 0 hasta 𝑇 (la máxima antelación), tomamos 𝑀 valores de una distribución normal con promedio y varianza dados por las ecuaciones (8) y (9) respectivamente.
Estimación de la relación precio – demanda
Para poder encontrar el precio óptimo que debemos fijar para optimizar los beneficios, es indispensable tener en cuenta el efecto que el precio tiene sobre la demanda. Sabemos que en general se cumple la ley de la demanda: una subida de precio conlleva un descenso en la demanda, y viceversa. Sin embargo, al estudiar los datos encontramos en general una correlación positiva entre el precio y la demanda. Esto es debido a que existen variables comunes afectando tanto al precio como a la demanda, problema que se conoce como la endogeneidad del precio.
Por ejemplo, en temporada alta tenemos más clientes potenciales, por lo que los hoteleros suben los precios en general, y aun así la demanda es más alta que en temporada baja.
En este contexto, una estimación simple predice una elasticidad positiva, es decir, que una subida del precio provoca una subida en la demanda, contrariamente a lo que dicta la ley de la demanda. Esto se muestra en la Figura 2.
Figura 2. Regresión lineal de la demanda total respecto del precio promedio por cada día de llegada. 𝑅² = 0.441 . Observamos que la pendiente es positiva debido a la endogeneidad de la variable precio.
Por tanto, se hace patente la necesidad de procesar los datos de alguna manera para encontrar el efecto real del precio sobre la demanda, que en particular debe ser negativo. Para ello, procedemos de la siguiente manera.
En primer lugar, agrupamos los datos en subconjuntos similares, por ejemplo por días que pertenecen a la misma temporada y que son del mismo día de la semana. Para cada subconjunto, calculamos el promedio de los precios y el número de reservas obtenidas, que serán los precios y demandas de referencia para ese subconjunto. Finalmente, normalizamos el histórico de precios y demandas dividiendo cada uno de los precios y las demandas por su valor de referencia correspondiente.
De esta manera, esperamos aislar el efecto causal que tiene variar el precio sobre la demanda. Por ejemplo, un precio normalizado superior a 1 significa que el precio fijado fue superior al precio promedio en las mismas condiciones (por ejemplo debido a que el hotel estaba casi completo). Tal elección podría resultar en una demanda inferior a la demanda promedio en las mismas condiciones, así que la demanda normalizada sería inferior a 1.
En este caso, consideramos una regresión lineal para cada uno de los 4 periodos de estacionalidad. Tras ajustar cada modelo usando los datos de cada periodo, tenemos que
donde 𝑝𝑛𝑜𝑟𝑚(𝑖,𝑡) y 𝑑𝑛𝑜𝑟𝑚(𝑖,𝑡) son el precio y la demanda normalizados para cierto día de llegada 𝑡 y antelación 𝑖, y 𝑘𝑡 es el periodo al que pertenece el día 𝑡.
En la siguiente sección, usamos esta relación para predecir cómo aumentará o disminuirá la demanda esperada dependiendo del precio que fijemos en cada día concreto. De esta manera podemos calcular los beneficios esperados para una elección de precio concreto de una forma más fidedigna.
Búsqueda del precio óptimo
En esta sección definimos la estrategia seguida para buscar el precio óptimo. El objetivo es fijar el conjunto de precios que maximice los beneficios en el periodo de estudio, lo cual implica una elección de precio para cada día 𝑡 y cada posible antelación 𝑖.
Si no imponemos ninguna restricción sobre el comportamiento que debe seguir el precio, este problema puede volverse sumamente complejo. En particular, la elección del precio óptimo dada cierta antelación 𝑖 depende de los beneficios que se esperen obtener en los días siguientes, que a su vez dependen del precio que se fije. Por ejemplo, si no se espera llenar el hotel, el precio a fijar deberá ser relativamente bajo para asegurar cierta ocupación, mientras que el precio puede ser más alto si se espera una demanda alta. Tal enfoque requiere la resolución de un problema recursivo, por ejemplo usando programación dinámica.
Como veremos en un futuro post, este cálculo puede ser relativamente complejo incluso en situaciones simplificadas. Para simplificar este cálculo, a continuación presentamos un modelo paramétrico para el precio basado en multiplicadores.
Modelo de precio dinámico mediante multiplicadores
Asumamos el siguiente enfoque. El precio a fijar en cada día 𝑡 y cada antelación 𝑖 dependerá de diversos factores, cada uno de los cuales contribuirá a la hora de fijar el precio final. En particular, estos factores, centrados en 1, se interpretan como descuentos o sobrecargas que se multiplicarán a un precio de referencia. Aquí, el principal supuesto del modelo reside en que los multiplicadores son lineales respecto a sus respectivas variables, como veremos a continuación. En particular, tomamos en cuenta dos factores: el número de habitaciones disponibles y el número de días de antelación de la reserva.
Multiplicador de disponibilidad
Una práctica común es aumentar el precio a medida que disminuye el número de habitaciones disponibles para el día en cuestión. Así, en nuestro modelo el multiplicador decrece linealmente con el número de habitaciones disponibles, como se ve en la Figura 3.
Figura 3. Multiplicador de disponibilidad. La capacidad del hotel es representada por 𝐶 .
El multiplicador viene determinado por dos parámetros. El mínimo se da cuando el hotel está vacío y el máximo