import pandas as pd import pickle import numpy as np import streamlit as st import gdown import os # File IDs model_id = "1HSQTjJ_hvBBmVJmYUmrkq5T7ubpfDwzF" top_country_id = "1aLkaAqfrs3GcrMvZcuyQ0NjFhAhrdIlR" model_url = f"https://drive.google.com/uc?id={model_id}" top_country_url = f"https://drive.google.com/uc?id={top_country_id}" @st.cache_resource def load_model(): model_path = "best_rf_model.pkl" if not os.path.exists(model_path): gdown.download(model_url, model_path, quiet=False) with open(model_path, "rb") as f: return pickle.load(f) @st.cache_resource def load_top_country(): country_path = "top_country.pkl" if not os.path.exists(country_path): gdown.download(top_country_url, country_path, quiet=False) with open(country_path, "rb") as f: return pickle.load(f) model = load_model() top_country = load_top_country() st.set_page_config(page_title="Hotel Booking Prediction", layout="wide") st.markdown( """

Hotel Booking Prediction

Welcome to Hotel Booking Prediction System

Fill in the form below to predict hotel booking!

""", unsafe_allow_html=True, ) st.write("") st.write("") with st.form(key="hotel_bookings"): col1, col2 = st.columns(2) with col1: name = st.selectbox("Hotel Type", ("city_hotel", "resort_hotel"), index=0) lead = st.number_input( "Lead Time", min_value=0, max_value=600, value=0, step=1, help="jarak antar waktu booking dan check-in", ) arrival_year = st.selectbox("Arrival Year", ("2015", "2016", "2017"), index=0) arrival_month = st.selectbox( "Arrival Months", ( "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", ), index=0, ) with col2: arrival_week = st.number_input( "Arrival Weeks", min_value=1, max_value=52, value=1, step=1, help="minggu kedatangan", ) arrival_day = st.number_input( "Arrival Days", min_value=1, max_value=31, value=1, step=1, help="tanggal kedatangan", ) submitted = st.form_submit_button("Predict", use_container_width=True) if submitted: # Prepare data for prediction data = { "hotel": name, "lead_time": lead, "arrival_date_year": int(arrival_year), "arrival_date_month": arrival_month, "arrival_date_week_number": arrival_week, "arrival_date_day_of_month": arrival_day, } df = pd.DataFrame([data]) try: prediction = model.predict(df) st.success("Prediction Complete!") if prediction[0] == 1: st.error("⚠️ This booking is likely to be CANCELLED") else: st.success("✅ This booking is likely to be CONFIRMED") except Exception as e: st.error(f"Error making prediction: {str(e)}")