Motor de precios hotelero
Seis señales de demanda deciden la tarifa de cada habitación y cada noche.
Datos y BI · Python · Demo navegable

El problema
Una habitación es un producto que caduca cada noche: la que hoy queda vacía no se vende mañana, se pierde. Poner precio alto la deja sin ocupar y ponerlo bajo regala margen, así que la decisión se repite cada día y por cada tipo de habitación.
Qué hace
- Codifica la decisión de precio como algoritmo, a partir de seis factores de demanda.
- Uno de ellos es la antelación de la reserva: prima el último minuto dentro de los treinta días.
- Proyecta el efecto sobre el ingreso a sesenta días vista.
- Calcula los indicadores del sector: tarifa media diaria, ingreso por habitación disponible y ocupación.
Lo que se decidió al construirlo
- Una banda de seguridad que el modelo no puede saltarse
- La tarifa final se acota entre el setenta por ciento y el doscientos veinte por ciento del precio base, pase lo que pase con los factores. Un modelo multiplicativo sin tope produce, el día que coinciden temporada alta, fin de semana, evento y última hora, un precio que ningún director firmaría. La banda es lo que se firma, y hay una prueba que no deja salirse de ella.
- El recargo de última hora se apaga a los treinta días
- Reservar con mucha antelación no lleva ningún recargo: la prima crece de forma lineal solo dentro de los treinta días previos y llega como mucho a un veintinueve por ciento. Cobrar antelación es cobrar por planificar, que es justo lo contrario de lo que interesa premiar.
- La presión de ocupación mira catorce días, no el día de ayer
- Se promedia la ocupación de las dos últimas semanas y se traduce en tres escalones: presión alta, normal o floja. Reaccionar al dato de ayer convierte cualquier ruido en un cambio de tarifa, y una tarifa que se mueve todos los días deja de ser una política de precios para ser una alarma.
- La semilla se declara, y también que no basta
- El generador siembra al importarse, así que dos llamadas seguidas dan números distintos: quien necesite reproducir un conjunto tiene que volver a sembrar de forma explícita. Hay dos pruebas, una para cada lado, porque prometer reproducibilidad y no probarla es la forma más habitual de no tenerla.
Hasta dónde llega
- Los seis factores actúan sobre la previsión. El histórico de dos años sobre el que se calculan tarifa media y ocupación usa solo tres: temporada, día de la semana y evento.
- No es un optimizador. No hay curva de demanda ni elasticidad: la ocupación esperada se calcula sin mirar el precio propuesto, así que subir la tarifa no la baja. No demuestra que el modelo aumente el ingreso.
- Cuatro de los seis factores son calendario puro —mes, día, fecha señalada y antelación—, tablas escritas a mano. Solo la presión de ocupación observa algo, y observa datos que el propio script generó.
- Los datos son sintéticos, el calendario de eventos es estadounidense y los importes van en dólares. El panel que los pinta vive en otro repositorio.
- 6 factores de precio
- 730 días de histórico
- 60 días de previsión
Construido con
- Python
- NumPy
- React
De dónde salen los datos
Datos sintéticos generados por el propio repositorio: no hay información de ningún cliente.