Bijgewerkt op 26 augustus 2026. Dit artikel gebruikt historische hoteldata om te laten zien hoe je annuleringsrisico kunt onderzoeken. De uitkomsten zijn illustratief en moeten voor gebruik in de praktijk altijd opnieuw worden gevalideerd op de eigen hoteldata.

Een geannuleerde reservering raakt bezetting, omzet en planning. Hotels vangen dat risico vaak op met overboeking, maar een vaste opslag voor iedere dag en ieder segment is grof: te veel overboeken schaadt de gastbeleving, te weinig overboeken laat omzet liggen.

Een voorspellend model kan helpen om het risico per reservering te schatten. Het model neemt de beslissing niet over, maar maakt zichtbaar waar extra aandacht zinvol is: bijvoorbeeld bij een lange lead time, een bepaald boekingskanaal of voorwaarden zonder aanbetaling.

Voor de analyse gebruiken we de openbare Hotel Booking Demand-dataset van António, de Almeida en Nunes. Deze bevat 119.390 reserveringen van één cityhotel en één resorthotel, met aankomsten tussen juli 2015 en augustus 2017. Persoons- en hotelidentificerende gegevens zijn verwijderd.

Ken de data

Voor we starten met de dataset is het goed om een gevoel te krijgen bij de data die we voorhanden hebben.

Als data-analist, of data-eigenaar ga je er vast van uit dat je de data al kent en dat deze geen verrassingen voor je heeft. Toch is het goed om altijd stil te staan bij de volgende vraagstukken:

  • Heb ik gaten of lege waarden in mijn data? Zo ja, zijn deze logisch? Vul de gaten op met standaard waarden.
  • Is mijn data logisch? Een logische check kan zijn "heb ik reserveringen met 0 volwassenen, 0 kinderen en 0 babies?" Dit zijn vreemde reserveringen en dienen te worden uitgesloten voor verdere analyse.
Overzicht van ontbrekende waarden in de hotelboekingsdataset
Voorbeeld: inzicht in lege waarden in de dataset

Ken de klanten

Voordat we gaan kijken naar de annuleringen is het goed om te weten wie de klanten zijn. Ondanks dat we al een goed beeld verwachten te hebben kan het geen kwaad hier toch even bij stil te staan.

Waar komen mijn gasten vandaan?

Het land van herkomst van de gasten kunnen we op meerdere manieren presenteren. Hieronder een tabel, gesorteerd op aantal reserveringen per land en een grafische visualisatie op de kaart, gekleurd naar aantal reserveringen.

Herkomstlanden van gasten in de hotelboekingsdataset

Zoals te zien komen gasten uit vrijwel de gehele wereld naar de hotels. Verreweg de meeste gasten komen echter uit Portugal en andere West-Europese landen.

Verdeling tussen nieuwe en terugkerende hotelgasten
Verdeling van hotelreserveringen per boekingskanaal

Hierboven zien we welk deel van de gasten terugkerend is en welk deel via een agent heeft geboekt.

Verder zien we de klant-types, marktsegmenten, distributiekanalen en maaltijd-keuze.

Wat betalen de gasten per kamer per nacht?

Het is goed rekening te houden met het feit dat de prijzen tussen de hotels variëren, bijvoorbeeld doordat de hotels verschillende kamersoorten en ontbijt- of dinerarrangementen aanbieden. Ook seizoenspatronen spelen een rol.

Hieronder een voorbeeld van de gemiddelde kamerprijs (ADR) gepresenteerd per gereserveerd kamertype, uitgesplitst per soort hotel. Ook een weergave van de ADR per land van herkomst van de gast. Kunnen we hier nog interessante informatie uit halen?

Verdeling van de gemiddelde kamerprijs ADR

Zoals te zien hangt de ADR af per kamertype en de standaarddeviatie voor het specifieke kamertype.

Hoe verschilt de kamerpijs per nacht gedurende het jaar?

Door de ADR per reservering te analyseren is inzichtelijk te maken wat de ADR is per periode, plus hoe dit er uit ziet over de jaren heen.

Ontwikkeling van ADR door de tijd

Zoals in deze visualisatie te zien is de ADR voor het city-hotel redelijk stabiel over het jaar heen. De ADR voor het resort-hotel kent grote pieken in de zomermaanden en zakt flink in de overige maanden van het jaar.

Vergelijking van ADR tussen cityhotel en resorthotel

Wanneer we de granulariteit van de periode-as aanpassen van maand naar week dan zien we dat de ADR voor het resort-hotel rond de jaarwisseling een flinke piek kent.

Relatie tussen ADR en lead time van hotelboekingen

Als we kijken naar het aantal dagen tussen de reserverings- en aankomstdatum (de lead time) is te zien dat de ADR voor boekingen op de aankomstdatum zelf (lead time van 0 dagen) buiten de zomermaanden aanzienlijk lager ligt. Hier zie je duidelijk het effect terug van het verlagen van de prijzen om leegstand te voorkomen.

Verder zien we dat het voor gasten raadzaam is om voor de zomermaanden ruim van tevoren te reserveren om de laagste prijs te garanderen. In de rest van het jaar kan het interessant zijn een eerdere reservering te annuleren en opnieuw te boeken om een lagere prijs te bemachtigen.

Wat zijn de drukste maanden?

Inzicht in het aantal bezoekers aan de hotels is van belang om te zien waar de meeste druk ligt en de meeste behoefte is aan personeel.

Ontwikkeling van het aantal hotelgasten door de tijd

Als we kijken naar het aantal personen in-house dan valt op dat het city-hotel in de lente en herfst de meeste gasten heeft, wanneer de prijzen ook hoog zijn.

Voor het resort-hotel daalt het aantal gasten van juni tot september, precies wanneer de prijzen hoog zijn.

Beide hotels kennen het laagst aantal gasten in de winter.

Kalenderheatmap van hotelreserveringen

Afgezet naar de dagen in het jaar zijn de piekmomenten op de data goed zichtbaar.

Hoe lang verblijven mijn gasten?

Verdeling van de verblijfsduur van hotelgasten

Zoals te zien kent het resort-hotel gemiddeld een langere verblijfsduur, daar waar het city-hotel meer (maar kortere) verblijven kent. Opvallende pieken voor verblijven van 7, dan wel 14 dagen in het resort-hotel.

Langere verblijven (tot 60+ dagen) komen voor, maar zeer zelden.

Welke gasten annuleren?

Om een beeld te krijgen van de annuleringen is het goed om te kijken naar een aantal zaken zoals het land van herkomst van de gast, klant-type, marktsegment, etc.

Annuleringspercentage per hoteltype

Zoals we hierboven kunnen zien kent het City-Hotel een relatief hoger aantal annuleringen dan het Resort-hotel, met met name pieken in de wintermaanden. Het resort-hotel kent een meer stabiel patroon van annuleringen.

Relatie tussen lead time en geannuleerde reserveringen

Het merendeel van de annuleringen komt 15 dagen of meer voor de geplande aankomstdatum binnen. Een kleine 5% wordt op de dag zelf geannuleerd.

Annuleringen uitgesplitst naar herkomstland

Zetten we het aantal absolute en relatieve annuleringen af per land van herkomst dan geeft dit een interessant beeld. De donkergekleurde landen kennen het relatief hoogst aantal annuleringen.

Kenmerken van geannuleerde en behouden reserveringen

Wanneer we kijken naar het aantal reserveringen per klant-type, marktsegment en distributiekanaal worden zaken verder duidelijk. Vooral marktsegment 'Groups' (tweede grafiek) springt er hier uit, met meer annuleringen dan reserveringen die daadwerkelijk door zijn gegaan.

Klaarzetten van de data

Nu we een beeld hebben van de inhoud en betekenis van de data kunnen we bekijken hoe deze kan worden ingezet voor het doen van voorspellingen.

We zijn op zoek naar het antwoord op de vraag welke reserveringen zullen worden geannuleerd. Om te starten gaan we kijken naar de bestaande correlaties tussen de kenmerken van de reservering en de uitkomst, namelijk een annulering, vastgelegd in de kolom 'is_canceled''.

Correlatiematrix van kenmerken in de hotelboekingsdataset

Op basis van dit overzicht weten we welke velden relevant zijn, maar ook welke velden niet relevant - en dus uit de set kunnen worden verwijderd. Interessant om te zien is dat bijvoorbeeld het veld 'country' niet relevant blijkt te zijn.

  • days_in_waiting_list
  • arrival_date_year
  • assigned_room_type
  • booking_changes
  • reservation_status
  • country

Het is van belang om de overgebleven dataset in te richten naar numerieke en categoriale data. Dit houdt in dat bijvoorbeeld marktsegmenten of kamertypes worden vertaald van een tekstuele waarde naar een categorie [0, 1, 2, ..]. Voor numerieke data zoals lead time, aantal volwassenen, ADR, eerdere annuleringen door de klant wordt de data genormaliseerd zodat deze door de computer te begrijpen is.

Hieronder een overzicht van hoe de verschillende numerieke waarden zich tot elkaar verhouden, gekleurd per uitkomst: geannuleerd in oranje, of niet geannuleerd in blauw.

Pairplot van numerieke boekingskenmerken en annuleringen

Het wordt niet direct duidelijk welke waarden met elkaar in relatie zijn. Wel is interessant dat de hoge 'lead-time' (bovenste rij) tot annuleringen lijkt te leiden.

De resulterende gecategoriseerde en genormaliseerde dataset wordt nu opgeknipt in twee delen:

  • Een deel met alle kenmerken in verschillende kolommen
  • Een deel met de uitkomst, geannuleerd 1 of 0

