Skip to content

Karnegii/FinalProjectBeta-Hotel

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Final Project Beta-Hotel - Hotel Booking Cancellation Prediction

A. Business Problem Understanding

Context

Industri perhotelan dan pariwisata saat ini telah bertransformasi menjadi salah satu sektor yang paling bergantung pada data (data-driven) di dunia. Dengan menjamurnya Online Travel Agents (OTA) dan platform pemesanan digital, akses pelanggan terhadap pemesanan kamar menjadi sangat mudah dan transparan. Namun, kemudahan ini membuat pelanggan dapat membandingkan harga secara real-time dan melakukan pemesanan spekulatif di berbagai tempat sekaligus. Fenomena ini menciptakan volatilitas permintaan yang tinggi, di mana pola pemesanan tradisional tidak lagi cukup untuk menjamin tingkat hunian yang optimal (Journal of Hospitality Marketing & Management).

Perubahan perilaku konsumen ini memunculkan tantangan operasional utama, yaitu ketidakpastian kehadiran customer. Banyak pelanggan memanfaatkan kebijakan pembatalan gratis (free cancellation policy) yang ditawarkan hotel sebagai strategi fleksibilitas perjalanan mereka. Akibatnya, hotel sering kali menghadapi pembatalan mendadak atau customer yang tidak datang (no-show). Ketidakpastian ini bukan hanya masalah administratif, tetapi merupakan gangguan serius terhadap rantai pasok layanan hotel, mulai dari perencanaan staf, penyediaan makanan, hingga manajemen inventaris kamar.

Jika hotel terlalu konservatif, banyak kamar akan kosong. Sebaliknya, jika hotel melakukan overbooking** tanpa perhitungan matang untuk mengantisipasi pembatalan, mereka berisiko merusak reputasi brand karena menolak customer yang sudah datang. Oleh karena itu, revenue Management menjadi kunci pertahanan profitabilitas hotel.

Dalam upaya memitigasi risiko ini, metode konvensional yang hanya mengandalkan intuisi manajer hotel atau analisis spreadsheet sederhana tidak lagi memadai. volume data transaksi yang masif, variasi segmen pasar, serta pola musiman yang kompleks memerlukan pendekatan analitik yang lebih canggih. Penerapan Machine Learning memungkinkan hotel untuk beralih dari sekadar bereaksi terhadap pembatalan menjadi memprediksi pembatalan tersebut sebelum terjadi. Dengan mengenali pola karakteristik customer yang berisiko batal, hotel dapat mengambil tindakan preventif yang lebih strategis.

Berdasarkan data internal perusahaan yang kita miliki saat ini, urgensi untuk melakukan analisis mendalam sangatlah mendesak. Data historis menunjukkan bahwa tingkat pembatalan terbesar ada pada hotel bertipe City Hotel (74.9%), yang dimana 3x lebih besar dibandingkan dengan resort hotel (25.1%). Tanpa intervensi berbasis data untuk memahami faktor dan segmentasi pengunjung melakukan pembatalan pesananan, hotel tidak bisa merancang strategi yang baik dalam menghadapi kondisi-kondisi tertentu.

Problem Statement

Berdasarkan business problem tersebut, maka dalam kasus ini ditentukan terdapat 2 permasalahan yang akan dibahas. Diantaranya :

  1. Faktor apa saja yang memengaruhi cancel dalam proses booking hotel?
  2. Bagaimana mengetahui potensi customer akan melakukan cancel atau tidak untuk pengendalian resiko?

B. Goals

Untuk menjawab semua masalah yang muncul, maka pada analisis ini memiliki tujuan sebagai berikut :

  1. Mengetahui faktor yang menjadi pengaruh terbesar dalam cancel hotel sehingga memberikan pandangan untuk lebih waspada terhadap fenomena serupa
  2. Memberikan prediksi terhadap calon customer yang berpotensi melakukan cancel terhadap pemesanan hotel

C. Pendekatan Analisis

Untuk menjawab rumusan masalah dan mencapai tujuan yang telah ditetapkan, analisis ini akan dilakukan melalui beberapa tahapan sistematis sebagai berikut:

  1. Data Cleaning and Understanding:

    • Identifikasi awal untuk melihat kualitas data dan melakukan cleaning untuk menjaga integritas data
  2. Exploratory Data Analysis (EDA):

    • Menganalisis distribusi data univariat dan multivariat untuk memahami karakteristik market.
  3. Data Preprocessing:

    • Melakukan Encoding pada fitur kategorikal dan Scaling pada fitur numerikal.
    • Menangani ketidakseimbangan kelas (Imbalanced Data Handling) jika diperlukan, mengingat pembatalan mencapai 37%.
  4. Model Benchmarking & Selection:

    • Melatih beberapa algoritma Machine Learning (seperti Logistic Regression, Decision Tree, Random Forest, XGBoost, dll).
    • Membandingkan performa model dasar (baseline) untuk memilih algoritma kandidat terbaik.
  5. Model Evaluation & Tuning:

    • Melakukan Hyperparameter Tuning pada model terbaik.
    • Mengevaluasi model menggunakan metrik yang relevan dengan konteks bisnis (dijelaskan detail di bawah).
  6. Interpretation & Recommendation:

    • Menggunakan Feature Importance (SHAP values) untuk menjelaskan faktor penyebab pembatalan.
    • Memberikan rekomendasi bisnis berdasarkan insight yang ditemukan.

