Saltar al contenido

lección 4

Día 3 — El ranking de superficie: todo le da la razón a Bruno

Con los datos limpios, montas en SQL la foto que mira Comercial cada día: ocupación, noches vendidas e ingreso de habitación por hotel. Costa gana las tres, y por un día el titular de Bruno parece inatacable. Pero al añadir el ADR aparece la primera pista muda: Costa tiene la tarifa media más baja de los grandes. Hoy no la persigues; la guardas. El análisis se produce en SQL porque estos números van a ir al panel.

55 min

### Miércoles, 10:00. Ahora sí, a calcular

Ya tienes las seis tablas limpias y una definición de reserva consumida que defenderías con los ojos cerrados. Hoy cambias de herramienta: la exploración y la limpieza se hicieron en Pandas porque leer y sanear CSV crudos es su terreno, pero el análisis —los números que van a acabar en el panel de Elena— se produce en SQL, que es como trabaja el equipo. DuckDB lee las tablas ya limpias y tú escribes las consultas. La lógica es la misma que la de Pandas, pero el lenguaje es el que habla El Mirador cuando una cifra pasa de tu cuaderno a la mesa de dirección.

El plan del día es levantar la foto que Comercial mira cada mañana, sin trampa ni cartón: ocupación, noches vendidas e ingreso de habitación por hotel. Es la base de la escalera de métricas, los peldaños uno y dos. Y es importante que la levantes bien y sin prejuicios, porque vas a confirmar que Bruno tiene razón en la superficie: por ocupación, por noches y por ingreso, Costa gana de calle. Un analista que llega con la conclusión puesta («Costa es una trampa») y fuerza los números para que salga mal pierde toda su credibilidad en la primera reunión. Tú vas a darle a Bruno su titular, entero y verdadero, y solo después vas a subir la escalera hasta donde el titular se rompe.

### El filtro que se repite: la reserva consumida en SQL

La definición de consumida que cerraste ayer en Pandas se traduce ahora a una cláusula WHERE que vas a repetir en cada consulta de la semana. Es larga a propósito: cada condición tapa un agujero. El estado confirmada o completada deja fuera las canceladas y los no-shows; la fecha de cancelación nula es la doble red; la tarifa entre cero y 2.000 quita los outliers; las noches y las habitaciones positivas quitan las filas vacías; y las dos condiciones de fecha acotan el periodo y descartan las estancias con fechas imposibles. Escríbela una vez con cuidado y reúsala: es el cimiento sobre el que se levantan todas las cifras.

1-- La reserva CONSUMIDA: el filtro que gobierna toda la semana
2SELECT COUNT(*) AS reservas_consumidas
3FROM reservas r
4WHERE r.estado IN ('confirmada', 'completada')
5 AND r.fecha_cancelacion IS NULL
6 AND r.tarifa_noche > 0 AND r.tarifa_noche < 2000
7 AND r.noches > 0 AND r.num_habitaciones > 0
8 AND (r.fecha_entrada IS NULL OR r.fecha_entrada <= DATE '2024-12-31')
9 AND (r.fecha_salida IS NULL OR r.fecha_entrada IS NULL OR r.fecha_salida >= r.fecha_entrada);

La cláusula WHERE de la reserva consumida, que se repite en cada consulta del caso

### Ocupación: el peldaño que enamora a Comercial

La ocupación es las noches vendidas dividido entre las noches disponibles. Las noches vendidas salen de sumar la columna noches sobre las reservas consumidas; las noches disponibles ya están en la tabla de hoteles (80.000 para Costa, 60.000 para Playa Sur y Centro, 55.000 para Ciudad, 40.000 para Sierra), porque son un dato de negocio: las habitaciones de cada hotel a plena disponibilidad todo el año. Para juntar las dos hay que agrupar las noches por hotel y cruzar con hoteles por hotel_id. El resultado confirma el titular: Costa está al 85%, la ocupación más alta del grupo, seguido de Ciudad (80%), Playa Sur (70%), Centro (68%) y Sierra (58%).

No calcules las noches disponibles como habitaciones × 365. Es tentador, pero está mal: un hotel cierra habitaciones por reforma, por temporada o por mantenimiento, así que su disponibilidad real no es todas las habitaciones todos los días del año. El Mirador te da la disponibilidad de verdad en la columna noches_disponibles de la tabla de hoteles, y es la que hay que usar. Inventarla con una multiplicación te daría ocupaciones falsas y, peor, un RevPAR y un GOPPAR falsos, porque los tres se dividen entre esa cifra.

La ocupación por hotel: Costa es el número uno, y el titular de Bruno es cierto en la superficie. Pero la ocupación no dice el precio

### Ingreso de habitación y ADR: la primera pista muda

El ingreso de habitación de un hotel es la suma de las noches por la tarifa de cada noche, sobre las reservas consumidas. Aquí Costa vuelve a ganar: es el que más factura en habitación de los cinco, porque vende muchísimas noches. Bruno tiene su segundo titular. Pero cuando divides ese ingreso entre las noches vendidas obtienes el ADR, la tarifa media, y ahí aparece la primera pista, muda pero inquietante: Costa tiene un ADR de 90 €, el más bajo de los hoteles grandes, mientras Centro vende a 135 €. Costa factura mucho porque llena mucho, no porque venda caro; de hecho, vende barato. Esa grieta minúscula —el hotel más lleno es el que vende a tarifa más baja— es la punta del hilo del que tirarás mañana.

Fíjate en la mecánica del cálculo, porque es la regla de oro de todo el caso: para el ADR agregas el ingreso por un lado y las noches por otro, y divides los dos totales; nunca promedias las tarifas fila a fila. La media de las tarifas de cada reserva no es el ADR, porque una reserva de una noche pesaría lo mismo que una de diez. El ADR correcto es el ingreso total dividido entre las noches totales, que da a cada noche su peso justo. Este patrón —agregar numerador y denominador por separado y dividir al final— lo repetirás para la comisión efectiva, el RevPAR y el GOPPAR, y es lo que impide que un JOIN mal montado multiplique filas y te dé una cifra inflada.

Consejo de senior: cuando una tabla te dé un ranking «obvio» que confirma lo que todos creen, no la cierres: añádele una columna más. Aquí el ranking de ingreso confirma a Costa, pero la columna del ADR al lado es la que abre la investigación. La mejor pregunta de un analista suele ser «¿y si pongo esta otra métrica en la misma tabla?». La ocupación al lado del ADR, el ingreso al lado del RevPAR: es en la comparación donde vive el hallazgo, no en la cifra suelta.

Cierras el miércoles con la foto de superficie levantada y honesta: Costa gana en ocupación, en noches vendidas y en ingreso de habitación, y a Bruno le brillan los ojos. Le confirmas su titular, porque es verdad. Pero te guardas la pista del ADR y le pides tiempo hasta el jueves antes de que cierre el plan de inversión, porque quieres mirar cuánto se lleva la OTA de cada reserva y cuánto cuesta operar cada habitación. Ya sabes cuánto llena y cuánto factura cada hotel. Mañana toca averiguar cuánto le queda, que no es lo mismo.

Regístrate para guardar tu progreso.