Microcredential / app.py
yovigi's picture
Upload app.py with huggingface_hub
75c5232 verified
Raw
History Blame
3.23 kB
import gradio as gr
import joblib
import pandas as pd
import numpy as np
pipeline = joblib.load("model.joblib")
NUM = ["lead_time","stays_in_weekend_nights","stays_in_week_nights","adults","children","babies",
"previous_cancellations","previous_bookings_not_canceled","booking_changes",
"days_in_waiting_list","adr","required_car_parking_spaces","total_of_special_requests",
"total_nights","total_guests","revenue_est","risky_repeat"]
CAT = ["hotel","meal","market_segment","distribution_channel",
"reserved_room_type","deposit_type","customer_type","lead_cat","arrival_season"]
DEFAULTS = {
"stays_in_weekend_nights":2,"stays_in_week_nights":3,"adults":2,"children":0,"babies":0,
"previous_bookings_not_canceled":0,"booking_changes":0,"days_in_waiting_list":0,
"required_car_parking_spaces":0,"meal":"BB","distribution_channel":"TA/TO",
"reserved_room_type":"A","customer_type":"Transient","arrival_season":"summer",
"total_guests":2,
}
def predict(hotel, lead_time, deposit_type, market_segment,
total_of_special_requests, previous_cancellations, adr, total_nights):
row = DEFAULTS.copy()
row.update({
"hotel": hotel, "lead_time": float(lead_time),
"deposit_type": deposit_type, "market_segment": market_segment,
"total_of_special_requests": float(total_of_special_requests),
"previous_cancellations": float(previous_cancellations),
"adr": float(adr), "total_nights": float(total_nights),
"revenue_est": float(adr) * max(float(total_nights), 1),
"risky_repeat": int(float(previous_cancellations) > 0),
"lead_cat": pd.cut([float(lead_time)], bins=[-1,7,30,90,180,9999],
labels=["last_minute","short","medium","long","very_long"])[0],
})
X = pd.DataFrame([row])[NUM + CAT]
prob = float(pipeline.predict_proba(X)[0, 1])
label = "Low risk" if prob < 0.30 else ("Medium risk" if prob < 0.60 else "High risk")
return {label: prob}
demo = gr.Interface(
fn=predict,
inputs=[
gr.Dropdown(["City Hotel","Resort Hotel"], label="Hotel type", value="City Hotel"),
gr.Slider(0, 500, value=30, step=1, label="Lead time (days)"),
gr.Dropdown(["No Deposit","Non Refund","Refundable"], label="Deposit type", value="No Deposit"),
gr.Dropdown(["Direct","Online TA","Offline TA/TO","Corporate","Groups"],
label="Market segment", value="Online TA"),
gr.Slider(0, 5, value=1, step=1, label="Special requests"),
gr.Slider(0, 20, value=0, step=1, label="Previous cancellations"),
gr.Slider(0, 500, value=100, step=5, label="ADR (€)"),
gr.Slider(1, 30, value=3, step=1, label="Total nights"),
],
outputs=gr.Label(label="Cancellation risk"),
title="Hotel Booking Cancellation Risk",
description="Predict cancellation probability from booking parameters. Educational demo only.",
examples=[
["City Hotel",200,"Non Refund","Online TA",0,3,95,2],
["Resort Hotel",7,"No Deposit","Direct",3,0,150,7],
],
flagging_mode="never",
)
if __name__ == "__main__":
demo.launch()