D. Evaluasi Model Prediksi (Machine Learning)

Dalam kasus klasifikasi prediksi pembatalan hotel, kita perlu menerjemahkan hasil statistik model ke dalam dampak finansial riil. Target variabel kita adalah:

  • 0 (Negative Class): Customer tidak membatalkan pesanan sampai waktu kedatangan (Check-In).
  • 1 (Positive Class): Customer membatalkan pesanan sebelum waktu kedatangan (canceled).

Berikut adalah konsekuensi dari kesalahan prediksi model (Confusion Matrix):

  • True Positive (TP): Model memprediksi customer Batal, dan customer Benar-benar Batal.

    • Dampak: Positif. Hotel bisa segera menjual kembali kamar tersebut ke orang lain atau tidak menyiapkan amenities, sehingga mencegah revenue Leakage.
  • True Negative (TN): Model memprediksi customer Tidak Batal, dan customer Benar-benar Tidak Batal.

    • Dampak: Positif. Operasional berjalan lancar sesuai rencana.
  • False Positive (FP) - Type 1 Error: Model memprediksi customer Batal, padahal customer Tidak Batal.

    • Dampak Bisnis: Risiko Reputasi & Biaya Kompensasi. Jika hotel mengambil tindakan agresif (seperti menjual kamar ke orang lain/overbooking) berdasarkan prediksi ini, Customer yang datang tidak akan mendapatkan kamar. Ini menyebabkan komplain, biaya ganti rugi, dan kerusakan citra brand.
  • False Negative (FN) - Type 2 Error: Model memprediksi customer Tidak Batal, padahal customer Batal.

    • Dampak Bisnis: Kehilangan Pendapatan (revenue Leakage). Hotel menahan kamar untuk customer tersebut, menolak pemesan lain, namun akhirnya kamar kosong. Ini adalah sumber utama kerugian yang ingin kita minimalkan sesuai Problem Statement.

Penentuan Metrik Utama

Tujuan utama kita adalah meminimalkan revenue Leakage (menekan False Negative). Oleh karena itu, kita ingin nilai Recall setinggi mungkin agar tidak ada pembatalan yang terlewat.

Namun, kita tidak bisa hanya mengejar Recall. Jika kita memprediksi semua customer akan batal, Recall akan 100%, tapi Precision akan hancur (banyak False Positive). Terlalu banyak False Positive akan membuat tim operasional tidak percaya pada model (karena banyak "alarm palsu") dan berisiko merugikan customer setia.

Oleh karena itu, kita membutuhkan keseimbangan antara kemampuan mendeteksi pembatalan (Recall) dan ketepatan prediksi tersebut (Precision). Metrik yang paling tepat untuk mengakomodasi keseimbangan ini adalah F1-Score.

Metrik Terpilih: Kami akan menggunakan F1-Score sebagai metrik evaluasi utama. Kami ingin model yang mampu menangkap sebanyak mungkin potensi pembatalan, namun tetap menjaga presisi agar rekomendasi yang diberikan kepada manajemen dapat dipercaya dan tidak memicu kebijakan overbooking** yang gegabah.

$$F1\text{-}Score = 2 \times \frac{Precision \times Recall}{Precision + Recall}$$

Dimana:

  • $Recall = \frac{TP}{TP + FN}$ (Fokus meminimalkan kamar kosong/batal)
  • $Precision = \frac{TP}{TP + FP}$ (Fokus meminimalkan risiko salah prediksi batal)

Justifikasi Pemilihan Metrik:

Meskipun tujuan utama adalah menekan False Negative (memaksimalkan Recall agar tidak ada potensi pembatalan yang terlewat), kami memilih F1-Score (seimbang) alih-alih F2-Score.

Alasannya adalah pertimbangan risiko bisnis pada False Positive. Jika model memiliki presisi yang buruk (banyak False Alarm), dan hotel mengambil keputusan agresif (seperti menjual kembali kamar tersebut), hal ini dapat menyebabkan insiden customer datang tanpa mendapatkan kamar (Overbooking* incident*). Risiko kerusakan reputasi dan biaya kompensasi customer (Walked Guest Cost) dianggap setara atau bahkan lebih berbahaya daripada risiko kamar kosong. Oleh karena itu, keseimbangan antara Recall dan Precision sangat krusial.

E. Feature Description