Het resultaat wordt nogmaals opgeknipt in twee delen:

  • Het deel wat dient te worden gebruikt om het model te trainen. Bij het trainen van het model wordt gekeken naar welke velden op welke wijze betrekking hebben op de uitkomst waarnaar we op zoek zijn. Hiervoor wordt een groot deel van de beschikbare dataset ingezet, in dit geval kiezen we voor 70% van de rijen.
  • Het deel wat dient te worden gebruikt om de uitkomst van het model te valideren. Bij het valideren wordt gecontroleerd in hoeverre de uitkomst van het getrainde model overeenkomt met de werkelijk uitkomst. De validatieset bestaat uit het restant van de dataset, in dit geval 30% van de rijen.

Opstellen van het model

Er zijn vele verschillende soorten machine learning modellen. Het kiezen van het juiste model hangt af van de gewenste toepassing van de data.

Om een beeld te krijgen van de geschiktheid van het soort model op onze dataset is een aantal modellen getraind en houden we bij wat de uitkomst is per model op het gebied van nauwkeurigheid op de validatieset. Klik op de naam van het model voor een link met meer informatie.

Soort modelNauwkeurigheid op validatieset
CatBoost classifier99,5694%
Artificial neural network99,2115%
XGBoost classifier98,4761%
LGBM Classifier96,7984%
Random Forest Classifier95,1934%
Decision Tree Classifier94,7124%
AdaBoost classifier94,6117%
Gradient Boosting Classifier90,1155%
K-Nearest Neighbour89,3521%
Logistic regression81,0922%

Op deze specifieke train-validatiesplitsing behaalt CatBoost de hoogste nauwkeurigheid: 99,57%. Dat is geen algemene zekerheid dat toekomstige reserveringen even goed worden voorspeld. De score geldt alleen voor deze historische dataset en deze gekozen verdeling van trainings- en validatiedata.

Nauwkeurigheid alleen is bovendien onvoldoende. Een bruikbaar model moet ook worden beoordeeld op onder meer precision, recall, foutpositieven en foutnegatieven. Voor een hotel maakt het immers verschil of een risicovolle boeking wordt gemist of een betrouwbare gast ten onrechte als risico wordt aangemerkt.

Wanneer we kijken naar de 'Feature importance' van het Cat Boost model dan krijgen we een beeld van de invloed van de diverse kenmerken op de uitkomst geannuleerd of niet.

Feature importance van het CatBoost-model voor hotelannuleringen

Hieruit kunnen we opmaken dat een aantal kenmerken buiten de beïnvloedingssfeer vallen, namelijk zaken gerelateerd aan de aankomstdatum. Daarnaast zijn er een aantal kenmerken waar wel mee te sturen valt, zoals de 'deposit_type' en in meer of mindere mate de 'lead_time'.

Van modelscore naar hotelbeslissing

De analyse laat zien dat annuleringsrisico samenhangt met meerdere signalen. In deze dataset vallen vooral lead time, aanbetalingsvoorwaarden, marktsegment, distributiekanaal en eerdere boekingshistorie op. Dat zijn aanknopingspunten, geen universele causaliteit: ieder hotel heeft een andere gastenmix, prijsstrategie en kanaalverdeling.

  • Valideer het model op recente, eigen reserveringsdata en bij voorkeur op een latere tijdsperiode dan de trainingsperiode.
  • Gebruik alleen kenmerken die werkelijk bekend zijn op het moment waarop de voorspelling wordt gemaakt; zo voorkom je dat informatie uit de toekomst in het model lekt.
  • Koppel risicoscores aan proportionele acties, zoals een herinnering, bevestigingsvraag of andere betaalvoorwaarde, in plaats van automatische afwijzing.
  • Monitor de uitkomst per segment en kanaal. Een model veroudert wanneer gastgedrag, voorwaarden of distributie veranderen.
  • Meet naast modelkwaliteit ook het bedrijfseffect: minder lege kamers, minder kostbare relocaties en een betere gastbeleving.

De belangrijkste winst ontstaat wanneer analyse, planning en dagelijkse opvolging op elkaar aansluiten. OptiFlowR helpt om forecast en realisatie in één werkwijze te verbinden; Vandaro brengt operationele hospitalitydata samen in leesbare inzichten.


Verder praten over hoteldata?

Wil je onderzoeken welke signalen in jouw eigen reserveringsdata bruikbaar zijn? Neem contact op; dan kijken we samen naar de data, de beslissingen die je wilt ondersteunen en een passende eerste analyse.

Over de auteur
Dennis werkt vanuit De Bonte Koning aan dataproducten voor planning, hospitality en besluitvorming. De aanpak in dit artikel is bedoeld als transparante praktijkverkenning, niet als kant-en-klaar productiemodel.