Nama Variabel Deskripsi
hotel Hotel (H1 = Resort Hotel or H2 = City Hotel).
is_canceled Value indicating if the booking was canceled (1) or not (0)
lead_time Number of days that elapsed between the entering date of the booking into the PMS and the arrival date
arrival_date_year Year of arrival date
arrival_date_month Month of arrival date
arrival_date_week_number Week number of year for arrival date
arrival_date_day_of_month Month number of year for arrival date
stays_in_weekend_nights Number of weekend nights (Saturday or Sunday) the guest stayed or booked to stay at the hotel
stays_in_week_nights Number of week nights (Monday to Friday) the guest stayed or booked to stay at the hotel
adults Number of adults
children Number of children
babies Number of babies
meal Type of meal booked. Categories are presented in standard hospitality meal packages: Undefined/SC – no meal package; BB – Bed & Breakfast; HB – Half board (breakfast and one other meal – usually dinner); FB – Full board (breakfast, lunch and dinner)
country Country of origin. Categories are represented in the ISO 3155–3:2013 format
market_segment market segment designation. In categories, the term “TA” means “Travel Agents” and “TO” means “Tour Operators"
distribution_channel booking distribution channel. The term “TA” means “Travel Agents” and “TO” means “Tour Operators”
is_repeated_guest Value indicating if the booking name was from a repeated guest (1) or not (0)
previous_cancellations Number of previous bookings that were cancelled by the customer prior to the current booking
previous_ bookings_not_canceled Number of previous bookings not cancelled by the customer prior to the current booking
reserved_room_type Code of room type reserved. Code is presented instead of designation for anonymity reasons.
assigned_room_type Code for the type of room assigned to the booking. Sometimes the assigned room type differs from the reserved room type due to hotel operation reasons (e.g. over booking) or by customer request. Code is presented instead of designation for anonymity reasons.
booking_changes Number of changes/amendments made to the booking from the moment the booking was entered on the PMS until the moment of check-in or cancellation
deposit_type Indication on if the customer made a deposit to guarantee the booking. This variable can assume three categories: No Deposit – no deposit was made; Non Refund – a deposit was made in the value of the total stay cost; Refundable – a deposit was made with a value under the total cost of stay.
agent ID of the travel agency that made the booking
company ID of the company/entity that made the booking or responsible for paying the booking. ID is presented instead of designation for anonymity reasons
days_in_waiting_list Number of days the booking was in the waiting list before it was confirmed to the customer
customer_type Type of booking, assuming one of four categories: Contract - when the booking has an allotment or other type of contract associated to it; Group – when the booking is associated to a group; Transient – when the booking is not part of a group or contract, and is not associated to other transient booking; Transient-party – when the booking is transient, but is associated to at least other transient booking
adr Average Daily rate as defined by dividing the sum of all lodging transactions by the total number of staying nights
required_car_parking_spaces Number of car parking spaces required by the customer
total_of_special_requests Number of special requests made by the customer (e.g. twin bed or high floor)
reservation_status Reservation last status, assuming one of three categories: canceled – booking was canceled by the customer; Check-Out – customer has checked in but already departed; No-Show – customer did not check-in and did inform the hotel of the reason why
reservation_status_date Date at which the last status was set. This variable can be used in conjunction with the ReservationStatus to understand when was the booking canceled or when did the customer checked-out of the hotel

F. Rekomendasi

  1. Kebijakan Deposit Dinamis (Dynamic Deposit Policy) Penerapan: Gunakan model untuk memprediksi risiko setiap pesanan baru secara real-time.
  • Jika prediksi "Berisiko Tinggi": Wajibkan deposit Non-Refundable atau minimal deposit satu malam untuk mengikat komitmen tamu.

  • Jika prediksi "Berisiko Rendah": Tawarkan opsi No Deposit atau Free Cancellation sebagai insentif untuk menarik lebih banyak tamu setia (Loyal Customers).

  1. Strategi Overbooking yang Terukur
  • Alih-alih melakukan overbooking secara membabi buta yang berisiko membuat tamu marah (walking guest), gunakan probabilitas pembatalan dari model untuk menentukan jumlah kamar yang bisa di-overbook dengan aman pada tanggal-tanggal sibuk.
  1. Customer Relationship Management (CRM) Tertarget
  • Pre-arrival Engagement: Untuk segmen "High Value - High Risk" (tamu yang membayar mahal tapi berisiko batal), kirimkan email pengingat, penawaran upgrade kamar diskon, atau layanan antar-jemput beberapa hari sebelum kedatangan untuk meningkatkan switching cost (rasa sayang jika membatalkan).
  1. Restriksi pada Lead Time Panjang
  • Karena Lead Time yang panjang berkorelasi dengan pembatalan tinggi, hotel dapat menerapkan kebijakan pembatalan yang lebih ketat (misalnya maks H-7) untuk pemesanan yang dilakukan jauh-jauh hari (>3 bulan).

G. Tautan Terkait

1. Tableau: Dashboard
2. Streamlit: Streamlit

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors